Local-first license vault

Your license keys, sealed on your own machine.

License Tracker keeps every key, renewal date, and receipt in one encrypted vault that never leaves your computer. There is no account to make and no server to trust, because there is no server.

AES-256 at restArgon2idWeb UI and CLIMIT licensed
Ableton Live 12 SuiteAudio Daw · Perpetual
Developer
Ableton
License key
••••••••••••
Purchased
2024-06-18 · 749 USD

This is how the app behaves. Keys stay masked until you ask for them, so a shoulder or a screen share never gives one away.

The workspace

A quiet dashboard that tells you what is coming due.

The vault opens on totals and renewals. Every screenshot here is the running application, photographed against its own demo catalog.

The License Tracker dashboard showing 13 licenses, 12 developers, 2 vendors, a total value of 1,857.87 USD, upcoming renewals for JetBrains and Adobe Photoshop, and breakdowns by license type and category.
Dashboard · renewals inside 90 days, counted in days left
Miller columns

Walk the whole catalog without losing your place.

One browser replaces the old Licenses, Developers, and Vendors tables. Pick a category, then a developer, then a license, and the detail lands in the last column. The path you took stays on screen, so you always know where you are.

The Miller-column catalog browser: a Browse column of categories with Audio Vst selected, a Developers column of six makers with Valhalla DSP selected, a Licenses column of two titles with ValhallaVintageVerb selected, and a detail pane showing the developer, a masked license key, registered email, purchase date, price, and tags.
Catalog · Categories → Developers → Licenses → Detail, in one view
It answers to the keyboard.Arrow between items, Enter or Space to drill in. Focus survives a re-render, and the columns carry proper listbox and option roles.
Search flattens, then restores.Type and the columns collapse to results plus detail. Clear the box and your previous path comes back exactly as you left it.
It folds down, not away.Columns become snap-scroll panes under 860px and drill-in panels at 640px. The model stays the same on a phone.
The same Miller-column catalog in dark theme.
Dark theme · follows the OS, or pin it yourself
The same dashboard in dark theme, following the operating system preference.
Every view is drawn for both
What it does

Built for the person who actually owns the licenses.

A dashboard that watches dates

Totals, spend by currency, and the license mix by type and category. Renewals inside the next 90 days surface with the days left already counted.

One catalog for everything

Licenses, developers, and vendors share a single Miller-column browser, with installation tracking, tags, notes, and archiving in the detail pane.

Scanner finds what you own

Reads the Windows registry and AppX packages, then walks the filesystem for VST3, VST2, CLAP, and AAX plugins. Turn any finding into a tracked license.

Real icons, fetched or extracted

Pull a product icon from the developer's own site on any OS, lift it out of an installed Windows binary after a scan, or upload your own.

Fields you define

Text, number, date, boolean, select, URL, and email. Flag any definition as encrypted and its values join the sealed set.

Your data leaves whole

Portable JSON export and import, with an optional passphrase-encrypted blob when you want the sensitive fields to travel too.

Inside the vault

Two locks, not one.

The whole database file is encrypted, and the fields worth stealing are encrypted again inside it. A weakness in either layer still leaves the other standing.

Layer one · the file

SQLCipher, AES-256

The database is ciphertext on disk. Copy the file off the machine and it is noise without your password.

Cipher page size
4096
KDF iterations
256,000
HMAC
SHA512
Key derivation
PBKDF2_HMAC_SHA512
Layer two · the fields

NaCl, XSalsa20-Poly1305

Keys, order numbers, emails, usernames, notes, and vendor passwords are sealed a second time, individually, inside the encrypted file.

Master KDF
Argon2id
Memory cost
512 MB
Iterations · threads
3 · 4
Fallback ladder
512 → 64 MB
The key never touches disk.It is derived in memory on unlock. Locking wipes it and revokes every session token.
It starts locked, always.Every process start begins sealed. Nothing answers until you unlock, not even a read.
Nothing phones home.It binds to 127.0.0.1. The fonts are self-hosted. There is no telemetry to turn off.
Same API, no browser

There is a CLI, and it is not an afterthought.

lt speaks to the exact REST API the web UI uses, which is what keeps that API honest. Script your backups, seed a demo, or add a license without leaving the terminal.

lt · command line client
# unlock once; the token lands in ~/.licensetracker
$ lt auth unlock --password ...
  { "success": true }

# what is coming due
$ lt dashboard summary
  13 licenses · 2 renewals in 90 days

# find it without opening a browser
$ lt licenses list --query serum

# discover what is installed
$ lt scan run --profile quick

# take everything with you
$ lt export --out backup.json \
      --include-sensitive --passphrase ...

$ lt auth lock
Running it

One process. Node 20. No build step for the UI.

The server, the REST API, the web UI, and the CLI are the same Node process talking to one encrypted file. There is no Electron and no framework to compile.

First

Install

Node 20 or newer, then pull the dependencies once.

./scripts/setup.sh
Then

Start it

It binds to loopback. Nothing is exposed to your network.

./scripts/dev.sh
Finally

Make a vault

Pick a master password. It cannot be recovered, so keep it.

open http://127.0.0.1:5555