Release Commands
Release builds can be triggered via PR comments. These commands are only available to authorized users.
Nightly Release
/nightly
Triggers a nightly release from the merged PR's commit. This will build artifacts for all platforms, upload to Crabnebula, publish the release, and create a GitHub release.
To build and upload without publishing (for manual testing):
/nightly --no-publish
This uploads artifacts to Crabnebula as a draft and to S3, but skips publishing and GitHub release creation. You can then manually download from Crabnebula, test the build, and later publish via the Crabnebula dashboard or by running the workflow again with publish=true.
Stable Release
/stable
Triggers a stable release from the latest nightly tag. Same options apply:
/stable --no-publish
Staging Build
/staging
Triggers a staging build for testing. Staging builds are never published to Crabnebula or GitHub releases.
Testing
Fresh Start Testing
If you got
"Hyprnote Staging" is an app downloaded from the Internet, it might prevent you from onboarding. Presscmd+shift+qto force quit the app, and rerun the command.
open -a "Hyprnote Staging" --args --onboarding $(date +%s)
This will:
- Remove
settings.jsonandstore.json - Reset all permissions (sometimes fails to reset - although it is rare)
The timestamp is used to detect fresh launches vs relaunches (e.g., during permission setup).
If the timestamp is older than 2.5 seconds, it's treated as a restart and --onboarding will be ignored.
Data Paths
There are two base directories:
global_base- Fixed per build/environmentvault_base- Can be overridden via env or config file in global_base
global_base
| Environment | Bundle ID | Folder Name |
|---|---|---|
| dev | com.hyprnote.dev | com.hyprnote.dev |
| staging | com.hyprnote.staging | com.hyprnote.staging |
| stable | com.hyprnote.stable | hyprnote |
| nightly | com.hyprnote.nightly | hyprnote |
Stable and nightly share the same folder (hyprnote) in production builds.
vault_base
Priority**:**
VAULT_BASEenv var (highest)vault_pathinhyprnote.json(at global_base)- Fall back to
global_base
Example:
VAULT_BASE="$HOME/Library/Application Support/hyprnote" pnpm -F desktop tauri:dev
Platform Paths
| Platform | Base Path |
|---|---|
| macOS | ~/Library/Application Support/{folder}/ |
| Linux | ~/.local/share/{folder}/ |
Files by Base Path
At global_base (cannot be redirected)
| File/Dir | Description |
|---|---|
hyprnote.json | Global config (vault_path, etc.) |
store.json | Tauri plugin store |
db.sqlite | Legacy SQLite DB (release only) |
models/stt/ | STT models |
models/llm/ | LLM models |
extensions/ | User extensions |
At vault_base (can be redirected)
| File/Dir | Description |
|---|---|
settings.json | App configuration |
sessions/ | Session data |
sessions/{uuid}/_meta.json | Session metadata |
sessions/{uuid}/transcript.json | Transcript |
sessions/{uuid}/_memo.md | User notes |
sessions/{uuid}/_summary.md | AI summary |
humans/ | Human profiles (.md) |
organizations/ | Organization profiles (.md) |
events.json | Calendar events |
calendars.json | Calendar configs |
templates.json | Note templates |
chat_shortcuts.json | Chat shortcuts |
Summary
| What | Base | Env Override |
|---|---|---|
hyprnote.json | global_base | No |
store.json | global_base | No |
db.sqlite | global_base | No |
models/ | global_base | No |
extensions/ | global_base | No |
settings.json | vault_base | Yes |
sessions/ | vault_base | Yes |
humans/ | vault_base | Yes |
organizations/ | vault_base | Yes |
| JSON files (events, etc.) | vault_base | Yes |