Repository navigation
Releases
Template kit 1.6.3: the preview requests one font stylesheet per family
Fixed
- The preview loads each of a template's fonts from its own Bunny Fonts stylesheet. It used to
ask for the heading and body families in one request, and Bunny answers that request from a
cache keyed on its first family, so the second family often came back as a different one
(Figtree as Inter, Inter as IBM Plex Sans): the preview, and the gallery posters drawn from it,
showed body text in a fallback face. A template's ownfontsURL with several families is
split the same way, one request per family, keeping its other parameters.
Compatibility and release
No contract change: templates validate exactly as before and need no edits. The fix is in the
vendored preview renderers (src/vendor/validator/fonts.mjs, preview-v1.mjs, preview-v2.mjs),
matching the platform's live pages, which already request one stylesheet per family. Publish
through the mirror's GitHub Release workflow; the matching platform change is
multi-tenant-services #380, live since 2 November 2026.
Template kit 1.6.2: every option accepts the --name=value form
Changed
- Every option accepts
--name=valueas well as--name value: the kit's argument parser splits
a joined option on its first equals sign, so--host=0.0.0.0binds the preview to the network
the way--host 0.0.0.0does, and--out=distis the same as--out dist. Before this, a
joined option was read as a flag whose name included the value and the value was lost. The hint
thatdevprinted for--host=addressis gone because the form now works; a bare--host
still stops with the hint. The parser lives insrc/lib/args.mjswith its own tests.
Compatibility and release
No contract change: templates validate and preview as before, and every spaced option behaves as
it did. Nothing on the platform side is needed for the joined form. Publish through the mirror's
GitHub Release workflow; the matching platform change is multi-tenant-services #356.
Template kit 1.6.1: the sign-in opener and the dev preview bind
Changed
p60-template-kit loginopens the sign-in page only when the address the platform returned is
https:, and never through a shell: on Windows it hands the address torundll32 url.dll,FileProtocolHandleras one argument, elsewhere toopenorxdg-open. Any other
address is left as the printed link.p60-template-kit devlistens on 127.0.0.1 unless--hostsays otherwise (--host 0.0.0.0
opens the preview to the network, for a look on a phone), and says so when it is not the
loopback address. A bare--host, or--host=address, stops with a hint instead of binding
loopback in silence.
Compatibility and release
No contract change: templates validate and preview as before. A developer who relied on the
preview being reachable from another device passes --host 0.0.0.0. Publish through the mirror's
GitHub Release workflow after the matching platform release (multi-tenant-services #351, the
2026-10-18 audit's L-01 and L-04) is live.
Template kit 1.6.0: the theme CSS boundary
Changed
- The validator refuses a closing style tag in any
.cssentry. The platform inlines
assets/theme.cssinto the page's style element, so a</stylein the theme would end that
element and whatever followed would be parsed as markup. The upload intake refuses the same. - The inline event handler check treats a slash or a quote before
on*=as an attribute
boundary, as the HTML parser does, so<img src="x"/onerror=...>and<img src="x"onerror=...>
are refused like<img src="x" onerror=...>. - The preview renderers inline the theme through
inertInlineCss
(src/vendor/engine/inline-style.mjs), which escapes</as<\/: no change to the meaning
of valid CSS, and a theme can never close the element it is inlined into, in a preview or on
the platform.
Compatibility and release
Stricter validation only: a template whose theme carries no closing style tag and whose markup
places no event handler attribute is unaffected, and every Port60 template validates unchanged.
Publish through the mirror's GitHub Release workflow after the matching platform release
(multi-tenant-services #343, the 2026-10-18 audit's H-04) is live.
Template kit 1.5.0: form placements
Added
- The
formsection: a placement (Home and About) that names a form the organisation built
in Forms through the Pages editor. The section storesformId,formInstanceIdand
formSlug; theformisland renders the instance the slug addresses with the respondent
fields, the questions, the privacy line and the submit. The island's styling API is the
renderer'sp60-form-*classes. The validator accepts the section or the island for the
formscapability; the preview renders the form fixture only for a matchingformSlug. - The starter ships
sections/form.liquidand declares the section and the island. - Content bounds record the 200-character plain-text biography limit on People sections.
Fixed
- The starter renders complete biographies with line breaks and wrapping instead of italics.
- Authored output escaping replaces NUL characters so a stored control character cannot
reach a rendered page.
Compatibility and release
Additive: the section catalogue, manifest schema (sectionPresentation and
sectionHeadingAlignment accept form, at most 17 entries) and the form island entry grow;
nothing existing changes. Templates that do not ship sections/form.liquid are unaffected: the
editor marks a placed form section not visible and the public page skips it. Publish through
the mirror's GitHub Release workflow after the matching platform release
(multi-tenant-services #329) is live.
Template kit 1.4.1
Template kit 1.4.1
Synchronises developer previews with the platform SEO/accessibility release:
- Shared enrolment access-panel spacing, wrapping and keyboard focus.
- Correct event heading hierarchy and shared map target presentation.
- Platform-owned prose contrast without duplicated opacity reduction.
- Regression coverage for preview stylesheet and embedding parity.
No template contract or manifest changes. Existing first-party templates remain
compatible with kit 1.4.0. This patch changes developer-preview styling and does
not publish tenant content or select a new template for an existing website.
Verified in PR #10: 59 tests passed, package dry run passed, and the vendored
stylesheet matches the platform source.
Platform release: Port60Labs/multi-tenant-services#322
Kit changes: #10
Template Kit 1.4.0: Authored Navigation Styles
Authored navigation styles
Template Kit 1.4.0 matches the deployed platform navigation release (multi-tenant-services PR 305).
- Declare a suitable subset of Dropdown, Side-opening, Wide dropdown and Menu panel, with a template-owned default.
- Use shared direction-aware flyouts, viewport-edge reversal, stable pointer travel and keyboard/scroll handling without template JavaScript.
- Keep existing two-mode artifacts, navigation content and historical v1 contracts intact.
- Preview fallback-page titles now use the platform's heading hook.
The mirror source matches the reviewed platform; all 54 local kit tests pass. Release through the existing npm trusted-publishing workflow, then validate first-party templates with this registry package before publication. No automatic tenant upgrade is performed.
Template Kit 1.3.0: Editor Design Flexibility
Editor Design Flexibility
Requires the compatible platform deployed from multi-tenant-services PR281.
- Exact author-bounded heading sizes, section spacing, image overlays, colour treatments and layouts.
- Optional introduction photographs and shared Header/Footer presentation groups.
- Matching preview lifecycle, explicit map selection and fail-closed capability validation.
- Updated developer guidance, scaffold and conformance tests.
- Patched fast-uri dependency.
Full kit tests and CodeQL pass. Historical v1 contracts and existing immutable template releases are preserved.
First-party templates are released separately after registry consumer verification. This package does not upgrade tenant template selections or publish website drafts.
Template kit 1.2.1
Adds the compatible host-owned hero playback hook and designer preview geometry for photo-only carousels. Templates can reveal playback on hover or keyboard focus while keeping it available on touch devices. Existing campaign carousels and the v1 contract are unchanged. The supporting platform deployment has completed. Published by the repository's npm trusted-publishing workflow.
1.2.0: editor presentation capabilities
Editor presentation capabilities
This release matches the deployed Port60 host from multi-tenant-services PR #250.
- Explicit per-section heading alignment with bounded desktop placement.
- Declared Simple/Mega header navigation modes without changing the menu tree.
- Optional visibility controls for existing collection links.
- Exact-version hero photograph capacity, including rendered conformance checks.
- Matching previews, scaffold metadata and generated agent guidance.
These controls require template opt-in and working rendering. Missing capabilities do not
silently enable controls; historical template versions and saved photographs are preserved.
The visitor language switch remains dormant while organisation language/RTL support stays intact.
The source mirrors the reviewed platform kit. Dependencies, OIDC publishing and historical v1
contracts are unchanged. Kit tests, package inspection and release CI pass.
First-party templates will adopt this registry release in a separate immutable release.