Architecture¶
Gako is deliberately small: a single server binary, a shared cryptographic core, and thin clients. The design pushes every plaintext operation to the edge so the server can stay ignorant of secret content.
Components¶
| Component | Role |
|---|---|
| Core | The canonical client crypto/sync logic. One implementation (Go), also compiled to WebAssembly for the browser, so every client enforces identical formats. |
| Server | Stores and serves opaque ciphertext, access policy, and signatures over an HTTP API. Also serves the web client. Needs only a data directory. |
| Web client | The core compiled to WASM, running in the browser. Encrypts and decrypts locally; the server never sees plaintext. |
| CLI client | A command-line client sharing the same core, for scripting, automation, machine identities, and administration. |
| Future clients | Native desktop and mobile clients and browser extensions are planned. Each will embed the same core, so they enforce identical formats and sit on the same trusted side of the boundary as today's clients. |
The trust boundary¶
The line that matters runs between the clients (trusted with plaintext and keys) and the server (trusted only to store and serve ciphertext, and to enforce policy honestly).
flowchart TB
subgraph trusted["Clients — trusted with plaintext and keys"]
direction LR
web["Web client<br>(WASM core)"]
cli["CLI client<br>(core)"]
future["Future clients<br>desktop · mobile · extensions"]
end
subgraph untrusted["Server side — trusted only to store ciphertext and enforce policy"]
direction TB
server["Server"]
data[("Data directory")]
server --- data
end
trusted -->|"opaque ciphertext + policy + signatures<br>plaintext never crosses this line"| server
Everything above the line holds keys and sees plaintext; everything below it sees only ciphertext. The server stores and serves what the clients hand it and enforces access policy, but it never receives the keys to read any of it.
Because the core is shared, a secret written by the web client is readable by the CLI and vice versa — the formats are defined once and verified against a common test-vector corpus.
Draft
Deeper detail — the API contract, the data model, key hierarchy, and sync protocol — lives in the Gako specifications and will be linked here once the source repository is public.
Deployment shape¶
One static binary serves both the API and the web client and needs nothing but a data directory. See Installation to run it.