Getting started
Installation, where config lives, updates, and the shortest safe path to a bounded sample.
safe-db runs on macOS and Windows. Unsupported operating systems exit before any profile, credential store, or app data is touched. Refusal is a feature here, and it starts at the operating system. The MCP server is the exception: it has no window, so it also runs on Linux.
Install
Use the signed installer from the downloads page (Windows today; a signed, notarized macOS installer is next).
The Windows download is a signed .exe bootstrapper. Windows App Installer then installs
a signed MSIX. That is not a traditional Setup.exe: there is no Program Files tree of yours to patch,
and the package under WindowsApps is read-only. Uninstall is a package removal; virtualized app data
goes with it. The package bundles its own Java runtime, so there is nothing to install first and no
version of anything to check.
The app already runs on macOS from source: ./gradlew run, or ./gradlew packageDistributionForCurrentOS for an unsigned DMG. Those unsigned
builds (and ./gradlew run on Windows) are ordinary processes; they do not get the
MSIX AppData redirect. The GitHub repository covers the rest.
Updates
There is no in-app updater and no prompt. App Installer checks the published package in the background, whether or not you launched the app. Windows batches that check about every eight hours by default; MDM or App Installer policy on the machine can change or disable it. You cannot speed it up from inside safe-db.
A new version is a new signed package, applied when Windows next takes the update. Closing the app lets a pending package finish replacing.
The shortest safe path to data
There is no first-launch wizard. Home is a welcome screen with shortcuts. From there:
- Connections. Give the profile a name, test it, save it. The password goes to the platform credential store on save. See Connections and Credential storage.
- Browse the schema. Map is the dedicated screen. The Query Builder also has a Schema rail for putting tables on the canvas.
- Build a query. Typed and parameterized, with joins, nested filters, and a row
limit you actually control; see Query builder. Or type a single
SELECTon the SQL screen (Typed SQL). Ctrl/Cmd+Enter runs SQL; Ctrl/Cmd+K opens the command palette. - Look at the sample. Explore opens a second window: pivot it, spreadsheet it, chart it. The underlying rows stay put until you refresh from a new run. See Explore.
- History keeps recent and saved queries if you want to come back to one.
Where things live
The app writes JSON under %APPDATA%\com.safedb.app\ on Windows and ~/Library/Application Support/com.safedb.app/ on macOS. On the signed MSIX, Windows
virtualizes roaming AppData, so Explorer does not show those files at %APPDATA%. Open this instead:
%LOCALAPPDATA%\Packages\Safedb_q22pzpqsf8v86\LocalCache\Roaming\com.safedb.app\
Not LocalState, not WindowsApps. From-source and unsigned MSI builds write to the real roaming folder; there is no package redirect.
- connections.json
- Named profiles. No passwords.
- settings.json
- Theme, color scheme, risk gate, defaults, and blocked schemas.
- saved_queries.json
- Queries you chose to keep.
- query_history.json
- Recent runs, capped at 100.
- explore_recipes.json
- Saved Explore layouts.
Passwords are not in any of these files; see Credential storage. A hand-edit the app cannot
parse is moved aside with a .corrupt- or .unsupported- suffix, and
load fails closed. Restart after editing. Caps, timeouts, and the risk dial are in Limits & risk model.