Northstar Browser
Northstar is a minimalist web browser written from scratch in C. One window, one page, one process — about 188,000 lines of original C, small enough for one person to read and audit end-to-end. It carries no upstream browser engine: no Gecko, no WebKit, no Blink. It is free software under the GNU General Public License, version 3 or later, and it runs on Linux, macOS and Windows — on Windows from the Microsoft Store.
Northstar Browser version 1.0.20 released! Video is now decoded by the operating system by default — Media Foundation on Windows, GStreamer on Linux — fonts created with the FontFace API load, YouTube and Media Source fixes come over from Nordstjernen Sol, and security fixes cover module-import CORS, security headers on cached responses, HttpOnly cookies written from script and CSP sandboxing of frames. More info here.
Free software. Licensed under the GNU GPL, version 3 or later — use it, read it, change it, share it. The whole engine is in the repository at github.com/nordstjernen-web/nordstjernen-luna-browser.
Written from scratch. Every behaviour is implemented in the project's own C — the parser glue, the cascade and value parsing, layout, paint, and the DOM and CSSOM bindings. Compliance is not inherited from an upstream engine; it is measured, section by section, against the specification text.
One window, one page, one process. All rendering happens in a single compact process, prioritizing auditability over the isolation a multi-process browser buys. On Linux it runs behind a Landlock filesystem sandbox (plus PR_SET_NO_NEW_PRIVS) with a default-deny seccomp syscall filter, in both GUI and headless modes. There is no JIT.
A family of browsers. Northstar shares its hand-written engine with Nordstjernen, the flagship multi-tab browser, and with Southstar, the Rust version, which started from the Nordstjernen codebase, was ported to Rust module by module, and reached 1.0.0 as an all-Rust browser.
Private by construction. No telemetry, no update pings, and no AI assistant or AI-style web APIs. Safe browsing checks a top-level navigation's host against a local SHA-256 blocklist before it is fetched — the check never leaves your machine. Cookies, storage and the cache are partitioned by origin.
what it does
- HTML and CSS. HTML is parsed to a DOM by lexbor; CSS goes through the engine's own cascade — flex, grid, transforms, transitions and
@keyframesanimations on every property (with a Web Animations API from script), gradients,border-image, container queries, scroll snap on scroll containers and on the page itself, relative colour syntax and thecolor()function across nine colour spaces. - JavaScript. quickjs-ng, a bytecode interpreter with no JIT (or Fabrice Bellard’s original QuickJS, with
-Djs_engine=quickjs) — DOM, Shadow DOM, observer APIs, Canvas 2D (Path2D,ImageBitmap,DOMMatrix) and WebCrypto (crypto.subtleover OpenSSL). - Frames — a framed document gets its own realm and its own Content-Security-Policy, and cross-document
postMessageworks in both directions. - Printing —
Ctrl+Plays the page out for paper and hands the sheets to the operating system's own print dialog throughGtkPrintOperation: CUPS on Linux, the Win32 dialog on Windows, the Cocoa panel on macOS.@media print,@pagesheet sizes and margins, and thebreak-*properties all apply;--dump=print:FILEwrites the same pagination to a multi-page PDF. - Custom elements — autonomous and customized built-in elements, with the insertion steps that make
connectedCallbackfire however the element was inserted. - Workers — dedicated workers with structured-clone messaging, message channels and broadcast channels, sharing the storage partition of the page that started them.
- Storage — IndexedDB over SQLite,
localStorage/sessionStorageand the cache API, each partitioned by origin. - Live connections — WebSockets and server-sent events; the Navigation API (
window.navigation) for single-page routing; and service workers with origin-scoped registration, persistence and controlled-page fetch interception. - WebExtensions — installed local extensions with manifest content scripts, safe packaged resources,
storage.local,i18nand declarativeNetRequest rule sets. - Networking over HTTP/2 with libcurl — HTTP/3 when the linked libcurl provides it, reached through the alt-svc cache rather than by stalling on a QUIC connect — with HSTS, CSP, subresource-integrity checks and partitioned cookies.
- Images — PNG/APNG, GIF, BMP, JPEG and WebP decode through Wuffs, AVIF through libavif when available, and SVG is rendered in-engine.
- Media —
<audio>decodes and plays in the browser process (MP3, MP2, AAC, Ogg Opus/Vorbis) alongside a Web Audio graph.<video>plays MPEG-1, decoded in-tree by the same pl_mpeg that handles MP2 audio — an ISO standard whose patents have expired, so it costs no dependency and no licence. Since 1.0.13 streaming sites play through Media Source Extensions: fragmented MP4 and WebM are demuxed in-tree, a decoder thread per video decodes AV1 (libdav1d), VP9 (libvpx) or H.264 (OpenH264, optional) a few frames ahead, and the sound decodes AAC-LC (in-tree) or Opus. A plain MP4 or WebM file in<video src>is fetched progressively with HTTP range requests and plays the same way, andcontrolsdraws a play/pause button, seek bar, time and mute button. - WebAssembly — the JavaScript API over a vendored WAMR fast interpreter, with no JIT. MathML — a minimalist presentation-MathML renderer. Spell checking — optional, via Enchant.
- The browser itself — a classic labelled toolbar, an address bar that suggests from bookmarks and history as you type, bookmarks, find-in-page, save-to-PDF, history, a JavaScript console, settings, page zoom, a dark theme that follows the desktop, and a headless mode used for testing and for rendering a page from the command line.
what it leaves out
Northstar is deliberately smaller than Nordstjernen, the flagship multi-tab browser built from the same engine. It has no multi-window or multi-tab browsing, no per-tab renderer processes, no WebGL or WebGPU, no embedded PDF viewer, and no AI-style web APIs.
Video codecs come from optional system libraries: without libdav1d, libvpx or OpenH264 at build time, the matching streams do not play, and a file that is none of the supported formats falls back to the MPEG-1 path. Only Cisco’s prebuilt OpenH264 binaries carry Cisco’s H.264 patent licence, so -Dh264=disabled drops H.264 where that matters.
Where the engine stands against the HTML and CSS specifications — per-area web-platform-tests scores, how to reproduce them, and the known structural gaps — is recorded in docs/compliance.md.
specifications
| version | 1.0.20 — released 1 November 2026 · release notes |
|---|---|
| character | minimalist GPL edition of the Nordstjernen project · single window, single page, single process |
| language | C · ~188 kLOC original, excluding the vendored WAMR, Wuffs and audio decoders · GTK 4 shell · fully auditable |
| html / css | lexbor v3.0.1 (parser, WHATWG URL, selectors) · the engine's own cascade and layout |
| javascript | quickjs-ng at 9b06171 (after v0.17.0) — bytecode interpreter, no JIT · or the original QuickJS with -Djs_engine=quickjs |
| text | ns-pango — a Pango fork with a process-wide shaping cache · HarfBuzz · FriBidi |
| webassembly | WAMR (vendored subset) — fast interpreter behind the WebAssembly JS API, no JIT |
| images | Wuffs v0.4 (PNG / APNG / GIF / BMP / JPEG / WebP) · AVIF via libavif (optional) · SVG rendered in-engine |
| media | MPEG-1 <video> via pl_mpeg · Media Source Extensions and progressive MP4/WebM — AV1 (libdav1d), VP9 (libvpx), H.264 (OpenH264, optional), AAC-LC and Opus · audio — MP3, MP2, AAC, Ogg Opus/Vorbis · Web Audio graph |
| printing | Ctrl+P through GtkPrintOperation — CUPS, Win32 or Cocoa · @media print, @page sheet sizes and margins, and the break-* properties · --dump=print:FILE to a multi-page PDF |
| extensions | WebExtensions — local extensions with content scripts, packaged resources, storage and runtime messaging |
| webgl | — (no WebGL, no WebGPU) |
| ai | none — no AI assistant and no AI-style web APIs, by design |
| ui | GTK 4 (≥ 4.14; ≥ 4.22.1 on Windows) · dark theme follows the desktop |
| network | libcurl ≥ 8.5 · HTTP/2 · HTTP/3 through the alt-svc cache when the linked libcurl provides it · request deduplication and reusable preloads · Vary-aware caching |
| hardening | Landlock filesystem sandbox + PR_SET_NO_NEW_PRIVS · default-deny seccomp filter on Linux, in GUI and headless modes · no JIT |
| privacy | no telemetry · no update pings · HSTS · CSP · SRI · partitioned cookies and storage · on-device safe browsing against a local blocklist |
| standards | behaviour measured against the spec text, section by section · web-platform-tests run through headless mode: 46,653 of 68,725 subtests across 37 css/ areas (September 2026) · see docs/compliance.md |
| platforms | linux (primary) · macos · windows (Microsoft Store) |
| license | GNU GPL v3 or later — free software |
| source | github.com/nordstjernen-web/nordstjernen-luna-browser |
See the side-by-side comparison of Nordstjernen and Northstar on the home page.
download
Latest release: Northstar 1.0.20 — released 1 November 2026, as source and on the Microsoft Store. full release notes »
The most recent prebuilt Linux and Windows zips are from Northstar 1.0.7 — released 8 August 2026. read the announcement » · full release notes »
| Source (1.0.20) | 1.0.20.tar.gz · 1.0.20.zip |
|---|---|
| Windows | Microsoft Store |
| Windows (1.0.7) | northstar-1.0.7-windows-x86_64.zip — self-contained, no installer |
| Linux, portable (1.0.7) | northstar-1.0.7-linux-x86_64.zip |
| Linux AppImage (1.0.7) | northstar-1.0.7-x86_64.AppImage — chmod +x and run |
| Debian / Ubuntu (1.0.7) | northstar_1.0.7_amd64.deb |
| macOS | build from source with meson — see build and run below |
| Source (1.0.7) | 1.0.7.tar.gz · 1.0.7.zip |
| All releases | github.com/nordstjernen-web/nordstjernen-luna-browser/releases |
The Windows build needs no installer and no MSYS2 — extract it anywhere and run
northstar.exe. Windows marks anything downloaded from the internet as
blocked, so before extracting, right-click the .zip, choose Properties,
tick Unblock at the bottom of the General tab and press OK. Doing it on the
archive first saves repeating it on northstar.exe afterwards, since the
mark is copied to every file extracted from a blocked archive.
build and run
Linux is the primary platform. On Debian or Ubuntu, install the development packages and build with meson:
| dependencies | sudo apt install build-essential pkg-config meson ninja-build cmake libgtk-4-dev libcurl4-openssl-dev libssl-dev libuchardet-dev libharfbuzz-dev libfribidi-dev libcairo2-dev libfontconfig-dev libfreetype-dev libpsl-dev libsqlite3-dev libseccomp-dev libsdl2-dev zlib1g-dev |
|---|---|
| build | meson setup builddir · meson compile -C builddir |
| run | ./builddir/src/gtk/northstar |
| smoke test | ./scripts/dev.sh build · ./scripts/dev.sh smoke — renders deterministic local fixtures through the headless engine and compares them with the checked-in baselines |
| headless | ./builddir/src/gtk/northstar --headless --dump=text about:start |
Meson feature options include -Davif=disabled, -Daudio=disabled,
-Dh264=disabled, -Dwasm=disabled and -Dgtk=disabled for smaller or engine-only builds.
WAMR, Wuffs, pl_mpeg and minimp3 are vendored in-tree. lexbor and quickjs-ng take a system
copy whenever the build finds one new enough and fall back to a pinned upstream subproject;
ns-pango is always the subproject, because its renamed symbols are what let it sit beside
the system Pango that GTK loads. Full instructions are in the
README and
docs/building.md.
news
- · Northstar 1.0.20 released — video decoded by Media Foundation on Windows and GStreamer on Linux by default, the FontFace API, YouTube and Media Source fixes, and security fixes. Release notes »
- ·
Northstar 1.0.15 released — no executable memory for the engine, a Landlock fix for
~/.Xauthoritysessions, opaquefile:origins, a livedocument.cookie, the browser named as itself in client hints, and about 3,800 lines of dead and duplicated code removed. Release notes » - · Nordstjernen 1.0.33 and Southstar 1.0.0, the all-Rust version, released. More »
- · Northstar 1.0.14 released — video streaming fixes and security fixes from a source-wide review. Release notes »
- · Northstar 1.0.13 released — streaming video through Media Source Extensions and plain MP4 files (AV1, VP9 and H.264 with AAC or Opus), video decoding on its own thread, WAMR’s fast interpreter, Google Maps, XPath, and much cheaper restyling. Release notes »
- · Nordstjernen 1.0.29 released — sharp pages on HiDPI screens, smooth tiled scrolling, the clipboard in text fields, Google sign-in and a security audit of the engine. Announcement »
- · Nordstjernen 1.0.28 is now dual-licensed under the GNU GPL version 3 or later or the Nordstjernen Source License. Announcement »
- · Northstar 1.0.12 released — an 8 MB engine stack so deep pages no longer crash, and a build on Fabrice Bellard’s original QuickJS. Announcement » · Release notes »
- · Northstar 1.0.11 released — Northstar on the Microsoft Store. Release notes »
- · Northstar 1.0.10 released — text measurements that outlive relayout, partial repaint, an idle page that stays idle, popovers, grid fixes and canvas security. Announcement » · Release notes »
- · Northstar 1.0.9 released — a sunny ark comic on about:start, a Mozilla-style toolbar, address-bar suggestions, and a full-screen notice. Announcement » · Release notes »
- ·
Northstar 1.0.8 released — transitions and animations on every property with a Web Animations API,
border-image, thebackgroundshorthand parsed layer by layer,position: fixedthat stays put, flexbox and grid rebuilt against the specifications, and lexbor 3.0.1. Announcement » · Release notes » - · CVE-2026-85046 and Northstar — the actively exploited Chrome V8 type confusion does not apply to Northstar or Nordstjernen: no V8, no JIT, no elements kind to confuse, no write barrier to skip. Read the analysis »
- · Northstar 1.0.7 released — printing through the system dialog, a rebuilt about:start sky and earth, CSS Scroll Snap, frames that reach their parent, quickjs-ng 0.16.1, and Linux binaries. Announcement » · Release notes »
- · Northstar 1.0.6 released — a rebuilt grid, an indexed CSS cascade, faster text through ns-pango, Web Audio that renders, and relative colour syntax. Announcement » · Release notes »
- · Northstar 1.0.5 released — in-engine SVG, WebP/APNG, MPEG-1 video playback, and much better HTML, CSS and JavaScript compatibility. Announcement » · Release notes »
- · Northstar 1.0.4 released — a maintenance release. Release notes »
- · Northstar 1.0.3 released — Media Queries Level 4, CSSOM used values, and use-after-free fixes. Announcement » · Release notes »
- · Northstar 1.0.2 released. Release notes »
- · Northstar 1.0.1 released — the first public release of the GPL edition. Release notes »
