Skip to content
  1. download new release for your platform

in-app/over-the-wire updates coming soon(ish)!

  1. download new binary from releases
  2. replace old binary
  3. restart server

database migrations run automatically on startup.


Terminal window
freqhole database info

shows:

  • database size
  • table counts (songs, albums, etc.)
  • blob storage usage

SQLite databases grow fragmented over time. vacuum reclaims space:

Terminal window
freqhole maintenance vacuum

run occasionally (monthly or after large deletions).

verify database isn’t corrupted:

Terminal window
freqhole maintenance integrity-check

run if you experience crashes or suspect disk issues.


  • missing files: database entries for files that no longer exist
  • orphan blobs: blob data not referenced by any entity
  • orphan images: album art with no album
Terminal window
freqhole maintenance find-orphans

shows summary without modifying anything.

Terminal window
freqhole maintenance cleanup-orphans

removes unreferenced data. run find-orphans first to see what will be deleted.


the SQLite database contains all your metadata, accounts, and settings:

Terminal window
cd /path/to/your/freqhole-install/
cp data/grimoire.db data/grimoire-backup.db

or use SQLite’s backup command:

Terminal window
cd /path/to/your/freqhole-install/
sqlite3 data/grimoire.db ".backup data/grimoire-backup.db"

cover art and other blobs are in data/blobs/. copy this directory to back up artwork.

Terminal window
cd /path/to/your/freqhole-install/
tar -czf freqhole-backup.tar.gz data/

stop server, replace data directory, start server.


if search results seem stale:

Terminal window
freqhole maintenance rebuild-search-index

thumbnail regeneration (rarely needed):

Terminal window
freqhole maintenance regenerate-thumbnails

depends on how you run freqhole:

  • CLI: stderr (redirect to file if needed)
  • desktop app: application logs directory

set in environment:

Terminal window
RUST_LOG=info freqhole serve
RUST_LOG=debug freqhole serve # verbose
RUST_LOG=warn freqhole serve # quiet

  • use NVMe or SSD for data directory
  • increase OS file descriptor limits
  • consider dedicated machine (not shared server)
  • NVMe or SSD essential
  • sqlite WAL mode (default) handles contention mostly ok, but postgres would be better (node: there’s no pg adaptor right now)

most tuning is automatic. SQLite is configured with:

  • WAL mode (write-ahead logging)
  • 100MB cache by default
  • proper locking for concurrency

  1. check config file exists and is valid TOML
  2. check data directory writable
  3. check port not in use
  4. run freqhole serve --verbose for details

SQLite can’t handle too many concurrent writes. freqhole handles this automatically, but external tools accessing the database can cause issues.

  1. vacuum database: freqhole maintenance vacuum
  2. clean orphan blobs: freqhole maintenance cleanup-orphans
  3. delete old backups
  4. add disk space
  1. make sure your router has UPnP universal plug and play enabled

if playback in the desktop app crackles, stutters, or drops samples on linux — especially under load, in a vm, or on a low-power board (raspberry pi, etc.) — bump the cpal output buffer:

[audio]
linux_buffer_frames = 4096 # or 8192 if 4096 still glitches

default is 2048 (~43ms latency @ 48kHz). doubling roughly doubles latency but adds proportional headroom against pipewire/pulseaudio scheduler jitter. restart the app for the change to take effect.

see the audio config section for details.