Support and Security
Compatibility Matrix
Section titled “Compatibility Matrix”| Capability | Linux | macOS | Windows | Chromium | Firefox | WebKit |
|---|---|---|---|---|---|---|
| Core package and CLI with Node.js 24+ | Supported | Supported | Supported | — | — | — |
| Consumer installation with npm or pnpm | Supported | Supported | Supported | — | — | — |
Rust/Wasm generation with the pinned Rust toolchain and wasm-pack | Supported | Supported | Supported | — | — | — |
| Python/Pyodide asset generation | Supported | Supported | Supported | — | — | — |
Haskell/WASI generation with wasm32-wasi-ghc 9.14 | Supported | Supported | Not supported | — | — | — |
| Built static site and Rust/Python/Haskell execution | — | — | — | Supported | Supported | Supported |
| Viewing already generated Haskell Wasm | — | — | Supported host browser | Supported | Supported | Supported |
Node.js 24 or newer is the package boundary. The repository uses pnpm 11.2.2; consumers may use npm or pnpm. Native Windows cannot author/generate Haskell cells, but it can serve and view Haskell Wasm produced on Linux or macOS.
Execution Model
Section titled “Execution Model”Author-provided Rust, Python, and Haskell source becomes code that runs in a browser worker when a reader executes a cell. A worker keeps heavy computation away from the page’s UI thread, but it is not a security boundary equivalent to a separate machine or account.
- Rust helper crates and generated Wasm are build inputs. Review them like application dependencies.
- Pyodide and declared Python packages execute inside the site’s origin and are trusted dependencies even though Python runs in a worker.
- Haskell runs through a WASI shim with only the descriptors supplied by Oxiquill, but the generated module remains executable content.
- Worker timeouts protect responsiveness; they do not prove that arbitrary code is safe or confidential.
Do not publish interactive code or generated runtime assets from an untrusted author without review. Do not place secrets in static pages, worker messages, source code, public assets, or build-time environment values exposed to the client.
Mermaid, Images, and Runtime Assets
Section titled “Mermaid, Images, and Runtime Assets”Mermaid source is author content rendered with Mermaid’s strict security level. Review it before publication and keep Mermaid itself updated. Generated/downloaded Wasm, Pyodide JavaScript, lockfile-selected wheels, and their source mirrors are executable supply-chain inputs; Oxiquill verifies downloads but cannot establish that an intentionally selected package is trustworthy.
Image data is passed to browser image decoders. SVG is rendered in image context, not injected into the page DOM, but malformed or hostile media still exercises browser parsers. Treat author-provided image data and public media as untrusted input and rely on supported, patched browsers.
Sandboxed HTML
Section titled “Sandboxed HTML”HTML artifacts render in an iframe with an empty sandbox attribute and referrerPolicy="no-referrer". The frame intentionally receives no allow-scripts, allow-same-origin, allow-forms, allow-popups, allow-top-navigation, or download permission. It therefore cannot execute script, access the parent DOM or same-origin storage/cookies, submit forms, open popups, initiate downloads, or navigate the top-level page.
Oxiquill prepends a Content Security Policy to srcdoc: default-src 'none'; img-src data: blob:; media-src data: blob:; style-src 'unsafe-inline'; font-src data:; base-uri 'none'; form-action 'none'. This blocks HTTP(S) and other external subresource requests while retaining inline styles and data/blob images or media needed by reviewed presentation artifacts. The explicit base/form directives prevent markup from changing URL resolution or selecting a form destination. The iframe policy also suppresses referrers.
The sandbox and CSP are isolation controls, not HTML sanitization. The browser still parses supplied markup, and a user can still interact with ordinary content such as text or links within the isolated frame. Prefer typed text, JSON, table, chart, or image artifacts; publish HTML only from reviewed authors.
Reporting Security Issues
Section titled “Reporting Security Issues”Do not disclose a suspected vulnerability in a public issue. Use GitHub private vulnerability reporting. The supported-version policy and response process are in the repository security policy. Use GitHub Issues for non-security bugs and support.