Repository navigation
v6.6.0
Highlights
@byline/cli— The starter templates now follow the reference application's block conventions. Two changes land together. The example photo block's layout option was renamed fromdisplaytoposition, matching the reference application and letting a block serializer be copied between the two without edits; the schema, the public renderer and the docs seed all carried the old name, and the seed in particular was writingdisplay: 'wide', which a scaffolded app would have read back asposition: undefinedand silently rendered with the default layout. Separately,render-blocks.tsxis no longer aswitchbut a_type-keyed registry whoseBlockRegistrymapped type requires an entry for every member of thePopulatedContentBlockunion — adding a block to a collection'scontentfield without writing a renderer is now a compile error in the scaffolded app rather than a hole in a rendered page. The runtime unsupported-block report is kept, because compile-time exhaustiveness cannot cover a document written by a different deployment. The overlay typeWithPopulatedPhotoBlockContentwas renamedWithPopulatedBlockContentand generalised toPopulateBlockRelations, one arm per relational block, since the old name stopped being accurate the moment a second relational block appeared. These templates are copied once atbyline init, so an existing application is untouched; only newly scaffolded apps differ.
Bug Fixes
-
@byline/cli—byline setupno longer rejects an application that is simply not on the newest release. The supported dependency range was derived from the CLI's own exact version, so a 6.5.0 CLI computed>=6.5.0 <7.0.0-0and refused an application declaring^6.4.0— a perfectly valid Byline 6 install — with "core@byline/*packages are missing or declare an incompatible range". Becausenpx @byline/clialways fetches the newest CLI, this affected every application that was even one release behind, and each publish silently ratcheted the floor up to itself. Acceptance now spans the whole major line (>=6.0.0 <7.0.0-0), which is the unit the@byline/*packages release in lockstep within. Installing and accepting are deliberately different ranges: a fresh install still pins^<cli version>, since there is no reason to scaffold onto anything but the current release. Note that the check still reads the range declared inpackage.jsonrather than the resolved install, so an unbounded range such as>=6.0.0remains rejected for admitting the next major. -
@byline/cli— The database login prompt no longer reads as a Byline admin role. Duringbyline setupthe prompt saidApplication roleon PostgreSQL, which collides with Byline's own first-class admin roles —byline_admin_roles, the roles screen and theadmin.roles.*abilities — so it read as naming a permission role inside the CMS rather than a database login. Nothing in the prompt said it was a database login, that the running application connects as it, or that it is created when absent. It now states all three, and the adjacent password prompt was reworded from "application user" to "database login" so the two consecutive questions are plainly about one subject.
Chores
- monorepo — Playwright and the dormant end-to-end suite were removed:
apps/webapp/e2e,playwright.config.ts, thetest:e2escripts, the@playwright/testdependency, the Knip globs and the.gitignoreentries. The suite was not referenced by CI and not part of the workflow, but its artefacts kept reading as live coverage. Browser verification is by hand against a running dev server;docs/13-testing.mdnow documents that, and the hand-written manual scripts (which were never Playwright) moved toapps/webapp/tests/manual/. The route-level checks onsitemap.xml, the.mdrepresentations andllms.txtwent with the specs — the serialization format those expose is still unit-pinned in@byline/coreand@byline/richtext-lexical, and theAccept: text/markdownnegotiation rule in the webapp's own tests, but locale prefixing, caching headers and the redirect itself are now unpinned. - reference application — The example application gained self-hosted video as a worked example: a
videoscollection carrying both an encoded video file and a required poster image, avideoBlockwith an optional lower-resolution mobile source, and avideoEmbedBlockfor YouTube and Vimeo with a live thumbnail preview in the admin URL field. The poster's variant set deliberately includes a WebPposteralongside the AVIF variants, because<video poster>takes a single URL and cannot negotiate format — an AVIF-only poster renders as nothing below Safari 16.4. A sharedstyles/blocks/layer adds block rhythm, media caption styling and editorial full-bleed for full-width blocks. None of this ships in a package; it is reference material for applications building the same thing.
All other @byline/* packages bumped to 6.6.0 in lockstep with no behavioural changes this cycle.