Blog
Why we built Glacivis as a local-first lab notebook
· The Glacivis team
The pattern that pushed us to build Glacivis is one most academic biology labs have lived through at least once: a vendor outage, a quietly-archived workspace, or a sudden price change that turns “your data” into “your problem.”
Lab notebooks fail on data availability more often than they fail on features. A measurement you can’t read this afternoon because the SaaS dashboard is down is worse than a missing feature. A workspace you can’t export cleanly when procurement decides to switch tools is worse than a clunky UI. We started with that observation and worked backwards.
What “local-first” actually means
“Local-first” is a software-architecture term, not a marketing phrase. It means the local copy of your data is authoritative, and the cloud copy is downstream of it — not the other way round. The practical consequences for a wet lab are unambiguous:
- Your day’s work is never blocked by a vendor outage.
- You can keep a private workspace on disk that never touches a cloud at all.
- If the cloud copy diverges, you don’t lose your work — you reconcile it.
- If you stop paying the vendor, you don’t stop owning your records.
The mechanism Glacivis uses is a single SQLite database on your laptop. Every
entity — projects, experiments, runs, notes, protocols, inventory — is a row
in that database. The Tauri desktop app reads and writes it directly. There is
no proprietary file format. If Glacivis disappeared tomorrow, the database is
a standard SQLite file you can open with sqlite3 or a Python script.
The op-log is the audit trail
Every mutation goes through a universal op-log: create, edit, rename, move, delete, relation-change. Each row carries a hybrid-logical-clock timestamp, an actor identity, and a JSON payload of what changed. The op-log is the replay tape — workspace history, per-entity activity feeds, restore-from-history, and the AI-action filter all read from the same source.
This is also what makes our AI auditable. Every AI mutation lands in the op-log
with actor_type='ai', distinct from your own work. You can filter the
activity feed to “human only” before submitting an entry to peer review, or
“AI only” to audit everything the assistant has touched. The AI doesn’t get a
shadow path.
The cloud, when you want it
Cloud sync is opt-in per workspace. Private workspaces never touch the network.
Shared workspaces use Cloudflare R2 and D1 bindings declared
jurisdiction = "eu" at the platform layer — not as a runtime configuration
your DPO has to take on faith. The binding block is in our wrangler.toml,
and we’ll happily point your reviewer at it.
If you want to learn more, the features pages walk through each of the four structural decisions in detail.