Skip to content

Releases: moureau-dev/newstack

Newstack v0.0.43

Choose a tag to compare

@mococa mococa released this 10 Apr 23:28

Changelog

[0.0.43] — 2026-04-10

Fixed

  • SSG missing routes inside function component wrappersdiscoverRoutes now expands function components (e.g. <Layout>) and handles Fragment array returns during traversal, so routes declared as children of a wrapper are discovered and their pages are generated at build time.

Full Changelog: newstack-v0.0.42...newstack-v0.0.43

Newstack v0.0.42

Choose a tag to compare

@mococa mococa released this 10 Apr 23:27

Changelog

[0.0.42] — 2026-04-10

Added

  • <head> JSX injection — components can now render <head> blocks directly in JSX to inject scripts, meta tags, links, etc. into document.head. Works on both server (SSR) and client (route changes). Head content is scoped per component, cleaned up when the component stops rendering it, and cached to avoid unnecessary DOM churn on re-renders.
export class Page extends Newstack {
  render() {
    return (
      <>
        <head>
          <script src="https://cdn.example.com/lib.js" />
          <meta name="theme-color" content="#101010" />
        </head>
        <div>...page content...</div>
      </>
    );
  }
}


**Full Changelog**: https://github.com/moureau-dev/newstack/compare/newstack-v0.0.41-retrigger...newstack-v0.0.42

newstack-v0.0.41-retrigger: Support custom port via NEWSTACK_PORT env var

Choose a tag to compare

@mococa mococa released this 10 Apr 14:15
Pass NEWSTACK_PORT to the hono serve call so the dev/SPA server can be
started on a different port without changing code. HMR works without
changes since it connects back on the same origin the page loaded from.

Newstack v0.0.41

Choose a tag to compare

@mococa mococa released this 10 Apr 14:12

Changelog

[0.0.41] — 2026-04-10

Added

  • Configurable port — set NEWSTACK_PORT=4000 to start the server on a custom port. Works for both SSR dev server and SPA dev server. HMR is unaffected since the client connects back on the same origin. Falls back to the default (3000) when unset.

Full Changelog: create-newstack-app-v0.0.24...newstack-v0.0.41

Newstack v0.0.40

Choose a tag to compare

@mococa mococa released this 10 Apr 13:57

Changelog

[0.0.39] — 2026-04-10

Fixed

  • Navigation throttle warningpatchLinks was called on every renderRoute, stacking a new document click listener on each navigation. After a few route changes the browser's flood protection kicked in (Throttling navigation to prevent the browser from hanging). Moved to start() so the delegated listener is registered exactly once for the lifetime of the app.

Full Changelog: create-newstack-app-v0.0.24...newstack-v0.0.40

Newstack v0.0.39

Choose a tag to compare

@mococa mococa released this 10 Apr 13:35

Changelog

[0.0.39] — 2026-04-10

Added

  • event on context — event handlers using the on*={this.method} shorthand now receive the triggering DOM event as context.event, so it can be destructured directly: onclick({ event }) { console.log(event.target) }. The second parameter still works for backwards compatibility.

Full Changelog: newstack-v0.0.38...newstack-v0.0.39

Newstack v0.0.38

Choose a tag to compare

@mococa mococa released this 10 Apr 13:22

Changelog

[0.0.38] — 2026-04-10

Fixed

  • Dynamically rendered links not interceptedpatchLinks was using querySelectorAll("a") at render time, so any <a> tags added to the DOM later (via reactive state changes, timeouts, etc.) were never patched and would trigger full page reloads instead of client-side navigation. Replaced with a single delegated click listener on document using .closest("a"), which covers all anchors regardless of when they were inserted and correctly handles clicks on child elements inside an anchor.

Full Changelog: newstack-v0.0.37...newstack-v0.0.38

Newstack v0.0.37

Choose a tag to compare

@mococa mococa released this 10 Apr 13:06

Changelog

[0.0.37] — 2026-04-10

Fixed

  • Reactivity broken by context auto-inject — the proxy get handler was wrapping constructor and other static-property-bearing functions, returning a plain arrow function with no .hash. This caused componentElements.get() to always miss and updateComponent to silently bail on every state change, effectively killing all reactivity. The wrapper now skips constructor and any function already carrying a .hash property, and only injects context when the caller explicitly passes a plain object as the first argument.

Full Changelog: newstack-v0.0.36...newstack-v0.0.37

Newstack v0.0.36

Choose a tag to compare

@mococa mococa released this 10 Apr 12:50

Changelog

[0.0.36] — 2026-04-10

Fixed

  • target="_blank" links not openingpatchLinks was calling e.preventDefault() unconditionally on every <a> tag. It now skips interception for external URLs, target="_blank/_parent/_top", hash links, mailto:, and tel: hrefs, letting the browser handle them normally.

Full Changelog: newstack-v0.0.35...newstack-v0.0.36

Newstack v0.0.35

Choose a tag to compare

@mococa mococa released this 10 Apr 12:34

Changelog

[0.0.35] — 2026-04-10

Fixed

  • Function components not traversed during visible-hash setupsetupDefaultVisibleHashes now calls function components (e.g. Layout) during traversal and handles array returns (Fragment), so class components inside them are correctly marked visible and rendered during SSR.
  • SSG route discovery missing routes inside function component wrappersdiscoverRoutes in the build manager now expands function components, so routes declared as children of a <Layout> wrapper are discovered and their pages are generated.

Full Changelog: newstack-v0.0.34...newstack-v0.0.35