# Nectenda **End-to-end encrypted real-time collaborative editing for [Obsidian](https://obsidian.md).** ![Two people in one Obsidian note, on one canvas and in one base at the same time: each one's named pointer, caret and selection shown to the other, cards moved, resized, linked and typed in at once, and a card moved between lanes of a base's kanban view.](https://nectenda.com/assets/hero/readme.webp) Live cursors, offline editing, shared folders and attachments — on a server that **cannot read your notes**. Content is encrypted on your device before it is sent; the server stores ciphertext it has no key for, and document paths are HMACs rather than filenames. What it makes live, for everyone in a shared folder: - **Notes.** Each person's caret and pointer, with their name; edits merge character by character as you type. - **Canvases.** Cards moved, resized, linked and typed in show as they happen, and changes to different cards merge. - **Bases.** Changes to different filters, formulas and views merge, you see which row, cell or card each person is on, and cards moved between lanes of the kanban view Obsidian 1.14 adds merge too. - **Properties.** A note's properties merge property by property. - **Kanban boards** made with the community Kanban plugin, and **Excalidraw drawings** made with the community Excalidraw plugin, live, with each person's presence on the board or the drawing. Images in a drawing are attachments, so they need a plan with attachment storage. - **Offline.** Your notes are files on your disk; what you change offline merges when you reconnect, and a version that cannot merge is kept as a conflict copy rather than lost. The full list, with the version each arrived in, is the [roadmap](https://nectenda.com/roadmap). ## This repository The Obsidian plugin and the shared library it is built from, source-available under the [PolyForm Shield License 1.0.0](LICENSE). **This is the code that does the encrypting**, and it is why the repository is published: every security property Nectenda claims is enforced here, on your device, before anything leaves it. The server relays ciphertext it cannot read and is not published — doing so would prove little, since nobody can verify which build an operator is actually running. Start with [docs/security-model.md](docs/security-model.md): it states exactly what the server can and cannot see, and names the code implementing each claim so you can check rather than believe. The published `main.js` is **not minified**, so the file that runs in your vault is one you can read directly. ## This plugin requires an account and a server Nectenda is a client for a sync server. It does nothing on its own: there is no offline-only or local-only mode, and with no account nothing syncs. There are two ways to run it, and they differ in what reaches us: **Hosted at [nectenda.com](https://nectenda.com).** We operate the server, so your encrypted notes pass through our infrastructure and are stored on it. We cannot read them: content is encrypted on your device before it is sent, the keys that decrypt it never leave your device unencrypted, and document paths are HMACs rather than filenames. What the server does see is real and is listed exhaustively in [docs/security-model.md](docs/security-model.md) — which accounts share which folders, update sizes and timings, device records, and the display name you choose for a shared folder. Signing in talks to `accounts.nectenda.com`, the one address the plugin knows without being told. **A server you run.** The plugin talks to whatever address you give it, and a vault pointed at your own server sends us nothing at all — not the ciphertext and not the metadata above. **The server is not something you can obtain today**: it will be sold as a licensed image, and that is not yet available. This is functional since it is the same codebase that runs our hosted service, but we have not yet packaged and documented it nicely for licensed usage. We will prioritise this and have it ready fairly quickly if demand for it is there. Both modes run the same encryption. The plugin talks to the server you point it at and to no third party. ## What leaves your machine Nothing about what you do. There is no analytics of any kind. When you are signed in to the hosted service, the plugin reports its own crashes to an error tracker Nectenda runs itself — not a third party. It is on unless you turn it off, and it sends nothing until it has shown you what a report contains. A report carries the exception and its message, scrubbed; stack frames as line and column numbers and function names, each frame's file reduced to the published `main.js`, Obsidian, or an unnamed frame; the plugin and Obsidian versions, the platform, and the install identifier every request already carries. It carries no note content, no note, folder or attachment name, no file path, not your vault's name, and no token or key. The payload is built from a fixed list of fields rather than filtered down from a larger one — `packages/plugin/src/error-report.ts`, and there is no error-reporting library behind it, because a library owns the event and we would be subtracting from it. [docs/security-model.md](docs/security-model.md) states the rule and names the code. ## Installing **[Install it from Obsidian's plugin directory](https://community.obsidian.md/plugins/nectenda)**, or find it under **Settings → Community plugins → Browse** inside Obsidian. **By hand**, from the [latest release](../../releases/latest): take `main.js`, `manifest.json` and `styles.css`, put all three in `/.obsidian/plugins/nectenda/`, and enable the plugin under **Settings → Community plugins**. Then open **Settings → Nectenda** and sign in. Signing in creates your own organisation on the free plan; share a folder from the plugin's pane and anyone you invite sees your edits as you type. What changed in each version is in [CHANGELOG.md](CHANGELOG.md). ## What it costs The plugin is free and always will be. The hosted service is what is paid for, and an organisation is the billable unit — a person can belong to several and takes one seat in each. | | Price | Seats | Devices per seat | Attachments | |---|---|---|---|---| | **Free** | — | 3 | 2 | none; text sync only | | **Personal** | $5/mo or $48/yr | 6 | 3 | 10 GB | | **Team** | $6 per seat/mo | up to 10 | 4 | 20 GB + 5 GB per seat | | **Small Business** | $18 per seat/mo | up to 25 | 6 | 100 GB + 20 GB per seat | Free is not a trial: it does not expire and it is not a reduced version of a paid plan - the main differences being attachment storage space and user/device allowances. Text sync is never blocked on any plan, and nothing is deleted if you stop paying — an organisation that lapses returns to Free with everything it stored still downloadable. Plans are bought inside Obsidian rather than on a web page, because the keys that encrypt your vault are derived on your own device from a passphrase that never reaches us. An account cannot be created for you remotely; the last step is always yours. Full pricing at [nectenda.com/pricing](https://nectenda.com/pricing). ## Build ```sh pnpm install pnpm build # produces packages/plugin/main.js ``` Building it yourself is the point of publishing it: `scripts/verify-build.mjs` rebuilds from this source and compares the result byte for byte against the `main.js` in a release, so you can check that the file you installed is the file you just read. ## Documentation - [Security model](docs/security-model.md) — what the server can and cannot see, the exact cryptographic parameters, and what is deliberately **not** claimed ## Licence [PolyForm Shield 1.0.0](LICENSE) — source-available, not open source. Any purpose is permitted, commercial use included, **except** providing a product that competes with Nectenda. Reading this code, auditing it, modifying it for your own use, and building it to check the result against the `main.js` you installed are all expressly permitted — that is what publishing it is for. If you redistribute any part of it, PolyForm Shield requires you to pass on the licence terms and this line, which also travels inside every built `main.js`: ``` Required Notice: Copyright (c) 2026 Nerchure Ltd (https://nectenda.com) ``` ## Getting help, and reporting a vulnerability **Support:** `support@nectenda.com` — accounts, subscriptions and refunds. We reply within three business days. **Security:** if you have found a vulnerability, please write to `security@nectenda.com` rather than opening an issue, and give us a reasonable chance to fix it before disclosing. We will confirm receipt within three business days, tell you what we find, and credit you unless you would rather we did not. Every claim in [docs/security-model.md](docs/security-model.md) is meant to be checkable against this code. **If you can show one of them is wrong, that is the report we most want.** --- Generated from Nectenda's development repository; issues and pull requests are welcome here, and changes are applied upstream and mirrored back.