- Created new directory structure for documentation under `/docs2`. - Added `.gitignore` to exclude build artifacts and dependencies. - Introduced `package.json`, `next.config.mjs`, and `postcss.config.mjs` for project configuration. - Implemented MDX components in `mdx-components.tsx` for rendering documentation. - Migrated existing documentation content and created new files for auto-updater and other features. - Established compatibility layer for Mintlify components in `mintlify-compat.tsx`. - Set up OpenAPI documentation in `openapi.json`. - Updated README and migration guide to reflect new structure and usage instructions. - Ensured all components and pages are ready for development and deployment with Fumadocs.
5.6 KiB
title, description
| title | description |
|---|---|
| Auto-Updater Documentation | How Voicebox automatic updates work for users and developers |
Voicebox includes automatic updates powered by Tauri's updater plugin. This document explains how it works for both users and developers.
1. Generate Signing Keys
Run this command to generate your signing keypair:
cd tauri && bun tauri signer generate -w ~/.tauri/voicebox.key
This creates:
- Private key:
~/.tauri/voicebox.key(keep this secret!) - Public key:
~/.tauri/voicebox.key.pub
2. Update Configuration
Copy the content from ~/.tauri/voicebox.key.pub and replace the placeholder in tauri/src-tauri/tauri.conf.json:
{
"plugins": {
"updater": {
"pubkey": "PASTE_PUBLIC_KEY_CONTENT_HERE",
"endpoints": [
"https://github.com/YOUR_USERNAME/voicebox/releases/latest/download/latest.json"
]
}
}
}
Update the endpoint URL with your actual GitHub username/organization.
3. Building with Signatures
When building releases, set these environment variables:
macOS/Linux:
export TAURI_SIGNING_PRIVATE_KEY="$(cat ~/.tauri/voicebox.key)"
export TAURI_SIGNING_PRIVATE_KEY_PASSWORD=""
bun run build
Windows PowerShell:
$env:TAURI_SIGNING_PRIVATE_KEY = Get-Content ~/.tauri/voicebox.key -Raw
$env:TAURI_SIGNING_PRIVATE_KEY_PASSWORD = ""
bun run build
4. GitHub Release Setup
When you create a GitHub release, the build process will generate:
- Installers for each platform
.sigsignature fileslatest.jsonupdate manifest
Manual Release Process
- Build the app with signing keys set
- Create a new GitHub release
- Upload all files from
tauri/src-tauri/target/release/bundle/ - Create
latest.jsonin your release assets:
{
"version": "0.2.0",
"notes": "Bug fixes and improvements",
"pub_date": "2026-01-25T12:00:00Z",
"platforms": {
"darwin-aarch64": {
"signature": "CONTENT_FROM_.app.tar.gz.sig",
"url": "https://github.com/YOUR_USERNAME/voicebox/releases/download/v0.2.0/voicebox_0.2.0_aarch64.dmg"
},
"darwin-x86_64": {
"signature": "CONTENT_FROM_.app.tar.gz.sig",
"url": "https://github.com/YOUR_USERNAME/voicebox/releases/download/v0.2.0/voicebox_0.2.0_x64.dmg"
},
"linux-x86_64": {
"signature": "CONTENT_FROM_.AppImage.sig",
"url": "https://github.com/YOUR_USERNAME/voicebox/releases/download/v0.2.0/voicebox_0.2.0_amd64.AppImage"
},
"windows-x86_64": {
"signature": "CONTENT_FROM_.msi.sig",
"url": "https://github.com/YOUR_USERNAME/voicebox/releases/download/v0.2.0/voicebox_0.2.0_x64_en-US.msi"
}
}
}
Automated GitHub Actions (Recommended)
Create .github/workflows/release.yml:
name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
strategy:
matrix:
platform: [macos-latest, ubuntu-22.04, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v1
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install dependencies (Ubuntu)
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: Install dependencies
run: bun install
- name: Build
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
run: bun run build
- name: Upload Release
uses: softprops/action-gh-release@v1
with:
files: tauri/src-tauri/target/release/bundle/**/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Add your private key to GitHub secrets:
- Go to Settings → Secrets and variables → Actions
- Add
TAURI_SIGNING_PRIVATE_KEYwith the content of~/.tauri/voicebox.key - Add
TAURI_SIGNING_PRIVATE_KEY_PASSWORD(empty string if no password)
Frontend Integration
The frontend integration is complete with automatic update notifications and manual update checks:
- Update Notification Banner - Appears automatically when updates are available
- Settings Panel - Manual "Check for Updates" button in Settings tab
- Update Hook - React hook handles all update operations
See docs/AUTOUPDATER_QUICKSTART.md for a quick setup guide.
Security Notes
- Never commit your private key to version control
- Store private keys securely (use GitHub secrets for CI/CD)
- The public key in
tauri.conf.jsonis safe to commit - Updates are cryptographically verified before installation
- HTTP endpoints are blocked by default (HTTPS only)
Testing Updates
- Build version 0.1.0 and install it
- Update version in
tauri.conf.jsonto 0.2.0 - Build version 0.2.0 with signatures
- Create a local server or GitHub release with
latest.json - Run version 0.1.0 and trigger update check
- Verify update downloads and installs correctly
Troubleshooting
"Invalid signature" error:
- Verify public key matches the private key used to sign
- Ensure signature files (.sig) are uploaded correctly
"No update available" when one exists:
- Check endpoint URL is correct
- Verify
latest.jsonformat matches specification - Ensure version in latest.json is higher than current version
Build fails with signing:
- Confirm environment variables are set correctly
- Check private key file exists and is readable
- Verify private key format (should start with
dW50cnVzdGVkIGNvbW1lbnQ6)