Skip to content

Releases: nordstjernen-web/nordstjernen-browser

Nordstjernen Web Browser 1.0.23

Choose a tag to compare

@andreasrosdal andreasrosdal released this 08 Aug 20:47

Nordstjernen Web Browser 1.0.23

A real web browser written from scratch in C.

https://nordstjernen.org/

Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl

image

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:FILE writes the same pagination to a multi-page PDF from any
    mode, with no printer involved.
  • Print CSS: @media print now matches (it was hardcoded to screen, so
    print stylesheets were ignored entirely). @page sets sheet size and margins,
    and break-before / break-after / break-inside — plus the legacy
    page-break-* spellings — decide where a sheet ends.

CSS and layout

  • Scroll Snap: scroll-snap-type with scroll-snap-align, plus
    scroll-padding and scroll-margin. Scroll containers only — not the
    document scroller yet.
  • offsetLeft / offsetTop measure from the offsetParent's padding edge again
    instead of returning a document coordinate.
  • Absolutely positioned flex children take their static position from
    justify-content and align-self, honouring *-reverse, wrap-reverse
    and direction: rtl.
  • flex-wrap: wrap-reverse now 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{}]/v writing 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:start splash, 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's NOTICE.
  • The Android, iOS and Java bridges compile again.

Nordstjernen Web Browser 1.0.22

Choose a tag to compare

@andreasrosdal andreasrosdal released this 31 Jul 17:52

Nordstjernen Web Browser 1.0.22

A real web browser written from scratch in C.

https://nordstjernen.org/

Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl

image

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...
Read more

Nordstjernen Web Browser 1.0.21

Choose a tag to compare

@andreasrosdal andreasrosdal released this 28 Jul 21:14

Nordstjernen Web Browser 1.0.21

A real web browser written from scratch in C.

https://nordstjernen.org/

Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl

image

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

Choose a tag to compare

@andreasrosdal andreasrosdal released this 22 Jul 20:41

Nordstjernen Web Browser 1.0.20

A real web browser written from scratch in C.

https://nordstjernen.org/

Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl

screenshot
windowsxp

Nordstjernen Web Browser 1.0.19

Choose a tag to compare

@andreasrosdal andreasrosdal released this 17 Jul 13:12
9f7cc98

Nordstjernen Web Browser 1.0.19

A real web browser written from scratch in C.

https://nordstjernen.org/

Windows: https://apps.microsoft.com/detail/9nw8t7w5z4pl

List of websites almost working, but not quite: Google, Bing, Youtube, duck.ai, cnn, bbc.

image

Nordstjernen Web Browser 1.0.18

Choose a tag to compare

@andreasrosdal andreasrosdal released this 06 Jul 06:31
6e8a511

Nordstjernen Web Browser 1.0.18

A legendary web browser written from scratch in C.

https://nordstjernen.org/

https://apps.microsoft.com/detail/9nw8t7w5z4pl

image

Nordstjernen Web Browser 1.0.17

Choose a tag to compare

@andreasrosdal andreasrosdal released this 30 Jun 09:55

Nordstjernen Web Browser 1.0.17

A legendary web browser written from scratch in C.

https://nordstjernen.org/

screenshot1-win

Nordstjernen Web Browser 1.0.16

Choose a tag to compare

@andreasrosdal andreasrosdal released this 27 Jun 17:19
abd25df

Nordstjernen Web Browser 1.0.16

A legendary web browser written from scratch in C.

https://nordstjernen.org/

screenshot_4

Nordstjernen Web Browser 1.0.15

Choose a tag to compare

@andreasrosdal andreasrosdal released this 24 Jun 22:08

Nordstjernen Web Browser 1.0.15

A legendary web browser written from scratch in C.

https://nordstjernen.org/

aboutstartv6

Nordstjernen Web Browser 1.0.14

Choose a tag to compare

@andreasrosdal andreasrosdal released this 23 Jun 12:12

Nordstjernen Web Browser 1.0.14

A legendary web browser written from scratch in C.

https://nordstjernen.org/

shot2