Security

A small attack surface, on purpose.

Neoma has no server, no accounts and no data transmission. That removes whole classes of risk. What remains is the content you open in it, and we treat that seriously.

Notes never run code

Raw HTML in Markdown is dropped by the render pipeline. Links, embeds, maths and callouts are rendered from a syntax tree, not injected.

A strict content policy

The desktop app ships a Content Security Policy with no remote host in connect-src, no plugins and no framing.

Imports are untrusted

ZIP entries with path traversal or hidden segments are skipped. Imported files are treated as data.

Your disk, your keys

Vaults live in your browser storage or your own folders. Use your operating system's disk encryption for encryption at rest.

Offline by design

The service worker caches only Neoma's own build files. Remote images and video are blocked unless you allow them.

Auditable

The web edition's source is public under the AGPL. The network audit shows how to check it.

Policy

Reporting a vulnerability

Neoma's security model

Neoma is a fully client-side application. There is no server, no account system and no data transmission — which removes whole classes of risk, but the following still matter:

  • Rendered Markdown must never execute script. The render pipeline drops raw HTML (no rehype-raw); rendered output is sanitised by construction.
  • Imported ZIP archives are untrusted input. Entries with path traversal (..) or hidden segments are skipped.
  • Vault data at rest uses the browser's storage (IndexedDB) or the user's own files. Neoma does not add encryption at rest; use OS-level disk encryption if you need it.
  • The service worker only ever caches same-origin build assets.

Supported versions

Only the latest release receives security fixes.

Reporting a vulnerability

Please report vulnerabilities privately:

  • Discord: panda2187
  • Or use GitHub's Report a vulnerability (Security Advisories) on the repository

Please include reproduction steps and the impact you foresee. You should receive an acknowledgement within 7 days. Please do not open public issues for unpatched vulnerabilities.

Scope notes

  • XSS via note content (wiki links, embeds, math, callouts, imported files) is in scope and treated as high severity.
  • Anything requiring a malicious browser extension or compromised OS is out of scope.