Local First
Your memory is the most private thing that exists between you and an AI: the anxieties you said out loud, the nights you didn't sleep, the plans you didn't finish. Some people simply don't want a thing like that passing through any deployment — even a deployment to their own Vercel project. The local client is for those people: the same kernel running on your own machine, memory lying on hardware you own from day one, conversations never leaving your machine.
The kernel is an npm package
Previously has one kernel and two ways to run it. In the local form, the kernel is packaged as the npm package @previously-lab/kernel, distributed pinned to an exact version by the client — what runs on your machine is the same code a cloud deployment runs.
Installing the whole product takes:
npm i -g @previously-lab/client
previously
No Docker, no build toolchain, no git required. npm is the most battle-tested distribution channel on the planet — we deliberately chose boring technology, because "it runs on your machine" should never be an adventure.
Two directories on your disk
After install, two directories appear, and the split is deliberate:
~/.previouslyis the runtime: kernel versions, logs, process state, scribe cursors. Delete it, reinstall, and it all comes back.~/Documents/Previouslyis the memory itself: plain Markdown files plus a local git repository. That's the valuable half — you'll see exactly what it looks like in Your Memory Is a Folder.
The runtime can always be rebuilt; the memory is only ever yours. This isn't tidiness — it means upgrades, reinstalls, and machine migrations never touch your memory.
Upgrading is upgrading
The kernel version is pinned exactly by the client — not "compatible with ^0.9", but that one version, byte for byte. This is deliberate conservatism: your memory format is bound to kernel behavior, and we don't accept "probably compatible".
So an upgrade is always one sentence:
npm i -g @previously-lab/client
The new kernel arrives as a dependency, installs into ~/.previously/kernel/versions/<version>/, and the pointer flips atomically. The old version stays where it was. No in-place migration scripts, no "do not power off".
Local and cloud don't contradict
The local form isn't anti-cloud. Both forms share the same kernel and the same memory format: a local memory repo can be pushed straight to your own private GitHub repo as a backup, and it works the other way too — clone a cloud deployment's memory repo back to your machine, and the local client will simply adopt it, history fully preserved. The difference is the subject of the sentence: backups and migrations are always a push you make, never a custody we hold by default.
In one line: Previously treats "your memory belongs to you" as an architectural constraint, not a sentence in a privacy policy — and the local form is that constraint's most thorough expression.
Related
- Your Memory Is a Folder — what the memory actually looks like on disk
- Two Engines — what drives the kernel once it's running locally
- The Kernel Supply Chain — the discipline behind exact version pinning