This page explains what each option scaffolds and where to look after the project is generated.
All options documented on this page are supported public CLI options. Supported means the option is represented in ces.json and is covered by unit tests, render validation, or the generated-project validation matrix.
Some categories remain intentionally narrow:
--runtime bunis fixed because Electrobun apps run through Bun.--orm drizzleis tied to SQLite because the generated Drizzle client usesdrizzle-orm/bun-sqlite.--settings databaseis tied to SQLite because the generated settings table and Drizzle schema are SQLite-specific.--template standardand--template fullare accepted compatibility aliases for the same V1 template source asminimal; they are not advertised as distinct stacks until their generated output differs and has release-gate coverage.
| Category | Decision |
|---|---|
| Template | minimal is canonical; standard and full are accepted aliases only. |
| Frontend | React is the default and supports router/query/UI integrations. Preact and Svelte are available for smaller direct-rendered WebViews. SvelteKit is available as a static WebView renderer with SvelteKit file routing. |
| Router | tanstack-router, react-router, and none are distinct supported choices. |
| Query | tanstack-query and none are enough for V1. |
| Styling | Tailwind CSS and plain CSS cover framework and no-framework styling. |
| UI | shadcn config and none are supported; generated components are left to the app. |
| Auth | app-lock is a local UI lock, not remote auth; deeper auth is post-V1 work. |
| Database | SQLite covers relational local storage; JSON-file persistence covers lightweight local records without SQLite. |
| ORM | Drizzle is the V1 ORM option; another ORM needs clear desktop value before inclusion. |
| DB setup | Seed data works with generated database clients. |
| Settings | JSON and database-backed settings are both supported through the same typed RPC surface. |
| Package manager | Bun, npm, pnpm, and Yarn are supported for install/run command text. |
| Testing | Bun tests, mocked desktop launch smoke tests, and none are supported. |
| Addons | Turborepo and none are supported. |
| Examples | RPC example and none are supported; option-specific examples are post-V1 work. |
| API | Electrobun RPC and static/no-RPC modes are supported. |
| App menu | Native Edit menu and none are supported. |
| Build env | dev, canary, and stable map directly to Electrobun build flags. |
| Build targets | current and all map directly to Electrobun build flags. |
| Navigation | Local-only navigation rules and none are supported. |
| Native utils | File dialogs, clipboard utilities, the combined desktop kit, and none are supported. |
| Window style | Native and hidden inset titlebar modes are supported. |
| Runtime | Fixed to Bun for V1 because Electrobun runs the native process through Bun. |
| Packaging | installers adds optional packaging helpers for teams that need AppImage, deb, DMG collection, and NSIS wrapping beyond Electrobun's built-in artifacts. |
Selects the template profile. All three profile names are accepted and written to ces.json. Today they share the stable minimal template source, so their generated files are intentionally equivalent except for manifest identity.
Relevant files:
ces.jsonREADME.md
Generates a React renderer for the Electrobun WebView.
Relevant files:
src/views/main/main.tsxsrc/views/main/app.tsxsrc/views/main/home.tsx
React is the default frontend and supports all generated router, query, shadcn, and renderer examples.
Generates a Preact renderer for the Electrobun WebView.
Relevant files:
src/views/main/main.tsxsrc/views/main/app.tsxsrc/views/main/home.tsxvite.config.tstsconfig.jsonpackage.json
Preact currently supports direct rendering only. Use it with --router none, --query none, and --ui none.
Generates a Svelte renderer for the Electrobun WebView.
Relevant files:
src/views/main/main.tssrc/views/main/App.sveltesrc/views/main/Home.sveltevite.config.tstsconfig.jsonpackage.json
Svelte currently supports direct rendering only. Use it with --router none, --query none, and --ui none.
Generates a static SvelteKit renderer for the Electrobun WebView. The SvelteKit adapter writes built files into .electrobun/views/main, which Electrobun packages as views://main/index.html.
Relevant files:
svelte.config.jssrc/views/main/app.htmlsrc/views/main/routes/+layout.sveltesrc/views/main/routes/+layout.tssrc/views/main/routes/+page.sveltesrc/views/main/Home.sveltevite.config.tstsconfig.jsonpackage.json
SvelteKit uses its own file routing in this template. Use it with --router none, --query none, and --ui none.
Uses Bun for the native process. Electrobun runs the app through a Bun entrypoint.
Relevant files:
src/bun/index.tssrc/bun/window.tspackage.json
Adds TanStack Router with file-based routes and the TanStack Vite plugin.
Relevant files:
src/views/main/routes/__root.tsxsrc/views/main/routes/index.tsxsrc/views/main/routeTree.gen.tsvite.config.ts
Notes:
routeTree.gen.tsis generated by the TanStack Router Vite plugin.biome.jsonignores the generated route tree.
Adds React Router with HashRouter, which is a good fit for a bundled views:// desktop renderer.
Relevant files:
src/views/main/app.tsxpackage.json
Renders the starter view directly without a renderer router.
Relevant files:
src/views/main/app.tsxsrc/views/main/home.tsx
Does not add a server-state client.
Adds TanStack Query and wraps the renderer in QueryClientProvider.
Relevant files:
src/views/main/app.tsxpackage.json
Use this when the renderer will call native RPC, sync APIs, or remote APIs often enough that request caching and invalidation are useful.
Adds Tailwind CSS v4 through the Vite plugin.
Relevant files:
src/views/main/styles/globals.csssrc/views/main/styles/app.cssvite.config.tspackage.json
Uses plain CSS and skips Tailwind dependencies.
Relevant files:
src/views/main/styles/globals.csssrc/views/main/styles/app.css
Adds shadcn/ui project configuration. This requires Tailwind CSS.
Relevant files:
components.jsontsconfig.jsonsrc/views/main/styles/globals.csspackage.json
The generator does not add individual shadcn components. It prepares the app so you can add them with the shadcn CLI.
Does not add component library configuration.
Adds a typed Electrobun RPC bridge between the Bun process and the WebView.
Relevant files:
src/bun/rpc/router.tssrc/bun/rpc/handlers.tssrc/shared/rpc/schema.tssrc/shared/rpc/types.tssrc/views/main/lib/rpc.tssrc/bun/window.ts
Omits BrowserWindow RPC wiring and generates a static renderer API surface.
Use this for static desktop shells or when you plan to add native bridge code manually.
Adds a small greeting/logging RPC demo to the generated renderer and Bun handlers.
Relevant files:
src/views/main/home.tsxsrc/bun/rpc/router.tssrc/bun/rpc/handlers.tssrc/shared/rpc/schema.tsREADME.md
Keeps the selected infrastructure but omits demo RPC calls and the generated README RPC example section.
Adds native navigation rules so the WebView stays on bundled views:// content and about:blank.
Relevant files:
src/bun/window.ts
Does not install navigation rules.
Adds a typed RPC request backed by Electrobun Utils.openFileDialog.
Relevant files:
src/bun/rpc/handlers.tssrc/bun/rpc/router.tssrc/shared/rpc/schema.tssrc/shared/types.tssrc/views/main/home.tsx
Requires --api electrobun-rpc.
Adds typed RPC requests for Electrobun clipboard read, write, and clear operations.
Relevant files:
src/bun/rpc/handlers.tssrc/bun/rpc/router.tssrc/shared/rpc/schema.tssrc/shared/types.tssrc/views/main/home.tsx
Requires --api electrobun-rpc.
Adds both file-dialog and clipboard utilities.
Relevant files:
src/bun/rpc/handlers.tssrc/bun/rpc/router.tssrc/shared/rpc/schema.tssrc/shared/types.tssrc/views/main/home.tsx
Requires --api electrobun-rpc.
Does not add native utility examples.
Uses the operating system's default window chrome.
--window-style hidden-inset
Uses Electrobun's hidden inset titlebar mode and adds a draggable header in the renderer.
Relevant files:
src/bun/window.tssrc/views/main/home.tsxsrc/views/main/styles/app.css
Adds an Electrobun ApplicationMenu with native Edit roles for copy, paste, undo, redo, and select-all shortcuts.
Relevant files:
src/bun/menu.tssrc/bun/index.ts
Omits the generated menu file and setup call.
Does not add database files.
Adds a local SQLite client using Bun's SQLite support.
Relevant files:
src/bun/db/client.tssrc/shared/types.tssrc/bun/rpc/router.tssrc/shared/rpc/schema.ts
Adds a local JSON record store at data/app-db.json.
Relevant files:
src/bun/db/client.tssrc/shared/types.tssrc/bun/rpc/router.tssrc/shared/rpc/schema.ts
Use this for lightweight local persistence when SQLite would be more structure than the app needs.
Adds Drizzle ORM on top of SQLite. This requires --database sqlite.
Relevant files:
src/bun/db/client.tssrc/bun/db/schema.tsdrizzle.config.tspackage.json
Generated commands:
bun run db:generate
bun run db:studioUses the raw database client when SQLite is selected and skips ORM files.
Adds starter metadata when the generated database is empty. This requires --database sqlite or --database json-file.
Relevant files:
src/bun/db/client.ts
Leaves the generated database without starter seed data.
Adds a VS Code-style settings store backed by data/settings.json. Settings use dotted keys such as app.theme.
Relevant files:
src/bun/settings/store.tssrc/shared/rpc/schema.tssrc/bun/rpc/router.tssrc/views/main/home.tsx
Requires --api electrobun-rpc.
Stores the same key/value settings model in SQLite. This requires --api electrobun-rpc and --database sqlite.
Relevant files:
src/bun/settings/store.tssrc/bun/db/schema.tswhen Drizzle is selectedsrc/shared/rpc/schema.tssrc/bun/rpc/router.tssrc/views/main/home.tsx
Does not add settings persistence.
Does not add an auth or lock screen.
Adds a local app-name unlock screen in the renderer. This is a local UI lock, not remote authentication.
Relevant files:
src/views/main/home.tsxsrc/views/main/styles/app.css
Controls the electrobun build --env=<value> script in package.json.
Controls the electrobun build --targets=<value> script in package.json.
Use current for local builds and all when you are intentionally producing all configured platform targets.
Adds release packaging helpers around Electrobun's artifacts/ output.
Relevant files:
scripts/package-electrobun.tspackage.jsontsconfig.jsonREADME.md
Generated commands:
bun run package:release
bun run package:linux
bun run package:mac
bun run package:windowsThe script copies Electrobun artifacts, copies the generated macOS DMG, builds Linux deb packages with dpkg-deb, builds Linux AppImages with appimagetool, and builds a Windows NSIS wrapper around Electrobun's Windows setup executable with makensis. Run platform-specific packaging on matching OS runners.
Uses Electrobun's built-in release artifacts without adding extra packaging scripts.
Controls install and run command text, package manager metadata, and the post-scaffold install command. It does not change the runtime; Electrobun still runs on Bun.
Relevant files:
package.jsonREADME.md
Adds a Bun test script and a generated manifest smoke test.
Relevant files:
tests/manifest.test.tspackage.jsontsconfig.json
Adds the Bun test script, the generated manifest smoke test, and a mocked Electrobun desktop launch smoke test. The desktop smoke test imports the generated Bun entry surface with electrobun/bun mocked, creates the main window, and verifies the generated launch options without opening a real OS window.
Relevant files:
tests/manifest.test.tstests/desktop-smoke.test.tspackage.jsontsconfig.json
Omits the test script and test files.
Adds Turborepo as a task runner wrapper.
Relevant files:
turbo.jsonpackage.jsonREADME.md
Generated command:
bun run checkDoes not add Turborepo.
The CLI validates stack choices before writing files:
- Drizzle requires SQLite.
- Seed data requires a generated database.
- Database-backed settings require SQLite.
- Settings require Electrobun RPC.
- Native utility examples require Electrobun RPC.
- The RPC example requires Electrobun RPC.
- shadcn/ui requires Tailwind CSS.
- Non-React renderers require direct rendering or framework routing with no React router, TanStack Query, or shadcn config.
The add command can infer prerequisites for additive changes. For example, adding Drizzle can also add SQLite, and adding shadcn can also add Tailwind CSS.