Core release notes
Every published CitePress version
0.18.2
Current
28 Sep 2026
The Panel moves to panel.citepress.org.
~This site now reaches the Panel at panel.citepress.org. A site connected to the old default, panel.buldrr.com, is repointed on upgrade; a Panel address set by hand is left alone. panel.buldrr.com keeps working meanwhile.
0.18.1
Superseded
22 Sep 2026
Fixes a hydration error on every page with a head snippet, and makes FAQs, templates and scripts in code pages behave.
~A head snippet is placed in <head> as real elements. It was wrapped in a <div>, which the browser moved into the body, so every page with one threw a hydration error and was re-rendered in the browser. That also printed plugin site tags twice. Markup a head cannot hold is now left out and reported on the Snippets screen.
~A template or page script that mentions <head>, <body> or <title>, even in a comment, is no longer cut short.
~A <template> in a code page or template keeps its content, so scripts that clone it find the card.
~A <bc-faq> in a code page or template adds FAQPage structured data. Tokens inside it resolve, and a question or answer left empty is skipped. A page gets one FAQPage however many FAQs it has.
~wordCount counts the words in HTML blocks.
+SoftwareApplication is a schema type you can choose. HowTo is no longer offered, because it needs steps nothing here writes; pages and rules already set to it keep it.
~A plugin secret setting holds up to 8 KB, enough for a whole Google service-account key.
~Archive, term, author, date and search templates apply wherever the site actually shows those pages.
0.18.0
Superseded
22 Sep 2026
Plugins can draw their own admin screens, and choose where their content types sit in the menu.
+A plugin screen can be the plugin’s own page: HTML, CSS and JavaScript from its ui/ folder, in a sealed frame that cannot read the admin or its session. The page talks to the plugin’s server code through citepress.call() and the new admin.api hook.
+A plugin decides where each of its content types is listed: under CONTENT, under its own sidebar entry, or off the menu.
~An admin address that names nothing (a deleted user, a mistyped item, an undeclared plugin section) answers a real 404 again, not a 200 with a not-found page.
~The plugin developer guide documents pages of your own, and no longer says require and the database are unavailable to plugin code.
0.17.3
Superseded
21 Sep 2026
Installable from 0.16.0: the date and author tokens of 0.17.2, for sites that could not reach it.
!0.17.1 and 0.17.2 could only be installed from the release just before them, so a site two releases behind was refused. This is 0.17.2 unchanged, installable from 0.16.0 or newer. All migrations in between run on install.
+From 0.17.2: {{ post.updated }} and {{ item.updated }}, _iso forms of every date token, and article:modified_time on pages.
+From 0.17.2: author profiles gain designation, LinkedIn and a booking link, read by {{ post.author.name }}, .designation, .bio, .avatar, .url, .linkedin and .booking.
+From 0.17.1: each template previews on a page its own conditions pick; fields can be sortable list columns; code-built pages no longer show as blocks; empty pages open as Next.js.
0.17.2
Superseded
21 Sep 2026
Templates can show a last-modified date and an author box from each author’s profile.
+Templates can show when an item was last modified: {{ post.updated }}, and {{ item.updated }} in a loop. An imported item shows the old site’s modified date. Every date token has an _iso form for <time datetime>, and pages carry article:modified_time.
+User profiles have a designation, a LinkedIn link and a booking link, beside the bio, website and photo. Templates read them as {{ post.author.name }}, .designation, .bio, .avatar, .url, .linkedin and .booking. A blank field renders as nothing, so a template can hide its line.
~Saving a profile refreshes cached pages, so a changed name or bio appears straight away.
~An author imported from a WordPress site’s REST API brings their bio and website.
0.17.1
Superseded
21 Sep 2026
Templates preview on their own pages, and fields can be sortable columns in the content list.
!Each template previews on a page its own conditions pick. Single templates no longer open the newest page, and archive templates no longer all open the first archive. When a published page shares an archive’s address, the preview button says so.
!A page built in the code editor no longer shows its markup as blocks. The block editor offers to continue in the code editor or switch to blocks.
~A new, empty page opens in the code editor as Next.js (React). Switch to HTML sits beside the HTML, CSS and JS tabs. A page that already has blocks still opens as HTML.
+A field can be shown as a column in its content list, and sorted by. Numbers sort as numbers and empty values go last. The table scrolls sideways when the columns outgrow the screen.
~The content type builder keeps a field’s settings and the type’s settings in separate tabs. Fields have their own Delete button, and Add field is at the top of the list.
!A section using the scroll fade-in at the very end of a page now appears. It used to stay blank.
0.17.0
Superseded
21 Sep 2026
WordPress imports that need no editing first, and inline SVG that keeps its viewBox.
!Large WordPress exports import in one piece. The upload no longer passes through the 10 MB request limit that cut a 35 MB file off mid-way; the size limit is stated on the screen, and a .xml.gz is accepted.
!Terms that a custom post type export carries only on its items are created and attached, and a taxonomy spelled event-category is matched to one keyed event_category.
!Imported items keep the date they were published and last modified on the old site, even when imported as drafts — and publishing in bulk no longer replaces a publish date that is already there.
+Every imported item remembers its id on the old site. It is searchable, returned by the API, and what a re-import matches on, so running a file again updates instead of copying — drafts included.
+An import can bring across only published items, only drafts, or only private ones.
+Links to the old site’s own address become paths on this one. Uploads are left alone.
+Canonical URL, nofollow, and Open Graph title, description and image are read from Yoast and Rank Math. A value that is still a template, like %title% %sep% %sitename%, is left for this site’s default.
~Characters XML does not allow are removed instead of the whole file being refused, and the scan names the items they were in.
!Inline SVG in page and template code keeps viewBox, linearGradient and the other case-sensitive names, so icons are no longer cropped.
0.16.1
Superseded
07 Sep 2026
An update from the Panel no longer fails on a checksum that moved after it was offered.
!Installing an update read the release stored by the Updates screen’s own Check now, not the one the most recent check-in brought back. If a release was replaced after being offered, the install failed on its checksum — and pressing Check in now on the Panel screen, which really does reach the Panel, did not clear it. A connected site now installs the offer its latest check-in carried, whichever button fetched it.
~A release that fails its checksum now names the button that fetches the current one, and the screen it is on.
~Installs directly onto any earlier version.
0.16.0
Superseded
07 Sep 2026
Updates that apply cleanly, and one key instead of two.
!Updates unpack with the permissions the archive records, so the Prisma schema engine can start and a migration can finish
+Activating a licence also connects the install to the Panel — one key instead of two, and nothing to paste
+A crash that has been fixed reports its resolution, so it stops showing as live
~middleware.ts is now proxy.ts, and the runtime is no longer requested explicitly
!The preview asks for the real page instead of drawing its own
!A version bump reaches all four files that repeat it