Packaging
NeoTavern is distributed as native packages per platform, each carrying the Node.js sidecar, SQLite, native addons, and the production web assets.
Distribution Formats
The desktop build produces:
- Windows installer — NSIS and MSI installers with per-user install mode. The installer registers the app and puts user data in the platform's app-local-data directory.
- Windows portable build — a ZIP containing the executable, the sidecar,
a
portable.flagmarker, andresources/, plus a.sha256checksum file. With the flag present, data lives in a localdata/folder next to the application instead of app-local-data. - macOS package — a
.appbundle, packaged into a DMG on the macOS runner. - Linux — an AppImage and an archive.
Each format is built and smoke-tested on its own native platform runner, because the distribution bundles native addons. Cross-platform copying of prepared artifacts is not supported.
What Ships Inside
Every package contains everything the app needs at runtime:
- The Tauri 2 shell.
- The self-contained Node.js 24 sidecar executable.
- SQLite via
better-sqlite3. - Sharp for image processing.
- The production web assets.
Because Node.js, SQLite, and the assets are inside the package, the user needs nothing installed beforehand — no Node.js, no npm, no database setup.
First Run
The first launch is the product's core promise: open the app, and it works.
- The shell starts the sidecar.
- The backend creates the data directory, initializes the SQLite database, runs pending migrations (with a backup before pending schema changes), seeds bundled themes and the starter character.
- The webview opens on the ready application.
There is no terminal, no installer wizard beyond the platform one, no
npm install, and no manual configuration. If the user chose a chat
background or installed plugins, none of that lives in the executable — user
data is separate from the bundle, so updates replace the core without
touching user files.
Updates
Release builds sign their artifacts and integrate the Tauri updater. The updater verifies the manifest and a minisign signature before installing a platform artifact, then restarts the shell. Rollback means publishing the previous reviewed code as a new signed release — unsigned downgrades are not allowed. Plugins and themes update independently through the Plugin and Theme managers; user files never enter an executable update artifact.
Building
From the repository, the packaging commands are:
pnpm desktop:prepare
pnpm desktop:build
pnpm desktop:portable
pnpm desktop:release
desktop:prepare builds the server and web, copies target-specific native
addons, and creates the sidecar with the Tauri target-triple suffix.
desktop:portable additionally builds the NSIS/MSI installers and the
portable ZIP with checksum, then runs a headless shell smoke test.
desktop:release produces signed updater artifacts and requires the release
secrets. Building installers requires Rust stable MSVC, Windows C++ Build
Tools, and WebView2 on the build machine — none of which end users need.