Roadmap
This page is the public view of where vsceasy is going. It is intentionally high-level — the source of truth for shipped work is CHANGELOG.md, and for in-flight work it is the issue tracker.
Guiding principles
These don’t change release to release — they’re the lens we use to accept or reject every feature.
- Codegen, not a framework you ship. vsceasy writes plain TypeScript + React into your project. Your extension never depends on vsceasy at run time. If a feature would force a runtime dependency, it has to justify itself hard.
- You own the output. Generated code is readable, editable, and yours. No hidden magic, no lock-in. Re-running a generator should never clobber your edits.
- Stay close to the VS Code API. We remove boilerplate (registration, the RPC
bridge, the build pipeline,
contributesbookkeeping) — not the platform. You keep using realvscode.*APIs everywhere it matters. - One file = one feature. File-based routing stays the core mental model.
- Every generator is tested. A feature without generator tests doesn’t ship.
Shipped (v0.1)
For the full list see the changelog. The headlines:
- Scaffolding —
create(with post-scaffold git init + dep install), presets, and the interactive wizard. - File-based routing — panels, commands, menus, tree views, subpanels, status
bar items, RPC handlers; a
genstep writes the registry +contributes. - Typed RPC — one shared interface types both sides of the bridge. See the RPC guide.
- React webviews + a component library themed with VS Code tokens.
- Mini-ORM —
db init,model add,crud add, with relations (ref(Model)) and reactivity (watch/listen/ stores). - Operational helpers — jobs (interval / daily / event / file watch), runtime helpers (secrets, config, state, notifications, cache), a test harness, and publish tooling.
- Maintenance —
doctorchecks andupgrademigrations.
In progress / next
Targeted for upcoming 0.1.x and 0.2 releases. Order is rough, not a commitment. Each item links to its tracking issue once one exists — if you want one, open it.
Data layer
- SQLite provider for the ORM. The provider interface was designed to host a real database next to the filesystem JSON store. SQLite is the first target.
- Richer relations. Today
ref(Model)is ManyToOne only (FK on this model, no join table, no cascade). OneToMany / ManyToMany and cascade options are the natural next step. - Migrations. A story for evolving entity shapes once a row store exists.
UI
- More webview UI options. v0.1 ships React only (Svelte/Vue/Vanilla were intentionally dropped to focus the first release). Re-introducing additional UI targets is on the table once the React surface is stable.
- More component primitives in the generated component library.
DX & tooling
- More
doctorchecks as common misconfigurations surface from real use. - Tighter
upgrademigrations so generated projects can cross breaking changes without hand-editing. - Better error messages across generators — keep quoting the exact target path and naming what to create.
How to contribute
vsceasy is MIT-licensed and contributions are welcome. The full setup lives in CONTRIBUTING.md; here’s the shape of it.
Get the repo running
git clone https://github.com/<your-fork>/vscode-extension-frameworkcd vscode-extension-frameworkbun installbun testbun run buildbun run start <command> # run the CLI from sourceWhere things live
src/├── commands/<group>/ # CLI command definitions (param parsing, UX)├── lib/<feature>/ # generators (pure functions; no CLI deps)└── tests/ # bun test suites mirroring lib/ and commands/packages/└── vsceasy-runtime/ # standalone runtime — the source of truth, copied into the templatetemplates/├── react/ # the project template `create` copies└── _generators/ # snippet templates for `<group> add` commandsThe runtime template under templates/react/src/shared/vsceasy/ is
regenerated by bun run sync:runtime. Edit the canonical copy under
packages/vsceasy-runtime/src/ — never the mirror.
Adding a generator
The repeatable pattern for almost every feature:
- Snippet template →
templates/_generators/<feature>/. - Pure generator →
src/lib/<feature>/add.ts— signature(opts, projectRoot, templatesRoot) => { created: string[] }. - CLI command →
src/commands/<feature>/add.ts(param defs + a thin call into the generator). - Wire it into its group →
src/commands/groups.ts. - Test the generator →
src/tests/lib/<feature>.test.ts(use temp dirs, never the real cwd). - Update the changelog
(under
[Unreleased]) and the docs.
Ground rules
- Conventional Commits (
feat:,fix:,refactor:,docs:,test:). - One logical change per PR, with tests. PRs must keep
bun testgreen. - No new runtime dependencies without discussion — we rely on
@ideascol/cli-makeronly. - TypeScript strict mode; run
bun run lintandbun run formatfirst.
Good first contributions
- A new
doctorcheck for a misconfiguration you hit. - A new component for the component library.
- Docs fixes — wrong path, stale flag, a guide that didn’t match what the CLI did.
- A generator test covering an edge case (duplicate names, odd field specs).
These touch one area, have a clear test pattern to copy, and get you through the build/test loop without needing the whole architecture in your head.