Skip to content

1.0.0 Release Notes Draft Checklist

This draft is the public release note shape for 1.0.0. Do not copy this draft into the GitHub Release body with placeholders. Fill the validation records, tarball digest, workflow links, and manual terminal evidence before cutting the stable release.

Title

txt
v1.0.0

Summary

@simon_he/vue-tui 1.0.0 is the first stable contract release for Vue 3 terminal UI surfaces across browser DOM, CLI stdout, and headless test environments.

This release stabilizes the package entrypoints, terminal core, DOM renderer contract, CLI runtime boundary, markdown APIs, browser-safe defaults, and release validation process. The high-throughput log, virtual list, and agent-console stacks remain available as preview-grade APIs under /experimental and /agent; they are serious regression-tested surfaces, but they are not part of the root-level 1.x SemVer promise.

Positioning

Safe public copy:

vue-tui is a Vue 3 terminal UI toolkit for browser-hosted terminal surfaces and CLI stdout apps, with shared component APIs across DOM, stdout, and headless renderers. It focuses on package stability, browser/CLI compatibility, explicit terminal permission boundaries, and high-throughput primitives for logs, markdown transcripts, and agent-console style UIs.

Do not claim:

  • Faster than OpenTUI.
  • Faster than @opentui/solid.
  • Native-level performance.
  • Production-proven compared with OpenTUI.

The current benchmark report is a vue-tui regression baseline, not a same-scenario comparison with @opentui/solid. Any future comparison must follow Compare With OpenTUI Solid.

Stable Contract

EntrypointStability1.0 contract
@simon_he/vue-tuiPublicBrowser-safe terminal core, DOM renderer, stable Vue components, input host
@simon_he/vue-tui/corePublicTerminal buffer, ANSI/theme/path/hyperlink helpers, buffer-facing types
@simon_he/vue-tui/renderer/domPublicDOM renderer factory, renderer capabilities, accessibility/link contract
@simon_he/vue-tui/cliPublicstdout renderer, stdin driver, headless app runtime, Node providers
@simon_he/vue-tui/markdownPublicmarkdown parser, TMarkdownText, TVirtualMarkdown, streaming block source
@simon_he/vue-tui/vueAdvancedExtended Vue components, render plane, router/composables
@simon_he/vue-tui/runtimeAdvancedRuntime wiring, selection, clipboard abstraction
@simon_he/vue-tui/observabilityAdvancedFramePerf, profiler, trace helpers
@simon_he/vue-tui/experimentalExperimentalTVirtualList, TLogView, log search/link/minimap, append-only log store
@simon_he/vue-tui/agentExperimentalAgent console aggregation entrypoint

What Changed Since The RC Window

Use this section only if there are post-1.0.0-rc.0 stable changes. If stable 1.0.0 is only a validation promotion, write:

No additional public API changes after 1.0.0-rc.0; this stable release promotes the validated contract.

If there are changes, keep them grouped by:

  • Breaking
  • Migration
  • Added
  • Changed
  • Fixed
  • Security
  • Performance
  • Experimental

Migration Notes

Carry forward these 1.0.0-rc.0 migration notes:

  • The root entrypoint is browser-safe and intentionally narrower.
  • Extended Vue components and router/composable helpers live under @simon_he/vue-tui/vue.
  • Node-aware input host defaults live under @simon_he/vue-tui/cli.
  • TList wheel scrolling changes viewport only; confirmation is represented by change.
  • TRenderPlane.plane is immutable after mount; use keyed remount to move a subtree.
  • scheduler.queueFrameTask() may return false; producers must clear or retry their pending state explicitly.
  • DOM renderer link rendering is opt-in and terminal OSC8 hyperlinks are sanitized.
  • OSC52 clipboard behavior requires explicit provider opt-in.
  • TVirtualList, TLogView, and agent console aggregation stay outside root.

Known Boundaries

  • Do not deep import from @simon_he/vue-tui/dist/... or source internals.
  • Emoji, CJK, and ambiguous-width rendering still depend on terminal and font behavior.
  • Browser DOM and CLI stdout are different renderer hosts; browser DOM benchmark results are not raw terminal renderer results.
  • /experimental and /agent APIs can change in 1.x, with release notes.
  • TVirtualMarkdown full-string content parsing remains suitable for moderate input; high-throughput transcript apps should prefer createMarkdownBlockSource() plus finalized blocks.
  • Regex search can still block on one pathological long line.

Validation Record

Fill every row before publishing. Blank evidence means the release is not ready.

CheckResultEvidence
Local release dry-runpass / failpnpm run release:dry-run, date, Node version
GitHub workflow dry-runpass / failworkflow run URL, dry_run=true, npm_tag=latest
Authenticated npm dry-runpass / failnpm publish --dry-run --provenance --tag latest, run log
Tarball SHA256pass / fail<sha256> <tarball>
Node/Vue matrixpass / failNode 16.17.1 / 18 / 20 / 22 / 24 with Vue 3.3.0 / 3.5.33
Packed package smokepass / failpackage contract, pnpm/npm consumer smoke, type smoke, browser smoke
SSR import smokepass / failroot/core/runtime/renderer/dom/observability/vue/markdown/experimental
Benchmark behavior gatepass / failpnpm run bench:baseline, date, Node version
Benchmark timing reviewpass / failpnpm run bench:baseline:timing or explicit not-run explanation
Docs buildpass / failpnpm run docs:build
New project npm installpass / failnpm install @simon_he/vue-tui@latest vue
Post-publish dist-tag checkpass / failnpm view @simon_he/vue-tui version, npm dist-tag ls @simon_he/vue-tui
Manual terminal validationpass / failtable below completed

Manual Terminal Validation

TargetResultEvidence
macOS Terminal or iTerm2pass / failterminal, macOS version, Node version
Linux xterm-compatible terminalpass / failterminal, distro, Node version
Windows Terminal or WSLpass / failterminal, Windows / WSL version, Node version
Resizepass / faildemo command
Ctrl+C cleanuppass / faildemo command
Keyboard inputpass / faildemo command
OSC8 links disabled/sanitized by defaultpass / failsanitized / disabled evidence
OSC52 provider requires explicit opt-inpass / failopt-in-only evidence

Suggested manual commands:

bash
pnpm run run:basic:terminal
pnpm run run:tlog-view-lab
pnpm run run:agent-console:terminal

Benchmark Summary

Use Benchmarks for the detailed report. For release notes, keep the summary short:

  • Behavior gate: <pass/fail> (pnpm run bench:baseline, date, Node version)
  • Timing review: <pass/fail/not run> (pnpm run bench:baseline:timing, date, Node version)
  • Current coverage: dirty rows, scanned nodes, painted nodes, mailbox coalescing, DOM flush behavior, retained logs, search, exact index, agent/log lab smoke.
  • Not yet covered: real terminal input-to-paint, long streaming heap, stdout bytes/frame, same-scenario @opentui/solid comparison.

Publish Commands

Stable releases must publish with latest, not rc.

Preferred path: GitHub Release workflow with npm_tag=latest.

Fallback path only when workflow token/provenance is unavailable:

bash
pnpm run release:dry-run

cd .release
sha256sum *.tgz | tee SHA256SUMS
cd ..

TARBALL=$(ls .release/*.tgz | head -n 1)
VERSION=$(tar -xOf "$TARBALL" package/package.json | node -p "JSON.parse(require('fs').readFileSync(0, 'utf8')).version")
case "$VERSION" in
  *-*)
    echo "Stable fallback must not publish prerelease $VERSION with latest"
    exit 1
    ;;
esac
if npm view "@simon_he/vue-tui@$VERSION" version >/dev/null 2>&1; then
  echo "@simon_he/vue-tui@$VERSION already exists on npm"
  exit 1
fi

VUE_TUI_ALLOW_DIRECT_PUBLISH=1 npm publish "$TARBALL" --access public --dry-run --tag latest
VUE_TUI_ALLOW_DIRECT_PUBLISH=1 npm publish "$TARBALL" --access public --tag latest

Post-Publish Checks

bash
npm view @simon_he/vue-tui version
npm dist-tag ls @simon_he/vue-tui
mkdir /tmp/vue-tui-1.0-smoke && cd /tmp/vue-tui-1.0-smoke
npm init -y
npm install @simon_he/vue-tui@latest vue

If the dist-tag is wrong, fix the tag. If the tarball is wrong, deprecate that version and release a new patch; do not overwrite an npm version.

Bug reports, feature requests, and documentation issues are tracked on GitHub Issues.