// HACKER NEWS — CYBERSECURITY
Fileregister: Tagging and reference layer for your files, in plain text
A tagging and reference layer for your files in plain text, with permanent ids
and self-documenting binders that outlast renames and moves on your machine, and
carry across to another.
register writes a record for every file you hand it: a permanent id, the
binders it belongs to, and any fields you add. The records live in a JSONL index
next to your notes: readable with cat, searchable with grep, kept in git.
The index is the source of truth.
Each record can carry a Markdown sidecar: a note per file that keeps the hard
facts as YAML fields (an amount, a payment date, a supplier, a caption), with
free prose alongside for everything that isn't a field. The fields are what
grubber and matterbase query; the prose is for you. That is what turns a plain
set of files into a self-documenting binder: a workbook for a project, a
photo album, a collection that explains itself.
Everything written onto the file itself (the id in its xattr, a macOS bookmark,
Finder tags, Spotlight fields) is a cache derived from the index. It keeps a
reference working as the file is renamed, moved to another disk, or copied to a
second Mac, and register refresh rebuilds it from the index whenever it drifts
or a copy strips it.
register itself is portable Go; the OS-specific work lives behind the
fileanchor engine, today built for macOS.
A Linux fileanchor is the only piece between here and running on Linux.
You scanned the document under a throwaway name; --aka car-policy gives it a
handle you'll actually remember. Six months later the file is called
policy-2026.pdf and sits on a NAS. register resolve car-policy still prints
its path, and register of /Volumes/nas/policy-2026.pdf reads the id off the
file and reports which binders it is in.
Collect the documents for a project. A binder is a set on the
record, not a folder: the contract, two scans and a spreadsheet stay where they
are across several different folders and still form one working set for the
session. Adding a file to a binder does not move it, and the same file can sit
in several binders at once. register list shows all binders with counts,
register list the members, --paths gives you absolute paths to
pipe somewhere.
Attach data to a file. register promote writes a Markdown note with
one YAML block per file, and you fill in whatever the binder is about: an
amount, a payment date, a supplier, a caption, prose. The same file can carry
different fields in a different binder. register annotate does the same edits
from a script or a GUI without you opening the note.
Link to a file so the link keeps working. Yes, like Hookmark, but in plain
text instead of a database. --aka gives a record a handle that has nothing to
do with the filename. register resolve turns it back into a path,
behind a milan:// URL, in a Shortcut, or in a shell alias. The lookup goes
through the record, so the link survives renames and moves.
Look a file up in reverse. register of answers "what is this, and
what is it part of?" from the id on the file, so renaming does not break it.