Releases: nordstjernen-web/nordstjernen-browser
Release list
Nordstjernen Web Browser 1.0.23
Nordstjernen Web Browser 1.0.23
A real web browser written from scratch in C.
Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl
Nordstjernen 1.0.23
Printing
- The browser prints.
Ctrl+P(or Print… in the menu) lays the page out for
paper and hands it to the operating system's own print dialog — CUPS on Linux,
the Win32 dialog on Windows, the Cocoa panel on macOS. Needs the in-process
renderer, so run with--single-process. --dump=print:FILEwrites the same pagination to a multi-page PDF from any
mode, with no printer involved.- Print CSS:
@media printnow matches (it was hardcoded toscreen, so
print stylesheets were ignored entirely).@pagesets sheet size and margins,
andbreak-before/break-after/break-inside— plus the legacy
page-break-*spellings — decide where a sheet ends.
CSS and layout
- Scroll Snap:
scroll-snap-typewithscroll-snap-align, plus
scroll-paddingandscroll-margin. Scroll containers only — not the
document scroller yet. offsetLeft/offsetTopmeasure from the offsetParent's padding edge again
instead of returning a document coordinate.- Absolutely positioned flex children take their static position from
justify-contentandalign-self, honouring*-reverse,wrap-reverse
anddirection: rtl. flex-wrap: wrap-reversenow puts the first line last.
JavaScript
- QuickJS refreshed onto quickjs-ng 0.16.1: iterator helpers (
Iterator.concat,
join,includes,chunks,windows), resizable ArrayBuffers, and a fix for
/[\q{}]/vwriting out of bounds.
rather than being reconstructed from a comment. - Text shaping no longer caches a run together with the next word's kerning, so
the same words always measure the same width. - New
about:startsplash, drawn by an in-tree renderer.
Packaging
- The project moved to nordstjernen-web/nordstjernen-browser; all links,
badges and packaging metadata updated. - Debian, RPM, Alpine and OBS recipes declare the FFmpeg
libav*libraries the
build has required since inline WebM, and build without network access. - Third-party notices now list pl_mpeg, minimp3, the wgpu-native headers and
lexbor'sNOTICE. - The Android, iOS and Java bridges compile again.
Nordstjernen Web Browser 1.0.22
Nordstjernen Web Browser 1.0.22
A real web browser written from scratch in C.
Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl
Nordstjernen 1.0.22
An independent web browser written from scratch in C. This release is
largely about making real sites lay out and run correctly: lichess.org,
chess.com, bbc.com, nrk.no, dn.no, the New York Times and Wikipedia all
exposed engine defects that are fixed here. It also brings a faster text
layer, a reworked toolbar, and a substantially more capable Android app.
Layout and rendering
- Grid items placed through grid-template-areas now honour align-items
and align-self instead of sitting at the top of their row. - Grid tracks can be measured in any length unit. Units the parser could
not read were dropped, shifting every remaining track one place left;
a track list that still cannot be read is now discarded whole. - Grid items can be placed on named lines. A named line was parsed as a
track and dropped, so grid-column: main resolved to nothing. - min-content and max-content grid tracks size to their content instead
of stretching like auto, and a grid container's own min-content and
max-content widths are the sum of its columns rather than the width of
its widest item. - A single flex line is as tall as its container says, rather than the
taller of the container and its content. - Flex and grid items measure their intrinsic sizes in the font they are
actually drawn in, not the fallback face. - An absolutely positioned box with width: auto gets a real shrink-to-fit
width measured by shaping the text, where it was previously guessed
from a character count. - inline-block, inline-flex and inline-grid sit on the line's baseline.
- Table cells default to vertical-align: middle, as every browser's
user-agent sheet specifies. - An image is drawn inside its own borders, padding and margin instead of
at the margin-box origin. - A percentage inside min(), max() and clamp() is measured against the box
rather than the viewport. - A declaration using var() no longer overrides the declarations written
after it. - An SVG with a viewBox but no width or height is fitted to the 300x150
default object size instead of being rasterised square and stretched. - An SVG font-size presentation attribute survives the cascade rather than
being overwritten by the inherited computed value. - An that paints nothing passes the pointer through: SVG hit-tests
as visiblePainted, so an overlay of labels no longer swallows clicks. - Positioned boxes answer the pointer in the layer they paint in, so a
fixed high-z-index overlay is hit before the content behind it, and a
modal dialog in the top layer is tried before the document. - A dialog opened from script renders, and a modal one is centred.
- A #fragment stays anchored while the rest of the page loads.
- A text field shows as much of its value as it has room for, instead of
exactly as many characters as its size attribute names.
CSS and CSSOM
- prefers-color-scheme reports the scheme the desktop is actually using,
and prefers-reduced-motion follows the platform setting. The internal
pages (start, about, settings, history, error) gain a dark theme. - document.styleSheets includes linked stylesheets with their href and
their rules; previously only inline <style> blocks were populated. On
nrk.no this went from 13 reachable rules to 1895. - CSSOM rule interfaces carry their real names and classes:
CSSImportRule, CSSKeyframesRule, CSSNamespaceRule, CSSCounterStyleRule,
CSSContainerRule, CSSLayerBlockRule and CSSScopeRule. - CSSStyleSheet.insertRule() and deleteRule() enforce their required
arguments; addRule() and removeRule() mutate both constructed and
document sheets. - getComputedStyle(el).cssFloat reports the used float.
- A finished keyframe animation keeps the value animation-fill-mode says
it should, instead of snapping back to the specified value. - Resolving an ex, ch, cap or ic length no longer shapes four probe
glyphs on every call.
JavaScript and web APIs
- Mouse and pointer events carry the window they were dispatched in;
UIEvent.view previously reported null. - AbortSignal is a real interface object, so signal instanceof
AbortSignal answers instead of throwing. MessagePort gains the same
treatment in the window. - Event-listener objects follow the Web IDL callback-interface algorithm:
handleEvent is looked up per dispatch, and generic EventTarget objects
no longer discard object listeners. - Checkbox and radio activation follows HTML's legacy pre-activation and
canceled-activation steps, including indeterminate state and restoring
the previously checked radio on a canceled click. - Workers get the same JavaScript platform the page does: indexedDB,
Headers, Blob, AbortController, AbortSignal, ReadableStream,
WritableStream, TransformStream and caches are present, and a worker
shares the storage partition of the page that started it. - Instantiating a module through the WebAssembly JS API runs the module's
start section and nothing else, so Emscripten modules no longer tear
themselves down on their first WASI call. - An IndexedDB write no longer rescans the origin's whole storage
directory on every put. - Regular-expression search skips positions that cannot start a match,
the way V8's Irregexp does. A failing literal search over 880 KB drops
from 5.6 ms to 0.25 ms, a leading character class from 10.8 ms to
0.35 ms, and ten thousand missing test() calls from 200 ms to 2.2 ms.
Verified by differential fuzzing over 40,000 random cases. - OfflineAudioContext renders audio instead of silence: oscillators,
gain, dynamics compression, the RBJ biquad types, delay, wave shaping,
constant sources and buffer playback. - The local \p{RGI_Emoji} tables were dropped in favour of upstream
quickjs-ng's properties-of-strings support.
Networking
- A page on an origin that does not speak QUIC no longer stalls for the
whole connect timeout. Requests ask for HTTP/2 and are upgraded to
HTTP/3 through the alt-svc cache, the way an origin advertises it.
Acid3 loads in 2.2 seconds instead of 15.5. - A navigation that ends with nothing to render gets an error page
whatever its scheme; a missing file:// path no longer renders blank.
Text layout
- Desktop builds shape text through ns-pango, a fork of Pango carried as
a meson subproject, which caches finished glyph strings process-wide
and caches font metrics per font description. Pango keeps no cache that
outlives a PangoLayout, so the same bytes were shaped once to measure a
run and again to paint it. On a table-heavy page the cache serves 92%
of shaping requests and cuts layout time by 24%; a text-heavy page
falls 13%. Rendering is byte-identical on both paths. - Three further caches were added: unicode break attributes, paragraph
items, and shaping keyed on a word rather than a run. - Android and iOS keep the system Pango; -Dns-pango=disabled builds that
path on the desktop too.
Browser interface
- The status line floats over the bottom-left corner of the page, appears
only while it has something to say, and clears when the pointer leaves
a link or a load finishes. Notices fade after five seconds. - The toolbar menu is grouped into tab, view, page and tool sections and
gains Zoom In/Out/Reset, Full Screen, History and the two save entries. - The page zoom is shown beside the address bar while the page is scaled
and resets when clicked. Zoom steps follow the usual ladder: 90, 100,
110, 125, 150. - The bookmark button carries a hollow star that fills once the page is
bookmarked, and offers to remove it. - Escape in the address bar reverts it to the URL the window is showing,
closes the find bar, and stops a load in progress. - Back and forward are green, reload is blue, and a red stop button
appears between reload and home while a page is loading. - about:nordstjernen lists the user agent as a request resolves it.
- The start page is titled "Home".
- Headless --viewport takes WIDTHxHEIGHT; anything it cannot read is now
an error rather than silence.
Android
- Forward navigation and a history list that survives process death.
- Find-in-page, and long-press-to-select with a copy/share action bar.
- A lock or warning at the head of the URL bar.
- WebGL and camera permission prompts now reach the user; they were
silently dropped before. - Rotation re-lays out the open document instead of refetching it, so
scripts, form state and reading position survive turning the device. - Sharing a page or selection, pull-to-refresh, system printing (Save as
PDF), launcher pinning, app shortcuts, and WEB_SEARCH and PROCESS_TEXT
intents. - The app follows the system dark theme and the "remove animations"
accessibility switch.
Java / JVM
- java/pom.xml builds the binding with Maven, with a release profile that
signs and publishes to the Maven Central portal; Gradle reads the same
version out of the POM. - RemoteBrowser and RemotePage now cover the renderer's whole control
protocol, including transport security, page size, scroll position,
camera prompts, overflow scrolling, scrollbar dragging, context menus,
file drops, page dumps and back/forward-cache traversal. - The Swing browser uses all of it: several windows (Ctrl+N, Ctrl+Shift+N
for a private one), draggable in-page scrollbars, page-source and
layout/network/performance inspectors, fil...
Nordstjernen Web Browser 1.0.21
Nordstjernen Web Browser 1.0.21
A real web browser written from scratch in C.
Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl
1.0.21 highlights
- CSS and rendering: a full Media Queries Level 4 evaluator, live CSSOM media lists and rule mutation, stricter declaration parsing, container-query fixes, vertical text, corrected flex/grid sizing and margin coordinates, and real scrollable-overflow measurement.
- Media and graphics: HLS and DASH sources feed Media Source Extensions when the optional libav backend is available; MSE type detection, buffering and eviction are more robust; APNG, GIF and WebP animations play through the shared image path; SVG is rendered in-engine with masks, markers and CSS presentation properties.
- Web platform: iframe scripts, events and performance objects stay in their document realm; DOM reflection, text-control selection, mutation observers, Shadow DOM, XMLHttpRequest and platform-interface semantics have been brought closer to their specifications.
- Networking, safety and speed: speculative loads are reused instead of refetched, HTTP cache variants respect Vary, the nghttp2/HTTP/3 backends received correctness and lifecycle fixes, a reachable MPEG-1 decoder over-read was contained, and container-query and nested-flex layout avoid major repeated work.
- Privacy and product: client hints identify Nordstjernen instead of impersonating Chrome, --private starts a private-browsing session, and the release includes a redesigned about:start splash and a new whole-system architecture guide.
Nordstjernen Web Browser 1.0.20
Nordstjernen Web Browser 1.0.20
A real web browser written from scratch in C.
Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl

Nordstjernen Web Browser 1.0.19
Nordstjernen Web Browser 1.0.19
A real web browser written from scratch in C.
Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl
List of websites almost working, but not quite: Google, Bing, Youtube, duck.ai, cnn, bbc.

Nordstjernen Web Browser 1.0.18
Nordstjernen Web Browser 1.0.18
A legendary web browser written from scratch in C.
https://apps.microsoft.com/detail/9nw8t7w5z4pl




