Developers

Release

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. Press cmd+shift+q to force quit the app, and rerun the command.

open -a "Hyprnote Staging" --args --onboarding $(date +%s)

This will:

  • Remove settings.json and store.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:

  1. global_base - Fixed per build/environment
  2. vault_base - Can be overridden via env or config file in global_base

global_base

EnvironmentBundle IDFolder Name
devcom.hyprnote.devcom.hyprnote.dev
stagingcom.hyprnote.stagingcom.hyprnote.staging
stablecom.hyprnote.stablehyprnote
nightlycom.hyprnote.nightlyhyprnote

Stable and nightly share the same folder (hyprnote) in production builds.

vault_base

Priority**:**

  1. VAULT_BASE env var (highest)
  2. vault_path in hyprnote.json (at global_base)
  3. Fall back to global_base

Example:

VAULT_BASE="$HOME/Library/Application Support/hyprnote" pnpm -F desktop tauri:dev

Platform Paths

PlatformBase Path
macOS~/Library/Application Support/{folder}/
Linux~/.local/share/{folder}/

Files by Base Path

At global_base (cannot be redirected)

File/DirDescription
hyprnote.jsonGlobal config (vault_path, etc.)
store.jsonTauri plugin store
db.sqliteLegacy SQLite DB (release only)
models/stt/STT models
models/llm/LLM models
extensions/User extensions

At vault_base (can be redirected)

File/DirDescription
settings.jsonApp configuration
sessions/Session data
sessions/{uuid}/_meta.jsonSession metadata
sessions/{uuid}/transcript.jsonTranscript
sessions/{uuid}/_memo.mdUser notes
sessions/{uuid}/_summary.mdAI summary
humans/Human profiles (.md)
organizations/Organization profiles (.md)
events.jsonCalendar events
calendars.jsonCalendar configs
templates.jsonNote templates
chat_shortcuts.jsonChat shortcuts

Summary

WhatBaseEnv Override
hyprnote.jsonglobal_baseNo
store.jsonglobal_baseNo
db.sqliteglobal_baseNo
models/global_baseNo
extensions/global_baseNo
settings.jsonvault_baseYes
sessions/vault_baseYes
humans/vault_baseYes
organizations/vault_baseYes
JSON files (events, etc.)vault_baseYes