Skip to content

Building & Releasing

Nick edited this page Jul 28, 2026 · 1 revision

Building & Releasing

Build the Installer

From the repo root:

.\scripts\build.ps1

This runs the full build pipeline:

  1. Builds the Python backend into a single .exe (PyInstaller)
  2. Copies the backend exe to Tauri's sidecar directory
  3. Builds the React frontend + Tauri shell into a Windows installer (.msi) and portable executable (-setup.exe)

Build Outputs

Artifact Path Size
MSI installer app/src-tauri/target/release/bundle/msi/Open-Write_*.msi ~28 MB
NSIS setup app/src-tauri/target/release/bundle/nsis/Open-Write_*-setup.exe ~27 MB
Sidecar binary app/src-tauri/binaries/open-write-backend-x86_64-pc-windows-msvc.exe ~24 MB

Both installers bundle the Python backend — no Python needed on the target machine.

Build Flags

Flag Description
-SkipBackend Reuse existing sidecar exe (when only frontend code changed)
-Debug Build in debug mode (faster, larger exe, no optimization)

Build Prerequisites

  • Python 3.11+ on PATH
  • uv installed (pip install uv)
  • Node.js 18+ on PATH
  • Rust toolchain (rustup) for Tauri
  • Frontend deps installed (cd app && npm install)
  • Backend deps installed (cd backend && uv sync --dev)

Build Backend Only

.\scripts\build-backend.ps1

Builds just the Python backend sidecar via PyInstaller. Used when only backend code changed.

Cutting a Release

.\scripts\release.ps1 -Version 1.1.0

This script:

  1. Validates the version string and confirms no uncommitted changes
  2. Bumps version in app/package.json, app/src-tauri/tauri.conf.json, and app/src-tauri/Cargo.toml
  3. Builds the backend sidecar
  4. Builds the Tauri bundle
  5. Generates latest.json manifest with signed signature
  6. Prints a manual upload checklist

Release Prerequisites

Set the signing key environment variables:

$env:TAURI_SIGNING_PRIVATE_KEY = "your-key-here"
$env:TAURI_SIGNING_PRIVATE_KEY_PASSWORD = "your-password"

Generate a key pair once with npm run tauri signer generate. Store the private key safely.

Manual Steps After release.ps1

  1. Move [Unreleased] CHANGELOG entries into a [vX.Y.Z] section
  2. Commit: git commit -m "Release v1.1.0"
  3. Tag: git tag v1.1.0
  4. Push: git push origin main --tags
  5. Create GitHub Release: gh release create v1.1.0 ...

Auto-Updater

The auto-updater is currently disabled. It will be re-enabled once Open-Write has its own release feed and a fresh minisign keypair. See docs/RELEASING.md for details.

Clone this wiki locally