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
  1. Shipped

    On (npm)

    0.16.11 is the line this site was built from: 21 packages on a single version, MIT. The docs site deploys from main.

  2. In progress

    Where we (are)

    The next branch carries the pre-beta, and it publishes as the next minor. The library grew a shell, a layout vocabulary and a UI kit — and core gave up the one thing that was never its own: compaction, now a plugin.

    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_user rework, and @aparte/plugin-approval.

    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, and main protected.

    Counted on the tree

    24elements
    25kit families
    45typed events
    456CSS variablesdocumented
    351CSS classesacross 44 sheets
    9plugins
    4wrappersReact, Vue, Svelte, Angular — plus vanilla
    2,866testsin 268 files
    31gate steps24 of them guards
    0third-party depscore’s one dependency is @aparte/engine, first-party

    Before the pre-beta ships: a cold audit — read-only auditors, then an adversarial verifier per finding — and its fixes. In progress.

  3. Open

    (Beta)

    The beta is a dist-tag and a promise. A declared surface — elements, attributes, events and their detail, barrel exports, CSS tokens and contract classes, locale keys — stops changing without a notice release. The alpha broke cleanly; the beta warns.

    The barrier, item by item

    1. One agent loop, one unified tool model. done
    2. No critical or major audit finding left open. done · re-checked by the cold audit
    3. The frozen surface declared on a stability page. open · drafted
    4. The visible UI defects fixed. done
    5. Professional hygiene: SECURITY.md, issue templates, main protected server-side. done
    6. Docs with no first-minute gap: every public export documented, the compare page, the support matrix. done
    7. The browser matrix, the coverage floors, publint and attw green on every release. done · recurring
    8. An external consumer that followed a release without breaking. in progress · the first signs are in

    And then the two things a checklist cannot hold: the cold audit, and soak time.

  4. Open

    (1.0)

    The barrier from beta to 1.0.

    • A quiet beta — no unannounced breaking change.
    • 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.

  5. 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.
  6. 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.