Northstar web browser, Open Source License: GPL v3. Northstar web browser is a real web browser, not based on Firefox or Chrome.
15
stars
483
commits
C
primary language
Sep 6, 2026
updated

Northstar is a minimalist web browser written from scratch in C. Its engine targets practical HTML5, modern CSS and JavaScript compatibility without embedding Gecko, WebKit, Blink or another browser engine. Linux is the primary platform; macOS and Windows are also supported.
This repository is the open-source GPL edition of the Nordstjernen project. Northstar is licensed under the GNU General Public License, version 3 or later.

Web standards: Behaviour is measured against the specification text, section by section, not against another browser. The engine runs web-platform-tests through headless mode; see docs/compliance.md for the current per-area scores and the known structural gaps.
Security: on Linux the browser runs behind a Landlock filesystem
sandbox (plus PR_SET_NO_NEW_PRIVS), with a default-deny seccomp syscall
filter in both GUI and headless/tooling modes · no JIT.
See SECURITY.md for the exact per-mode posture.
Minimalism: one window, one page, one process. The engine is a compact body of C — about 160,000 lines of original C (excluding the vendored WAMR, Wuffs and audio decoders, and the generated image-data tables) — small enough for one person to read and audit end-to-end.
This edition strips Northstar down to a single-window, single-page, single-process desktop browser, based on the Nordstjernen project. It deliberately omits tabs, per-tab renderer processes, WebGL, WebGPU, an embedded PDF viewer and AI-style web APIs. It does not send telemetry or update pings.
Audio still plays in-process (MP3, MP2, Ogg Opus/Vorbis). Images decode in-tree (PNG/APNG, GIF, BMP, JPEG and WebP via Wuffs, AVIF through libavif when available, and SVG in the engine).
@keyframes, scroll snap.Path2D, ImageBitmap, DOMMatrix), WebCrypto
(crypto.subtle over OpenSSL).localStorage/sessionStorage
and the cache API, each partitioned by origin.window.navigation for single-page routing.<audio>) decodes and plays in the browser process,
alongside a Web Audio graph.
<video> plays MPEG-1 (video/mpeg), decoded in-tree by the same
pl_mpeg that already handles MP2 audio. MPEG-1 is an ISO standard whose
patents have expired, so it costs no dependency and no licence; it is
also not a format the modern web serves, so this is video support for
local and self-hosted clips rather than for streaming sites.Ctrl+P lays the page out for paper and hands the sheets
to the operating system's own print dialog through GtkPrintOperation:
CUPS on Linux, the Win32 dialog on Windows, the Cocoa panel on macOS.
@media print matches, @page sets the sheet size and margins, and
break-before / break-after / break-inside decide where a sheet
ends.On Debian or Ubuntu, install the required development packages:
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
meson setup builddir
meson compile -C builddir
./builddir/src/gtk/northstar
The development helper configures the default build directory when needed and runs the same compile command:
./scripts/dev.sh build
./scripts/dev.sh smoke
The smoke command renders deterministic local fixtures through the headless engine and compares them with the checked-in baselines. A single page can also be rendered directly:
./builddir/src/gtk/northstar --headless --dump=text about:start
Meson feature options include -Davif=disabled, -Daudio=disabled,
-Dwasm=disabled and -Dgtk=disabled for smaller or engine-only builds.
WAMR, Wuffs, pl_mpeg and minimp3 are vendored in-tree. ns-pango, lexbor
and quickjs-ng are pinned upstream subprojects (see subprojects/*.wrap)
that meson setup fetches; see
docs/building.md for how
a pin is moved.
Northstar's engine is written from scratch — it contains no forked browser engine (no Gecko, WebKit, or Blink). It is the GPL edition of the Nordstjernen project.
Pinned upstream meson subprojects (subprojects/*.wrap), fetched by
meson setup:
| Component | Role |
|---|---|
| lexbor v3.0.0 | HTML5 → DOM parser and the WHATWG URL module |
| quickjs-ng v0.16.1 | JavaScript engine — no JIT |
| ns-pango | Text itemization, shaping and line breaking — a Pango fork with a cross-layout shaping cache |
lexbor and quickjs-ng take a system copy instead when the build finds one new enough; ns-pango is always the subproject, since the fork's renamed symbols are what let it coexist with the system Pango that GTK loads.
Vendored in-tree (built from the main tree, no submodules):
| Component | Role |
|---|---|
| WAMR (subset) | WebAssembly interpreter |
| Wuffs v0.4 | Memory-safe image decoding — PNG/APNG, GIF, BMP, JPEG, WebP |
| pl_mpeg (MIT) | In-process MPEG-1 video and MP2 audio decode |
| minimp3 (CC0) | In-process MP3 audio decode |
Required system libraries: GTK 4 (≥ 4.14; ≥ 4.22.1 on Windows), GLib/Cairo, HarfBuzz, FriBidi, fontconfig, FreeType, libcurl (≥ 8.5), OpenSSL (libcrypto), uchardet, libpsl, SQLite and zlib. The engine lays text out through ns-pango rather than the system Pango; GTK still links the system Pango for its own widgets, and the two coexist because every symbol in the fork is renamed. Linux builds also require libseccomp. SDL2 is required when in-process audio is enabled.
Optional (auto-detected): libavif (AVIF images), opusfile / vorbisfile (in-process Ogg audio), Enchant (spell-checking) and libthai (Thai line breaking).
Northstar is free software, licensed under the GNU General Public License, version 3 or later — see LICENSE.
Project home: https://nordstjernen.org · Copyright 2026 Andreas Røsdal.
345 commits
138 commits
C
95.0%
JavaScript
2.9%
Shell
1.2%
Northstar web browser, Open Source License: GPL v3. Northstar web browser is a real web browser, not based on Firefox or Chrome.
15
stars
483
commits
C
primary language
Sep 6, 2026
updated

Northstar is a minimalist web browser written from scratch in C. Its engine targets practical HTML5, modern CSS and JavaScript compatibility without embedding Gecko, WebKit, Blink or another browser engine. Linux is the primary platform; macOS and Windows are also supported.
This repository is the open-source GPL edition of the Nordstjernen project. Northstar is licensed under the GNU General Public License, version 3 or later.

Web standards: Behaviour is measured against the specification text, section by section, not against another browser. The engine runs web-platform-tests through headless mode; see docs/compliance.md for the current per-area scores and the known structural gaps.
Security: on Linux the browser runs behind a Landlock filesystem
sandbox (plus PR_SET_NO_NEW_PRIVS), with a default-deny seccomp syscall
filter in both GUI and headless/tooling modes · no JIT.
See SECURITY.md for the exact per-mode posture.
Minimalism: one window, one page, one process. The engine is a compact body of C — about 160,000 lines of original C (excluding the vendored WAMR, Wuffs and audio decoders, and the generated image-data tables) — small enough for one person to read and audit end-to-end.
This edition strips Northstar down to a single-window, single-page, single-process desktop browser, based on the Nordstjernen project. It deliberately omits tabs, per-tab renderer processes, WebGL, WebGPU, an embedded PDF viewer and AI-style web APIs. It does not send telemetry or update pings.
Audio still plays in-process (MP3, MP2, Ogg Opus/Vorbis). Images decode in-tree (PNG/APNG, GIF, BMP, JPEG and WebP via Wuffs, AVIF through libavif when available, and SVG in the engine).
@keyframes, scroll snap.Path2D, ImageBitmap, DOMMatrix), WebCrypto
(crypto.subtle over OpenSSL).localStorage/sessionStorage
and the cache API, each partitioned by origin.window.navigation for single-page routing.<audio>) decodes and plays in the browser process,
alongside a Web Audio graph.
<video> plays MPEG-1 (video/mpeg), decoded in-tree by the same
pl_mpeg that already handles MP2 audio. MPEG-1 is an ISO standard whose
patents have expired, so it costs no dependency and no licence; it is
also not a format the modern web serves, so this is video support for
local and self-hosted clips rather than for streaming sites.Ctrl+P lays the page out for paper and hands the sheets
to the operating system's own print dialog through GtkPrintOperation:
CUPS on Linux, the Win32 dialog on Windows, the Cocoa panel on macOS.
@media print matches, @page sets the sheet size and margins, and
break-before / break-after / break-inside decide where a sheet
ends.On Debian or Ubuntu, install the required development packages:
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
meson setup builddir
meson compile -C builddir
./builddir/src/gtk/northstar
The development helper configures the default build directory when needed and runs the same compile command:
./scripts/dev.sh build
./scripts/dev.sh smoke
The smoke command renders deterministic local fixtures through the headless engine and compares them with the checked-in baselines. A single page can also be rendered directly:
./builddir/src/gtk/northstar --headless --dump=text about:start
Meson feature options include -Davif=disabled, -Daudio=disabled,
-Dwasm=disabled and -Dgtk=disabled for smaller or engine-only builds.
WAMR, Wuffs, pl_mpeg and minimp3 are vendored in-tree. ns-pango, lexbor
and quickjs-ng are pinned upstream subprojects (see subprojects/*.wrap)
that meson setup fetches; see
docs/building.md for how
a pin is moved.
Northstar's engine is written from scratch — it contains no forked browser engine (no Gecko, WebKit, or Blink). It is the GPL edition of the Nordstjernen project.
Pinned upstream meson subprojects (subprojects/*.wrap), fetched by
meson setup:
| Component | Role |
|---|---|
| lexbor v3.0.0 | HTML5 → DOM parser and the WHATWG URL module |
| quickjs-ng v0.16.1 | JavaScript engine — no JIT |
| ns-pango | Text itemization, shaping and line breaking — a Pango fork with a cross-layout shaping cache |
lexbor and quickjs-ng take a system copy instead when the build finds one new enough; ns-pango is always the subproject, since the fork's renamed symbols are what let it coexist with the system Pango that GTK loads.
Vendored in-tree (built from the main tree, no submodules):
| Component | Role |
|---|---|
| WAMR (subset) | WebAssembly interpreter |
| Wuffs v0.4 | Memory-safe image decoding — PNG/APNG, GIF, BMP, JPEG, WebP |
| pl_mpeg (MIT) | In-process MPEG-1 video and MP2 audio decode |
| minimp3 (CC0) | In-process MP3 audio decode |
Required system libraries: GTK 4 (≥ 4.14; ≥ 4.22.1 on Windows), GLib/Cairo, HarfBuzz, FriBidi, fontconfig, FreeType, libcurl (≥ 8.5), OpenSSL (libcrypto), uchardet, libpsl, SQLite and zlib. The engine lays text out through ns-pango rather than the system Pango; GTK still links the system Pango for its own widgets, and the two coexist because every symbol in the fork is renamed. Linux builds also require libseccomp. SDL2 is required when in-process audio is enabled.
Optional (auto-detected): libavif (AVIF images), opusfile / vorbisfile (in-process Ogg audio), Enchant (spell-checking) and libthai (Thai line breaking).
Northstar is free software, licensed under the GNU General Public License, version 3 or later — see LICENSE.
Project home: https://nordstjernen.org · Copyright 2026 Andreas Røsdal.
345 commits
138 commits
C
95.0%
JavaScript
2.9%
Shell
1.2%