Velnode Browser · a product of Dignity New Zealand Limited
Product | Version 1.6 | Last updated 2026-07-03
Document type: Product Owner: Dignity New Zealand Limited Applies to: Velnode Browser v2.3.2-beta.1 and later Last updated: 2026-07-03 Document version: 1.6 Status: Approved
This document is the plain-language story of what Velnode Browser is doing under the hood. It is meant for users who want more depth than the Features list but who do not need the engineering detail of the Architecture Overview.
Velnode Browser is a product of Dignity New Zealand Limited.
Velnode Browser is an Electron application. Electron is a runtime that lets a single codebase ship as a desktop app on Windows, macOS, and Linux. Velnode's first public beta ships for Windows 10/11 (64-bit); macOS and Linux builds are planned. Inside an Electron app there are two kinds of processes:
In a normal browser the renderer is "the page you see". In Velnode the renderer is the user interface and the tab content, and the main process is where the trust lives. Every decision that matters โ should this AI call go out at all, should this URL be allowed in Kids Mode, should this plugin be granted disk access โ is taken in the main process, not the renderer.
If you only remember one sentence from this document, remember this one: trust is in the main process; the renderer never decides on its own.
package.json, applies the Velnode defaults (nodeIntegration: false, contextIsolation: true, sandbox: true), and registers the IPC allow-list defined in preload.js.data/settings.json to learn your preferences, including whether Kids Mode is on, whether Local-Only mode is on, and which plugins you have explicitly enabled.index.html. That is the Velnode user interface.The whole sequence is designed to finish in under two seconds on a five-year-old mid-range laptop. That target is treated as an architectural invariant; we do not let new features regress it without explicit waiver.
When you type a URL or click a link, the renderer asks the main process to navigate the active tab.
mailto:, tel:, custom protocol handlers) are subject to explicit review; the unknown ones are denied by default.blocked.html and leaves a timeline entry.Velnode does not interpose itself in the page's network traffic. We do not run a man-in-the-middle proxy. We do not log the body of pages you load. We do not relay your traffic through any Dignity New Zealand Limited server.
Vee is the single AI identity in Velnode. Whether you summon Vee by typing in the Command + Context bar, by clicking the Vee button, by speaking the wake-word (opt-in), or by accepting a suggestion strip on a page, the flow is the same.
node-llama-cpp.data/timeline.json. EchoVee rebuilds its semantic memory from the timeline so Vee can remember the conversation later.A subtle point worth emphasising: because the policy layer is in the main process and the renderer cannot reach the network on its own, a malicious page cannot cause Vee to send a prompt that bypasses your settings. Even a misbehaving official plugin cannot. The policy decision is taken in the place that owns the network.
Velnode's memory is two layers:
data/timeline.json is the append-only ledger. Every event โ a tab opened, a navigation, a Vee prompt and its response, a note created, a bookmark added โ is a line in this file. The file is the canonical record.data/semantic-memory.json is rebuilt deterministically from the timeline. It is the working memory Vee uses to recall "what were we doing yesterday morning". You can throw it away at any time; Velnode will rebuild it on the next launch from the timeline.Append-only is a deliberate choice. It means a bug, a crash, or a malicious plugin cannot rewrite history. The file is your record of your own activity on your own device.
If you want to forget โ delete timeline.json. Velnode will start a fresh ledger on the next launch.
Velnode's Bookmark Manager uses a flat-preserving data model. Every saved bookmark lives in a single flat list in data/bookmarks.json, which keeps all existing features that read bookmarks working without modification. Folder structure โ which bookmark belongs to which folder, and in what order folders appear โ is stored separately in data/bookmark-tree.json.
When you save a bookmark (via the โ
in the address bar or Ctrl+D), the main process writes to both files: the flat list gets a new entry, and the tree file records its folder placement. The two files always stay in step.
Favicons displayed next to bookmarks come from Velnode's own local favicon cache. Velnode does not call an external favicon service; if a favicon is not in the cache, the entry displays a plain icon instead.
The Bookmark Manager ships four surfaces over this single data model: a Favorites bar (toggleable strip under the toolbar), a Favorites flyout (right-side panel), a โ
popover in the address bar, and a full two-pane manager at velora://bookmarks. All four read and write the same files.
Import and Export use the standard Netscape bookmark HTML format that Chrome, Edge, and Firefox all recognise. Importing rewrites the tree with the imported structure; exporting produces a single HTML file you can open in or import into any compatible browser.
You can use Velnode without ever creating an account. If you do create one, here is what happens.
Sign-up. Velnode generates two random values from your password: an authentication hash (sent to the Account Server to prove you know the password) and a Key Encryption Key (KEK), which stays on your device and is never sent anywhere. A random 32-byte account data key is generated locally, wrapped by the KEK, and only the opaque encrypted blob reaches the Account Server. The server never sees your password, your KEK, or your data key.
Subsequent launches on the same device. The data key is cached in the operating system's secure storage (the same mechanism the vault uses). Velnode reads it silently on launch; you do not retype your password.
New device. You sign in with your email and password. Velnode runs the same KDF to re-derive the KEK, fetches the opaque blob from the Account Server, and unwraps the data key. No extra codes are needed.
Forgot password. A password-reset link restores your ability to log in. Because the new password produces a different KEK, the existing encrypted blobs cannot be unwrapped automatically. The Account Server retains the old blobs โ it never deletes them. You then enter your 24-word Recovery Kit, which was generated at sign-up and held only by you: Velnode uses it to unwrap the data key and re-wrap it under the new KEK.
If you have lost both your password and your Recovery Kit: the password reset restores your login, but the previously encrypted data is unrecoverable. This is the honest, unavoidable consequence of true end-to-end encryption, and it is stated plainly during sign-up.
The vault is separate. Signing in does not unlock the vault. Vault secrets open only with your vault master passphrase. The vault travels as an opaque encrypted payload when sync is active; the account data key is never used to read vault contents.
Signed-out experience. When you sign out โ or when you never sign in โ Velnode works exactly as it always has. Data lives locally in data/*.json. Nothing changes for signed-out users.
Signing in to a Velnode Account turns sync on automatically. There is no separate sync passphrase. Sync is optional and additive; your local data/*.json files remain the single source of truth.
What syncs. Seven categories sync independently. Each has its own toggle in Settings โ Sync, and all are on by default:
| Category | Notes |
|---|---|
| Bookmarks and favorites | Changes merge per-item; deletions use tombstones |
| Browsing history | Union-merge only โ Velnode never deletes history entries on merge. Respects the Network-Privacy "recording paused" state: if recording is suppressed locally, nothing is captured and nothing is pushed. |
| Notes | Newest edit per note wins |
| Workspaces | Newest edit per workspace wins |
| Pinned commands and preferences | Per-item newest wins |
| Settings | A curated allowlist of user-level preferences only. Device-bound values โ window position, model file paths, API keys โ are never synced. |
| Password Vault | Travels as an opaque blob. The vault keeps its own passphrase; it opens only when you enter the vault passphrase on a new device ("unlock once on each new device"). Sync never decrypts vault contents. |
Encryption. Each collection's changes are encrypted with the account's random 32-byte data key (AES-256-GCM, with authenticated additional data binding the account ID and collection name), then stored as opaque ciphertext on Velnode's Cloudflare Worker and D1 backend. Velnode cannot read your sync data โ the server sees only ciphertext, record sizes, and timestamps.
Persistent sign-in. Once signed in you stay signed in across restarts. A quiet token-rotation schedule keeps the session alive for active users. An opt-in "Always ask me to sign in on launch" toggle (off by default) disables this for users who prefer to re-enter their password on each launch. If a session expires or is revoked, sync pauses and a prompt appears โ local data is never deleted as a result of a session event.
Per-category toggles. Turning a category off stops future sync for that category. Data already synced to the server is not deleted; it remains available if you turn the category back on or sign in on another device.
Deletions across devices. Velnode keeps a local tombstone log that records deletions (bookmarks, pinned commands, workspaces, notes) for up to 180 days, with a 1 000-entry cap per collection. Tombstones are embedded in compaction snapshots, so a device coming back online after a compaction still receives outstanding deletions. The only remaining edge case is a device that has been offline for longer than 180 days โ it may not receive deletions made before the window opened. For everyday use, deletions propagate reliably across devices.
Five architectural decisions do most of the work:
data/*.json on your device. The account is an additive opt-in layer; it does not replace local files.See the Privacy Policy for the legal framing of the same set of choices.
Velnode is designed to compete on the laptops most people actually own. Velnode's resource-discipline rules are the engineering version of a brand promise:
The promise we make to users is simple: Velnode is lightweight by default. Local AI, wake-word, and heavy plugins are opt-in downloads โ you choose what to add. Your laptop's resources are yours.
We publish releases under semantic versioning. The version of Velnode you are running is shown in the title bar and is also written into package.json in the installer. Since v2.3.3-beta.13 the Windows installer is digitally signed by DIGNITY NEWZEALAND LIMITED, our registered company. When a new release exists, Velnode shows you a notice; the update downloads inside the app, every byte is verified against the release feed's published checksum before anything runs, and it installs only when you click Restart to apply โ Velnode never silently replaces itself.
A material change to behaviour โ a new permission, a new outbound call, a new policy default โ is always called out in the release notes for the version that introduces it. Architecture flags in canon_manifest.json cannot regress: a release that flipped, say, ai_local_only_enforced_main_level to false would fail our own pre-release checks.
Document maintained by Dignity New Zealand Limited. Questions: [email protected].