Desktop AI chat, RP, writing, lorebook, RAG, and plugin workbench.
Desktop app built with Electron, React, a local Express API, and SQLite.
- Use
npm run devfor day-to-day development. - Use
npm run dev:electronwhen testing the real desktop shell. - Use
npm run dist:mac/npm run dist:winfor desktop bundles. - CI desktop builds are unsigned. macOS and Windows may require manual confirmation.
- Desktop packaging works, but it still has rough edges. It is usable, not polished.
- Electron
- React + TypeScript + Vite
- Express
- SQLite +
better-sqlite3 - Tailwind CSS
- Branching chat history.
- Edit, delete, resend, regenerate.
- Multi-character chats with auto-turns.
- RP controls: prompt stack, author note, scene state, presets, personas.
- LoreBook / World Info support, including SillyTavern-compatible world info import/export.
- Reasoning support, including
<think>...</think>parsing. - Vision attachments and chat attachments.
- Projects, chapters, scenes, outlines.
- Summaries, rewrite/expand flows, consistency tools.
- Character-aware writing workflows.
- DOCX import and DOCX / Markdown export.
- Writing-side RAG support.
- Knowledge collections and ingestion.
- RAG bindings for chat and writing.
- Embedding and reranker model settings.
- Hybrid retrieval-oriented foundation.
- OpenAI-compatible providers.
- KoboldCpp support.
- Custom endpoint adapters for non-OpenAI / non-Kobold backends.
- Separate models for translate / compress / TTS / RAG.
- Toolbar tabs from plugins.
- Plugin widgets in chat, writing, and settings slots.
- Plugin actions in toolbar, messages, composer, and writing.
- Plugin settings, permissions, plugin-local storage.
Pluginfileinstall/export.- Plugin themes.
- Custom inspector fields.
- Custom endpoint adapters.
- Node.js + npm.
- Python 3 + Pillow for icon generation:
pip install pillowNotes:
better-sqlite3is native. Keep dev/build Node versions consistent.- If native ABI breaks, run
npm run rebuild:native.
- Install dependencies:
npm install- Start frontend + local API:
npm run dev- Open:
http://localhost:1420
npm run dev:electronThis builds Electron entrypoints, starts the local server, starts Vite, waits for health checks, then launches Electron.
macOS:
./setup-and-run-dev.shWindows:
setup-and-run-dev.batThese scripts try to:
- install Node.js LTS,
- run
npm install, - start
npm run dev.
All desktop targets:
npm run distmacOS only:
npm run dist:macWindows only:
npm run dist:winBuild output goes to release/.
Workflow:
.github/workflows/build-desktop.yml
What it does:
- builds macOS (
x64,arm64) and Windows (x64) bundles, - uploads artifacts,
- publishes GitHub Release assets on
v*tag pushes.
Vellium now has a real plugin system.
Plugin capabilities:
- toolbar tabs,
- slot widgets,
- modal and inline actions,
- plugin-local settings,
- permission-gated API access,
- plugin themes,
Pluginfileimport/export.
Useful docs:
/Users/prplx/Documents/slv/docs/plugins/README.md
Runtime plugin locations:
- user plugins:
/Users/prplx/Documents/slv/data/plugins - bundled plugins:
/Users/prplx/Documents/slv/data/bundled-plugins
Important:
- plugins are local extensions, not a trusted public plugin marketplace model,
- plugin permissions should be reviewed before enabling write access,
- plugin settings and permissions are managed in
Settings -> Plugins.
Pluginfile is the portable single-file plugin package format.
You can:
- install a plugin from
Settings -> Plugins -> Install Pluginfile, - export an existing plugin from
Settings -> Plugins -> Export Pluginfile.
Bundled plugins can also be exported as Pluginfile.
Vellium supports:
- built-in dark/light themes,
- plugin-provided themes.
Bundled theme pack:
- Catppuccin
- Latte
- Frappe
- Macchiato
- Mocha
Theme plugins also propagate into plugin UI kit styling.
Vellium includes an extensions layer beyond normal plugins:
- custom inspector fields,
- custom endpoint adapters,
- unified plugin-side backend access through
vellium.generate(...)and related SDK namespaces.
This makes it possible to:
- add inspector controls,
- integrate non-OpenAI / non-Kobold backends,
- build workflow plugins against a stable host-side contract.
Vellium supports OpenAI-compatible TTS:
- configurable endpoint,
- model selection,
- voice selection,
- per-message TTS actions.
Generate icons:
npm run build:iconsGenerated files:
build/icon.pngbuild/icon.icnsbuild/icon.ico
npm run dev— frontend + server.npm run dev:frontend— Vite only.npm run dev:server— Express API only.npm run dev:electron— Electron + frontend + server.npm run build— frontend production build.npm run build:server— bundled server build.npm run build:desktop— full desktop build pipeline without publishing.npm run rebuild:native— rebuildbetter-sqlite3.npm run test— Vitest.
- In dev: local
data/ - In packaged app:
SLV_DATA_DIRmaps to ElectronuserData/data
Cause: better-sqlite3 was built against a different Node ABI.
Fix:
npm run rebuild:nativeIf needed, remove node_modules and reinstall.
Cause: an old server process is still alive.
Fix:
lsof -nP -iTCP:3001 -sTCP:LISTEN
kill -TERM <pid>Check:
- full desktop build was used,
server-bundle.mjsis present,- the bundled server reaches
/api/health.
Check:
- plugin is enabled in
Settings -> Plugins, - required permissions were granted,
- after changing plugin files, use
Reload Plugins, - after SDK/runtime changes, restart
npm run dev:electron.
src/— React frontendserver/— Express APIelectron/— Electron main + preloadscripts/— build/dev helper scriptsdocs/— docs, plugin docs, assetsdata/— runtime data, user plugins, bundled pluginsbuild/— electron-builder resourcesrelease/— packaged desktop output
