What leaves the machine, in full.
One request every seven days, carrying a version number and the name of an operating system. That is the entire list, and this page is the long version of it.
Quarry indexes files you already have, on hardware you already own, and answers from an index it wrote beside them. There is no account to create, no project to sync to and no server holding anything of yours, which removes most of what a page like this usually has to account for.
The update check
Once every seven days the daemon asks whether a newer version exists. The request is a GET with two parameters and no body, and it is the only time Quarry opens a connection to anything.
| Sent | Example | Why |
|---|---|---|
version | 1.4.0 | To know whether the answer is yes. |
os | macos | The two builds are released on different days. |
No file name, no folder path, no query text, no licence key, and no identifier that persists between requests. The answer is a version number and a changelog link, used to draw a badge in the app; nothing downloads or installs on its own. Setting check = false under [updates] stops it, and with it set Quarry makes no network requests at all, for any reason. There is no second channel for crash reports or analytics, because there is no crash reporter and no analytics.
Where things sit
- The index is a file under
~/.local/share/quarry, owned by your user account and readable by it. It is not encrypted on its own and inherits whatever full-disk encryption the machine has. - Settings, saved searches and the licence key are in
~/.config/quarry/config.toml, which is a text file you can read and put in a dotfiles repository if you want it there. - Snippets are read from the file when a result is shown, not stored in the index. Deleting a file removes its text from every future answer without a reindex.
The licence key
The key is a signed string. Quarry checks the signature against a public key compiled into the binary, offline, with no call home at purchase time or afterwards. That is why the same key works on every machine you sit at and why an expired licence cannot switch anything off remotely: the version you installed keeps running because nothing is in a position to tell it not to.
The endpoint
The HTTP endpoint binds to 127.0.0.1 and only ever to 127.0.0.1. There is no setting that binds it to another interface, so a program on this machine can reach it and a machine on the same network cannot. It is off until you enable [serve]. Anything with a local account on the machine can query it while it is on, which is the trade the plugins are asking you to make.
Reporting something
Write to hello@example.com with what you found and how to reproduce it. Two people read that address and we will answer whether or not it turns out to be a bug. If a fix ships, the changelog entry says what was wrong and which versions had it, including when the answer is that the bug had been there for a year.