A sharp, local-first knife collection manager.
Catalog your knives, compare them side by side, and keep your collection data under your control.
- Keep detailed knife records with specifications, pricing, provenance, notes, links, and a local image gallery.
- Search, filter, pin, group, and bulk-edit your collection—including reusable custom text, number, and date fields.
- Import product details from supported retailer URLs, with an interactive browser fallback for pages that need it.
- Compare any number of knives side by side, focus on differences, and export or print the table as a landscape PDF.
- See collection insights such as recent additions, maker distribution, and acquisition activity.
- Run completely locally with SQLite, or opt into cloud backup when a BladeVault backup service is configured.
Dashboard — recent additions and collection insights
Knife detail — specifications, notes, and image gallery
Compare — the details that matter, side by side
Add knife — import a product URL or enter it yourself
| Option | Best for | Start here |
|---|---|---|
| Desktop app | A native macOS or Windows experience | Download the latest release |
| Docker or Podman | A self-hosted local instance | Run a container |
| Source | Development and customization | Run from source |
The prebuilt image stores the database and downloaded images in /app/data. Mount a host folder to keep that data when the container is replaced.
mkdir -p "$HOME/BladeVault/data"
docker run -d \
--name bladevault \
--restart unless-stopped \
-p 5500:3000 \
-v "$HOME/BladeVault/data:/app/data" \
ghcr.io/dedkola/bladevault:latestOpen http://localhost:5500.
mkdir -p "$HOME/BladeVault/data"
podman run -d \
--name bladevault \
--restart unless-stopped \
-p 5500:3000 \
-v "$HOME/BladeVault/data:/app/data" \
ghcr.io/dedkola/bladevault:latestdocker run -d `
--name bladevault `
--restart unless-stopped `
-p 5500:3000 `
-v "${env:USERPROFILE}\BladeVault\data:/app/data" `
ghcr.io/dedkola/bladevault:latestThe included Compose file builds this checkout and uses a named Docker volume:
docker compose up -d --buildIt is available at http://localhost:5500. To stop it without deleting the persistent volume, run docker compose down.
git clone https://github.com/dedkola/bladevault.git
cd bladevault
docker build -t bladevault .
docker run -d \
--name bladevault \
--restart unless-stopped \
-p 5500:3000 \
-v "$HOME/BladeVault/data:/app/data" \
bladevaultDownload BladeVault.dmg, open it, then drag BladeVault.app to Applications.
Releases are unsigned. If macOS blocks the first launch, right-click the app, choose Open, and confirm. If needed, run:
xattr -d com.apple.quarantine "/Applications/BladeVault.app"
open "/Applications/BladeVault.app"Updates use a user-assisted flow: select Download update in Settings → About, open the downloaded DMG, quit BladeVault, and replace the app in Applications.
Download BladeVault-Setup.exe, run the installer, and open BladeVault from the Start menu or desktop shortcut.
Windows SmartScreen may show a warning for an unsigned build. Choose More info → Run anyway only if you trust the release source.
Prerequisites: Node.js 20 or newer. Install Chromium as well if you want to use URL import.
git clone https://github.com/dedkola/bladevault.git
cd bladevault
npm install
npx playwright install chromium
npm run devOpen http://localhost:3000.
| Command | Purpose |
|---|---|
npm run dev |
Start the Next.js development server. |
npm run build |
Create a production build. |
npm run start |
Serve the production build after npm run build. |
npm run lint |
Run ESLint. |
npm run format:check |
Check formatting with Prettier. |
npm run desktop:dev |
Run the Electron desktop shell in development. |
npm run desktop:smoke |
Build and smoke-test the desktop runtime. |
npm run dist:desktop |
Package desktop installers without publishing them. |
BladeVault is local-first: it works without an account or API key.
| Runtime | Default data location |
|---|---|
| Source | ~/BladeVault/data |
| Docker or Podman | /app/data inside the container; mount it to a host folder for persistence |
| Desktop development | ~/.bladevault-desktop-dev/data |
The data directory contains bladevault.sqlite and downloaded images. Back up the whole folder to preserve the collection.
Set BLADEVAULT_DATA_DIR to choose a different directory for a source or container runtime. Existing installations that use the legacy repo-local data/bladevault.sqlite continue using it until the database is moved or BLADEVAULT_DATA_DIR is set.
The desktop app can also move its local data folder from Settings when the location is not managed by BLADEVAULT_DATA_DIR.
Cloud backup is opt-in and leaves local storage as the source of truth. When the app is configured with BladeVault authentication and backup service URLs, sign in from Settings → Cloud Backup to upload or restore a complete archive, including images. Automatic backups can run hourly and after collection changes.
Self-hosted deployments can omit those service URLs; the rest of BladeVault works entirely locally.
BladeVault is released under the MIT License.