• v0.9.0 5ad6d77c56

    v0.9.0
    All checks were successful
    CI/CD / detect-changes (push) Successful in 4s
    CI/CD / test-runners (push) Has been skipped
    CI/CD / e2e-smoke (push) Has been skipped
    CI/CD / test-frontend (push) Successful in 5s
    CI/CD / test-go-pg (push) Successful in 2m46s
    CI/CD / test-sqlite (push) Successful in 2m57s
    CI/CD / build-and-deploy (push) Successful in 44s
    Stable

    xcaliber released this 2026-04-03 13:15:00 +00:00 | 11 commits to main since this release

    Features

    • Added multi-surface package support: packages can now declare multiple surfaces with independent paths, titles, layouts, and access controls (public, authenticated, admin, group).
    • Added client-side routing within package surfaces via sw.navigate() and popstate handling for back/forward navigation.
    • Added server-side route matching for package sub-paths (e.g., /s/pkg/monitor/:id) with parameter extraction.
    • Added per-surface access control evaluation, supporting redirects for unauthenticated users and 403 for denied access.
    • Updated extension navigation to use the first surface with nav:true or the root (/) surface for menu items.

    Documentation

    • Added comprehensive MULTI-SURFACE-GUIDE.md explaining the new multi-surface package format and usage.
    • Updated PACKAGE-FORMAT.md to document the surfaces array structure and deprecate single route/layout fields.
    • Updated ROADMAP.md to reflect completed v0.9.0 multi-surface work and shifted future versions.

    Tests

    • Added pages_surface_match_test.go with 175 lines of tests for surface path matching logic.
    • Extended package_validate_test.go with 151 lines of validation tests for multi-surface packages.

    Infrastructure

    • Modified RenderExtensionSurface handler to resolve surfaces dynamically, supporting both root and sub-path requests.
    • Updated RegisterPageRoutes to handle sub-paths for extension surfaces without requiring restarts.
    • Extended PageData struct to include SurfacePath and SurfaceParams for template rendering.
    • Updated package validation (package_validate.go) to enforce multi-surface manifest structure.

    Breaking Changes

    • Packages without a surfaces array (legacy format) now only serve the root path (/); any non-root requests return 404.
    • The route and layout fields at the package root are deprecated in favor of per-surface declarations.
    • Extension navigation now uses the first nav:true surface or root surface; custom route values are ignored.

    Version bumped to 0.9.0.

    Downloads