Optionally install just to use the shortcuts in the root justfile (run just to list them):
# Windows
winget install Casey.Just
# macOS
brew install just
# Linux
sudo apt install just # or: cargo install justLinux:
Based on tauri/prerequisites/#setting-up-linux
sudo apt-get update
sudo apt-get install -y pkg-config build-essential libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev clang cmake libssl-dev libasound2-devmacOS:
Make sure to install XCode from the AppStore and open it once so it will download essential macOS libraries.
Run the pre-build script (downloads the Sona runner binary and sets up platform deps):
uv run scripts/pre_build.pyInstall frontend dependencies from desktop folder:
cd desktop
pnpm installStart dev mode:
pnpm exec tauri devOr build for production:
pnpm exec tauri buildYou can also do it all in one step:
uv run scripts/pre_build.py --dev # or --buildDownload prebuilt whisper.cpp libs (one-time):
uv run sona/scripts/download-libs.pyWindows only — install MSYS2, then install MinGW and Vulkan headers:
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-vulkan-develOpen an MSYS2 MinGW64 shell with your full Windows PATH (so rustc, cargo, etc. are available):
C:\msys64\msys2_shell.cmd -mingw64 -defterm -no-start -use-full-pathThen build sona and place it as sidecar (from desktop/):
# macOS/Linux
cargo build --manifest-path ../sona/Cargo.toml -p sona --release
cp ../sona/target/release/sona ../desktop/src-tauri/binaries/sona-$(rustc -vV | awk '/host:/ {print $2}')
# Windows
cargo build --manifest-path ../sona/Cargo.toml -p sona --release
cp ../sona/target/release/sona.exe ../desktop/src-tauri/binaries/sona-$(rustc -vV | awk '/host:/ {print $2}').exeThen copy the binary into the dev target so tauri dev picks it up immediately:
cp desktop/src-tauri/binaries/sona-$(rustc -vV | awk '/host:/ {print $2}') target/debug/sonaexport RUST_LOG=trace
cargo test -- --nocapturecargo fmt
cargo clippy- Increment version in
tauri.conf.jsonand commit - Run the Release workflow from GitHub Actions (workflow_dispatch)
It will create releases for Windows, Linux, and macOS
Along with latest.json file (used for auto updater).
When Release action finishes, it will run Deploy landing action
and update downloads links in landing page.
pnpx tinypng-go static/*.pnggo install github.com/mandolyte/mdtopdf/cmd/md2pdf@latest
md2pdf -i website/public/privacy_policy.md -o website/public/privacy_policy.pdfffmpeg -i file.wav -ar 16000 -ac 1 -c:a pcm_s16le normal.wav- Install gh cli
gh pr checkout <url>
git push <fork url>pnpm install
pnpx ncu -u
cd src-tauri
cargo install cargo-edit
rm -rf ../Cargo.lock
CARGO_NET_GIT_FETCH_WITH_CLI=true cargo upgrade
# OR
cargo +nightly -Zunstable-options update --breakinggh cache delete -a- Always update crates and lock in specific commit so it will be easy to revert!!
- Don't upgrade important crates such as tauri as long as it stable and works and there's no real need!!
Install Windows SDK:
winget install -e --id Microsoft.WindowsSDK.10.0.26100Generate a self-signed certificate (valid 10 years):
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3650 -nodes -subj "/CN=Vibe" -addext "extendedKeyUsage=codeSigning"
openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem -password pass:YOUR_PASSWORD
base64 -i cert.pfxCopy the base64 output and update GitHub secrets:
WINDOWS_CERTIFICATE— the base64 outputWINDOWS_CERTIFICATE_PASSWORD— the password used above
Then delete the local files:
rm key.pem cert.pem cert.pfxVibe uses Aptabase for analytics. Not required for development. To enable, set these env vars at build time:
export APTABASE_APP_KEY="A-..."
export APTABASE_BASE_URL="https://..."rustup nightly install
rustup component add rustc-codegen-cranelift-preview --toolchain nightly
# Unix
CARGO_PROFILE_DEV_CODEGEN_BACKEND="cranelift" cargo +nightly build -Zcodegen-backend
# Powershell
$env:CARGO_PROFILE_DEV_CODEGEN_BACKEND="cranelift" ; cargo +nightly build -Zcodegen-backend