Skip to content

Latest commit

 

History

History
644 lines (307 loc) · 37.5 KB

File metadata and controls

644 lines (307 loc) · 37.5 KB

Changelog

8.8.2 (2026-09-12)

Bug Fixes

  • gl: ask CGL for a stencil buffer — every stencil test passed on XQuartz (#353) (4abff02)
  • text: resolve sans-serif to Helvetica on macOS, not a face with full-width Cyrillic (#354) (8af0711)

8.8.1 (2026-09-11)

Bug Fixes

  • 2d: anchor text shadows the same wherever the text is drawn (#352) (00a8495)
  • gl: Bun passes descriptors now, so stop reporting that it cannot (#346) (8f9d396)
  • text: round glyph origins the same wherever a run is drawn (#351) (5737ba6)

8.8.0 (2026-08-27)

Features

  • window: deselectInput, the inverse of selectInput (#342) (c8979fd)

Bug Fixes

  • gl: answer the multisample request instead of dropping it (#343) (41af955)

8.7.0 (2026-08-26)

Features

8.6.0 (2026-08-26)

Features

  • shadow: export blurCoverage, the blur that bakes instead of re-filtering (#336) (41da9f6)

8.5.0 (2026-08-25)

Features

  • text: drive the opsz axis from the size text is set at (#333) (d7d5282)

8.4.1 (2026-08-25)

Bug Fixes

  • app: fall back to the native display rate when RandR's answer is implausible (#329) (5c6f9e9)
  • window: answer the motion hint with QueryPointer, so it thins motion instead of stopping it (#331) (9e1645c)

8.4.0 (2026-08-24)

Features

  • gl: direct rendering on macOS/XQuartz via the Apple-DRI extension (#326) (da64a90)

8.3.1 (2026-08-24)

Bug Fixes

  • window: adopt a window without selecting events on it (#323) (d2534d0), closes #322
  • window: adopt nothing on a closing connection, so a routed event cannot throw (#324) (6535504), closes #321

8.3.0 (2026-08-23)

Features

  • 2d: clip to an XFIXES region, and put the picture clip back (#296) (a8bad58)
  • app: the four extensions a compositor needs, asked once per connection (#301) (7e7689e), closes #289
  • deps: x11 4.0.1, and the visual to format table it decodes (#320) (4e8999a)
  • events: deliver extension events to the window or pixmap they name (#305) (64878b7), closes #290
  • pixmap: adopt an existing id with real geometry, depth and ownership (#304) (2344f3d)
  • render: pick a picture format from the drawable's visual, not its depth (#300) (caa7ab0)
  • text: share glyphs across processes via a _NTK_GLYPHD directory (#302) (49a85ee)
  • window: a public wait for an adopted window's geometry (#299) (c691a76)
  • window: let an adopted window opt into a backing store and Present (#316) (9710685)

Bug Fixes

  • svg: apply presentation attributes on the root <svg> (#310) (201c08a)
  • test: dispose of the connection a timed-out wait still receives (#317) (97df026)

Performance Improvements

  • 2d: apply a rectangular clip by shrinking the composite box (#312) (367b778)
  • 2d: bound the composite-mask fallback to the drawing's own box (#315) (2b94c43)
  • 2d: the picture clip is context state, not a stamp per drawing (#314) (f3b7a4b)
  • window: drop no-op callbacks on void requests, memo the cursor (#311) (c9a58e0)

8.2.0 (2026-08-18)

Features

  • text: shadows for laid-out text, one coverage surface per paragraph (#285) (3c33112), closes #283

8.1.1 (2026-08-18)

Bug Fixes

  • text: draw glyph runs through the transform, not past it (#282) (cdc9f75), closes #280

8.1.0 (2026-08-18)

Features

  • context2d: shadows, with the blur run as two passes and text coverage cached (#278) (3e88dfc)
  • fonts: an async matchSorted, so a font picker stops blocking on fc-match (#275) (d5d2625)
  • fonts: fc-match answers with the family name too (#276) (44c7163)

Bug Fixes

  • context2d: a gradient paints where the fill is, not where the window starts (#277) (b55c245)

8.0.0 (2026-08-16)

⚠ BREAKING CHANGES

  • the document widgets leave, and the layout engine with them (#269)

Features

  • the document widgets leave, and the layout engine with them (#269) (4fcdc20)

7.7.0 (2026-08-14)

Features

  • context2d: createPattern tiles a surface as one repeating fill (#265) (fd61e55)

Performance Improvements

  • context2d: a path of scattered subpaths pays for its pieces, not the box around them (#267) (ce3e46b)

7.6.1 (2026-08-13)

Bug Fixes

  • context2d: stroke same-x hairpin bursts without NaN join geometry (#260) (45ce1c0)

7.6.0 (2026-08-12)

Features

  • context2d: fillRects batches many rectangle fills into one FillRectangles request (#256) (af68a8d)
  • surface: copyWithin — overlapping self-copy for offscreen surfaces (#255) (a080e38)
  • text: public glyph-run seam — Font.glyphIdFor and a documented drawGlyphs run contract (#258) (3faabd9)

7.5.0 (2026-08-11)

Features

  • input: select and route XI2 device events, so a wheel reports a real delta (#250) (0eee153)

7.4.0 (2026-08-11)

Features

  • xembed: socket and plug halves of the embedding protocol (#248) (ddc39e1)

7.3.3 (2026-08-10)

Bug Fixes

  • 2d: sample the coverage scratch mask at the destination offset (#244) (49d004a)

7.3.2 (2026-08-09)

Bug Fixes

  • gl: tell a runtime that cannot pass descriptors from a remote display (#241) (2287d95)

7.3.1 (2026-08-09)

Bug Fixes

  • gl: do not cap the optional GPU addon at one minor (#239) (dec8759)

7.3.0 (2026-08-09)

Features

  • gl: a direct rendering backend, off by default (#237) (5f26475)

Bug Fixes

  • 2d: keep a stroke inside the path it strokes (#234) (71274b7), closes #233

7.2.0 (2026-08-07)

Features

  • text: textRendering, so a run can name its own glyph path (#231) (9d75a20)

Bug Fixes

  • text: an animated axis is churn, and the router could not see it (#230) (a3d1a54)

7.1.0 (2026-08-07)

Features

  • text: variable fonts, instantiated on demand (#227) (03539e9)

Bug Fixes

  • app: give each connection its own atom table (#226) (5585aad)

7.0.0 (2026-08-06)

⚠ BREAKING CHANGES

  • window: present: true was opt-in and is now the default for double-buffered windows, which changes both how a frame is sent and what paces it. Pass present: false for the old behaviour, or frameClock: 'fence' to keep the old clock while still presenting.

Features

  • app: default the frame interval to the display's refresh rate (#221) (28c73d8)
  • window: present by default, and clock frames on the display (#222) (a021a9f)

Performance Improvements

  • an odd border width belongs on the rounded-stroke fast path (#218) (a952e09)
  • window: clock frames on Present's CompleteNotify (#220) (a929e62)

6.7.0 (2026-08-06)

Features

  • recognize rounded-rect fill/stroke and emit corner glyphs + FillRectangles (#212) (c33908a), closes #211

Bug Fixes

  • a closed subpath's seam is a join, not two loose ends (#216) (3bb8e32)

Performance Improvements

  • flatten arcs from their own geometry instead of bisecting their cubics (#215) (ca24183), closes #213

6.6.1 (2026-08-05)

Bug Fixes

  • window: the backing store cleared to white, whatever the window's background (#209) (5d5e758)

6.6.0 (2026-08-04)

Features

  • window: ARGB visual discovery and transparent windows (#206) (67c21b5)

6.5.0 (2026-08-04)

Features

  • support Node 18.19 by reaching builtins through a version-tolerant helper (#205) (9fc2e72)

Bug Fixes

  • window: frameInFlight reports a present deferred by the inter-blit interval (#204) (d604b9e)

Performance Improvements

  • clip: route non-rectangular clip masks through the local rasterizer (#202) (59b9d89)

6.4.0 (2026-08-03)

Features

  • glx: explain why getContext('opengl') failed (#200) (0139d9c)

6.3.0 (2026-08-03)

Features

  • _NET_WM_SYNC_REQUEST, so window managers can pace interactive resizes (#197) (84d849a)
  • blit with the Present extension, opt-in per window (#198) (c50fc14)

Performance Improvements

  • pace discrete-event blits with a minimum inter-blit interval (#195) (551817e)

6.2.0 (2026-08-03)

Features

6.1.0 (2026-08-03)

Features

  • shm: route bulk pixel transfers through MIT-SHM on local connections (#191) (b427535)

6.0.1 (2026-08-02)

Performance Improvements

  • fonts: prewarm fc-match for the default pattern off the event loop (#189) (b92b806)
  • rect-only clip stacks never materialize the a8 mask (#185) (25627b3)
  • solid paints are one CreateSolidFill, cached per connection (#190) (8a55431)
  • text: LRU-evict the shaping memo and route fillText through it (#188) (58faf84)
  • window: headroom in the backing pixmap, so a drag-resize reallocates O(log) times (#187) (115205d)

6.0.0 (2026-08-02)

⚠ BREAKING CHANGES

  • distribute leading above and below the text, not only below (#175)

Features

  • text: TextLayout maxLines and ellipsis truncation (#173) (d5eb6b5)

Bug Fixes

  • distribute leading above and below the text, not only below (#175) (50202ce)

5.4.0 (2026-08-02)

Features

  • clipboard: conversion timestamps, and clear() to give a selection back (#172) (0f79862)
  • fonts: a font spec, for environments without fontconfig (#167) (4084c93)

Bug Fixes

  • stop leaking GCs, pixmaps and pictures from the 2d context (#165) (545e450)

5.3.0 (2026-08-02)

Features

  • a cancellable 'close' event for WM_DELETE_WINDOW (#155) (d6b12f0)
  • clipboard: INCR on the write side, required targets, any format (#164) (2ced75e)
  • clipboard: watch a selection instead of polling it (#163) (420035d)
  • setIcon/getIcon — the _NET_WM_ICON writer (#154) (f08fe91)
  • Surface, and SVG documents that take their colour from the caller (#157) (c74f684)

Bug Fixes

  • test: a test timeout that unrefs itself cannot fire when it matters (#162) (8811235)

5.2.0 (2026-08-01)

Features

  • publish frameInFlight, the gate for painting a discrete input now (#148) (64e4108)

5.1.0 (2026-08-01)

Features

  • context-2d: rasterize small drawings locally, behind a pluggable seam (#147) (05c46fa)

Bug Fixes

  • context-2d: bound stroke mask work to the stroke's bounding box (#145) (3e6a332)

5.0.0 (2026-08-01)

⚠ BREAKING CHANGES

  • load the layout engine without top-level await (#143)

Features

  • load the layout engine without top-level await (#143) (3ea8127)
  • one socket write per frame — buffer requests by default (#141) (8c6e76d)

4.3.0 (2026-08-01)

Features

  • Window.scrollRegion — server-side scroll of the backing store (#139) (055028a)

4.2.0 (2026-07-31)

Features

  • setCursor('none'), a genuinely blank cursor (#136) (6e69a1b)

4.1.0 (2026-07-31)

Features

  • _NET_WM_STATE beyond always-on-top, and both ways of changing it (#132) (7016021)
  • round out the ICCCM writers, and stop WM_PROTOCOLS clobbering itself (#131) (cca73c3)

Bug Fixes

  • build outgoing events from objects, and reject a big-endian connection (#130) (cd34931)
  • follow the active keyboard layout, and stop CapsLock shifting digits (#133) (7621477)
  • implement deleteProperty, which the docs already promised (#134) (8bf4ea4)
  • inline the keysym-to-unicode table, drop the keysym dependency (#127) (97d9409)

4.0.0 (2026-07-30)

⚠ BREAKING CHANGES

  • MarkdownView no longer renders fences tagged mermaid as diagrams, and its onInvalidate option is gone. parseMermaid and layoutMermaid are removed.

Features

3.10.2 (2026-07-30)

Performance Improvements

  • copy a region, not the box around it (#112) (1dd38b2)
  • copy only the region a frame changed, not the whole window (#110) (79cd32d)

3.10.1 (2026-07-30)

Bug Fixes

  • a squeezed markdown table column keeps its longest word whole (#108) (21f824a)

Performance Improvements

  • intersect a rectangular clip without a full-surface mask (#107) (d2bfb6d)

3.10.0 (2026-07-30)

Features

  • re-record the straight-colour exports (9fdbe38)

3.9.1 (2026-07-30)

Bug Fixes

  • hex alpha, and premultiply the colours XRender is given (#100) (f800a2f)

3.9.0 (2026-07-29)

Features

  • setProperty, the write side of the property API (#97) (075ab56)

3.8.0 (2026-07-29)

Features

  • window manager support — substructure payloads, property reads, frames (#95) (277d3a1)

3.7.2 (2026-07-27)

Bug Fixes

  • text: an empty span list is a layout, not a crash (#93) (7cb9ca8)

3.7.1 (2026-07-27)

Bug Fixes

  • tex: TeX boxes honour the 2d clip (#91) (ac95ac8)

3.7.0 (2026-07-27)

Features

  • keyboard focus events, wnd.focus(), and pointer/keyboard grabs (#89) (6fdb6a9)

3.6.0 (2026-07-27)

Features

  • css: export cssColor and cssLength (#87) (2b49fc7)
  • glx: context tag, GLX visuals for windows, server-side visual discovery (e523667)

3.5.3 (2026-07-27)

Performance Improvements

  • 2d: bound fill and stroke mask work to the shape's bounding box (#83) (5b9dafe)

3.5.2 (2026-07-27)

Performance Improvements

  • 2d: server-side clip for glyphs, and one glyph batch per layout (#81) (ba2cbff)

3.5.1 (2026-07-27)

Bug Fixes

  • 2d: glyph drawing now honours the clip mask (#79) (632e896)

3.5.0 (2026-07-27)

Features

  • window: WM_NORMAL_HINTS, WM_CLASS, _NET_WM_WINDOW_TYPE, always-on-top (#77) (388542f)

3.4.0 (2026-07-26)

Features

  • onInvalidate hook for async content in standalone MarkdownView/HtmlView (#75) (1658669)

3.3.0 (2026-07-26)

Features

  • text: caret positioning and hit-testing API on TextLayout (#73) (7c6579d)

3.2.0 (2026-07-26)

Features

  • clipboard/selection API (app.clipboard.read/write) (#69) (b6fe113)
  • line dashes and round caps/joins in the 2d stroke pipeline (#70) (084977b)
  • mouse cursor support via the X11 cursor font (#68) (df9407e)

Bug Fixes

  • bump x11 to ^3.1.1 (#71) (24eadfa)
  • guard setTitle/setActions request chains against a closing client (#63) (1cfe9f9)

3.1.0 (2026-07-26)

Features

  • re-export the yoga-layout instance as Yoga (#58) (cf1f3b9)
  • set UTF-8 window titles via EWMH _NET_WM_NAME (#60) (a260dbe)

Bug Fixes

  • forward X window attributes from createWindow args to CreateWindow (#56) (f353723)

3.0.0 (2026-07-26)

⚠ BREAKING CHANGES

  • the x11 dependency is now ^3.1.0 (major bump of the underlying client)
  • FontFace, ctx.loadFont() and ctx.setFont() are removed; use app.fonts (FontManager), ctx.font and app.fonts.load(). measureText() now returns canvas-style TextMetrics.

Features

  • canvas 2d parity — transforms, save/restore, arcs, Path2D, fill rules, clip, globalAlpha; SvgView widget (c62a60d)
  • coalesce noisy events and pace frames to connection latency (c174336)
  • depend on x11 ^3.1.0 — pure-JS X server (RENDER included) + browser transports; ntk apps run headless or in the browser with no real X server (19d7703)
  • documentation website with live in-browser playground (013b57f)
  • examples: pelican riding a bicycle in the svg-viewer sample scene (af40908)
  • HtmlView static HTML/CSS widget, PNG/JPEG images, yoga-layout (d325529)
  • mermaid diagram rendering in MarkdownView (```mermaid fences) (4e06b5a)
  • pluggable FontSource + environment hooks (browser-bundleable lib) (3ff6199)
  • render GFM tables in MarkdownView (266f3d3)
  • shaped text rendering, TextLayout, markdown widget, double-buffered windows (617c1bd)
  • SVG support in HtmlView — inline <svg> and <img> with SVG sources (cb18d0c)
  • vector text path (#45), KaTeX math widget, highlighted markdown fences (12261cd)

Bug Fixes

  • website: serve playground runner as directory index (d56ea0f)