-
v0.9.0
StableAll checks were successfulCI/CD / detect-changes (push) Successful in 4sCI/CD / test-runners (push) Has been skippedCI/CD / e2e-smoke (push) Has been skippedCI/CD / test-frontend (push) Successful in 5sCI/CD / test-go-pg (push) Successful in 2m46sCI/CD / test-sqlite (push) Successful in 2m57sCI/CD / build-and-deploy (push) Successful in 44sreleased this
2026-04-03 13:15:00 +00:00 | 11 commits to main since this releaseFeatures
- Added multi-surface package support: packages can now declare multiple
surfaceswith 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:trueor the root (/) surface for menu items.
Documentation
- Added comprehensive
MULTI-SURFACE-GUIDE.mdexplaining the new multi-surface package format and usage. - Updated
PACKAGE-FORMAT.mdto document thesurfacesarray structure and deprecate singleroute/layoutfields. - Updated
ROADMAP.mdto reflect completed v0.9.0 multi-surface work and shifted future versions.
Tests
- Added
pages_surface_match_test.gowith 175 lines of tests for surface path matching logic. - Extended
package_validate_test.gowith 151 lines of validation tests for multi-surface packages.
Infrastructure
- Modified
RenderExtensionSurfacehandler to resolve surfaces dynamically, supporting both root and sub-path requests. - Updated
RegisterPageRoutesto handle sub-paths for extension surfaces without requiring restarts. - Extended
PageDatastruct to includeSurfacePathandSurfaceParamsfor template rendering. - Updated package validation (
package_validate.go) to enforce multi-surface manifest structure.
Breaking Changes
- Packages without a
surfacesarray (legacy format) now only serve the root path (/); any non-root requests return 404. - The
routeandlayoutfields at the package root are deprecated in favor of per-surface declarations. - Extension navigation now uses the first
nav:truesurface or root surface; customroutevalues are ignored.
Version bumped to 0.9.0.
Downloads
- Added multi-surface package support: packages can now declare multiple