The road — conditions, not dates
One road, no dates.
aparté ships when a barrier is cleared, not when a month arrives — so this page carries no calendar. What npm serves, what the current branch holds, the conditions the beta and 1.0 each have to meet, what is still to build, and what we decided not to build, with the reason.
- shipped
- in progress
- open
-
Shipped
On (npm)
0.19.3 is the line this site was built from: 22 packages on a single version, MIT. The docs site deploys from
main.Every release, in full → @aparte/core on npm → Getting started →
-
In progress
Where we (are)
0.17.0 is out as the beta, and
nextis aligned onmainagain. What is in progress now is the soak — a beta that stays quiet — and the first 0.17.x series: the four wrappers audited as a first consumer would use them, and what that audit found made right.Dogfooding
- paulrichez.fr — Angular 19, the agent loop server-side over its own SSE events: the first public site to move onto the library, on 0.17.0. In progress, not yet live on it.
- bonaparte — a local-AI harness on the React wrapper, private: the first consumer, and where most of the frictions the library fixed were found.
Counted on the tree
24elements25kit families42typed events464CSS variablesdocumented346CSS classesacross 44 sheets9plugins4wrappersReact, Vue, Svelte, Angular — plus vanilla3,494testsin 353 files34gate steps27 of them guards0third-party depscore’s one dependency is @aparte/engine, first-party -
Shipped
(Beta)
The beta is a dist-tag and a promise, and both are out:
npm i @aparte/core@betainstalls 0.17.0, and the declared surface — elements, attributes, events and their detail, barrel exports, CSS tokens and contract classes, locale keys — is frozen as of that version: it stops changing without a notice release. The alpha broke cleanly; the beta warns.The barrier, item by item
The beta shipped on the seven conditions this list can measure. The two it cannot hold: the cold audit ran on the final tree before the cut, and soak time is what the barrier below is for.
What 0.17.0 carries
In the library
- The comfortable default density.
- Compaction left core for
@aparte/plugin-compaction. @aparte/plugin-artifacts— the artifact card as a tool renderer, and as a stream block.- The
ask_userrework, and@aparte/plugin-approval. - A title for every conversation: the manager takes a title provider, and
@aparte/plugin-titlerbinds one to a 133 KB model that runs in the browser, in 17 languages. - The scroll rail measured against the market and reworked: a list of ticks capped at a share of the transcript, centred on it, and a jump that lands where it aimed.
New elements and recipes
- The application shell:
<aparte-sidebar>, plus the app-shell and app-header recipes. <aparte-split>— two panes and a seam you can drag, arrow or collapse.<aparte-scroll-rail>.<aparte-context>, as a bar or as a ring.<aparte-suggestions>.<aparte-elicitation>, the typed-question panel.- The kit dialog, on a native
<dialog>. - Markdown tables, styled like the prose around them.
On the site, and on the project
- A live demo per layout family: reading column, feed, builder split, side panel, empty state, an artifact in a pane.
- A UI kit section — twenty-five families, live preview first.
- The components grouped by purpose: conversation, input, shell, utility.
- The compare page, and the support matrix.
SECURITY.md, andmainprotected.
-
Open
(1.0)
The barrier from beta to 1.0.
- A quiet beta — no unannounced breaking change.in progress · since 0.17.0
- A published and guarded performance budget: token-to-paint, the memory of a 500-message conversation, gzip per package.
- SSR proven on Next, Nuxt and SvelteKit, in CI.
- An accessibility statement, and a real RTL audit.
- A locale-keys guard in the gate.
- npm provenance, and a written semver and deprecation policy.
- The 1.0 versioning decision, taken cold.
- The engine competitors re-evaluated (TanStack AI), and engine’s run events mapped onto the AG-UI / A2A vocabulary if interop becomes a demand.
What 1.0 promises: strict semver — the elements and the event table stable across 1.x.
-
Open
Still to (build)
Named, and not scheduled. Every one of them waits on the same thing — the last line of this page.
Components
- Sources and citations, as an annotation on a range of a text segment: an inline marker, and a source list. The ai-sdk bridge drops source parts today.
- A floating widget: a launcher, and a fixed card that becomes a full-screen sheet under a breakpoint.
- Theme presets, as pure token sheets.
Plugins
@aparte/plugin-storage-idb— the reference IndexedDB adapter.@aparte/plugin-katex.- A one-line
setupDompurify(). @aparte/plugin-mermaid.@aparte/plugin-speech— microphone input, over the Web Speech API.- More locales —
es,de. The ideal first contribution.
The site
- The kit gallery on one page, and an Examples page: a ChatGPT-shaped app and a builder split, assembled and copyable.
- Framework tabs on every demo — React, Vue, Svelte, Angular, vanilla.
- The Builder: a live chat beside a composition panel that exports the exact install and setup of your selection, with the theme editor folded in.
- The landing where the chat is the hero, and the page splits open as you scroll.
Not hostage to our UI
- First skin packs, pure CSS.
- Then a control-renderer seam, so a design system’s own buttons — PrimeNG under Angular, shadcn under React — draw aparté’s controls without a single CSS override.
Also on the list
- A raw-completion provider for llama.cpp, when a consumer needs one.
- Conversation export — a recipe first.
-
Decided
What we said (no) to
With the reason, so that nobody re-derives the answer from scratch.
- Real-time voice sessions
- Large, and vendor-specific. Microphone input yes; sessions no.
- A workflow canvas
- Another product.
- Arbitrary generative UI
- Custom segments and tool renderers are the sane version of it, and they are already here.
- Multi-runtime adapters
- Bring-your-own-loop covers it. A guide, not a package.
- Routing, settings, persistence
- The product’s, never the library’s.
- A citation type in the segment union
- An annotation on a range of text, not a member of the union — and it lands when a provider in this repo actually returns citations.
A capability ships when an in-repo consumer exercises it end to end. A layer no caller uses is a contract maintained for nobody.