A new API that lets Curvenote SCMS extensions contribute their own rows to the work-version timeline. Alongside it, deployers get a real hand on dashboard task layout, and Curvenote-hosted sites open on the submissions listing with a refreshed submission details page.
Extensions get first-class rows in the work timeline. Curvenote SCMS extensions can now register ExtensionTimelineItem descriptors and have them rendered alongside the built-in kinds on the work-version timeline.
Deployers control dashboard task sections, and Check My Work carries a NEW badge. The dashboard now takes a dashboard.tasks.sections config: each section names a heading, a set of task categories to include, and an optional ordered list of task ids to pin. Unlisted eligible tasks append after in alphabetical order. Task ids come from each extension’s task definitions and from any built-in tasks the deployer opts in. On the dashboard itself, the Check My Work task card now carries a small green NEW badge in its top-right corner, so operators can flag freshly added tasks to their contributors at a glance.
Figure 1:A deployer-configured task section on the dashboard: the heading, which tasks appear, and their order all come from config, and recently added cards carry a green NEW badge.
Sites open on the submissions listing. Visitors landing on a Curvenote-hosted site are now taken straight to the submissions listing instead of the older inbox placeholder, so the first click already shows the site’s queue.
A refreshed site-admin submission details page. The submission details page opens with a scannable summary card — title, authors, description, DOI, published date — replacing the older social-media card. Collection, kind, slug, and publication-date edits move out of ad-hoc popovers into confirmable dialogs behind a shared editor shell, so accidental attribute or slug changes are caught before they land. Kind editing now stays safe when the current collection is missing, and the details card carries an inline status banner for the submission’s state.
Figure 2:The refreshed submission details page leads with a scannable summary card and an inline status banner, then lists the editable attributes — publication date, collection, kind, slug, and DOI — each behind a confirmable dialog, with the version timeline underneath.
Sites can now ship their own render plugins reaching the Curvenote CLI, Curvenote Theme, and the Reader together, so a site can customize how its content renders without a theme rebuild. Alongside that, Curvenote SCMS now runs end-to-end against a local S3-compatible storage stack out of the box, and Curvenote Theme picks up two article-layout options that make content-grid and centered-logo choices selectable from config for the first time.
Curvenote SCMS runs fully local, out of the box. The stack now boots end-to-end against a local S3-compatible object store, so contributors and operators evaluating Curvenote SCMS can bring the whole system up on a fresh clone without cloud credentials. Signed upload URLs and content-delivery reads route through a browser-reachable endpoint, and a shared bucket-resolution helper makes sure that files copied between public and private buckets after upload still sign against the right host.
Base-platform hooks for a new Foundry extension. Curvenote SCMS gains the platform pieces an extension needs to run a scoped upload wizard: richer descriptions in the Create Work dropdown, a resume-draft route so an extension can pick up a partially uploaded work, and an optional path filter on document-preview fetches so a wizard can request a main-manuscript-only preview without changing behavior for anything else.
A coordinated ecosystem security upgrade across Curvenote SCMS and the Curvenote CLI clears a batch of open security advisories together, and lifts the shared routing, token, and validation libraries onto aligned versions so future dependency updates land in one place instead of split across packages.
Backmatter and the “On this page” outline read from one table. The list of backmatter sections — with each section’s anchor, title, visibility, and design gating — is now the single source of truth for both the outline and the Backmatter component, so the two can no longer drift out of sync. Two bugs come out with it: a footnote-reference that had no matching footnote definition no longer reports a footnotes section that will not actually render, and abbreviations declared in frontmatter are now detected in the no-argument callers where they were previously missed.
Figure 1:The “On this page” outline and the Backmatter component now read from the same table, so sections like Acknowledgements, Footnotes, Abbreviations, and References are now also listed.
This section covers work on the openRxiv Reader, part of openRxiv Labs — the openRxiv preprint reader powered by Curvenote Reader.
JATS ingestion gets more forgiving. Article subjects are now normalized consistently across the JATS conversion pipeline, and articles that use a bare <table> element (without a <table-wrap> parent) are now ingested cleanly — fixing article rendering for JATS documents that don’t wrap tables the “standard” way.
Cold-start and route-bundle fixes. The openRxiv Reader now loads its own app configuration before the runtime tries to resolve it (fixing an intermittent cold-start crash).
Sites can ship their own render plugins. Curvenote Theme now loads site-declared render plugins at page load, keeps them across configuration reloads, and rewrites plugin URLs locally against the site’s content-delivery origin — so a site operator can drop in a customized renderer for a directive or a figure type without a theme rebuild. See documentation on adding a render plugin to a site for the details.
Figure 2:A fancy-note directive drawn by a renderer the site ships itself: the body is ordinary MyST, while the badge, frame, and striped background come entirely from the site’s own plugin.
Two design options reshape article layout. A new content_grid option makes the article-grid variants — default (with a margin column), centered, and left-pinned — selectable from a site’s design configuration. A companion center_nav_logo option lifts the site logo out of the header flow and centers it, with nav links moved to the left so they cannot collide with it.
Buttons render with a pointer cursor again. A recent regression in the underlying design system’s preflight stripped the pointer cursor from every unstyled button; the shared button base now sets it once so every button in every Curvenote theme shows the right cursor.
Anonymous curvenote start and curvenote build. The Curvenote CLI no longer requires a login token to run curvenote start or curvenote build, so continuous-integration jobs and first-time users can preview and build a Curvenote site on a fresh install without an account.
Site-shipped render plugins on the CLI side. The CLI bundles a site’s own render plugins as part of build, start, and deploy — with an incremental cache that skips rebundling when the source graph has not changed, and a soft-fail path that continues the build with a clear error if a plugin cannot be emitted.
Preview cookies in Curvenote Theme are now bounded, self-pruning, and scoped only to preview routes, so heavy review sessions no longer accumulate cookies until the browser’s request-header limit rejects the next click. Alongside that, the openRxiv Labs reader gates its cross-reference JSON endpoint against casual scraping without breaking hover cards, JATS ingestion picks up more of the metadata real preprints ship with, and Curvenote Reader stabilizes figure caption “Show more” and the Jupyter Play icon.
Steadier figure captions and cleaner Jupyter previews. Figure caption “Show more” no longer flickers at the truncation edge, and the toggle no longer appears for short captions that contain inline math — so long captions expand cleanly and short captions stop offering a control they don’t need. Embedded Jupyter previews also render a stable Play icon: the server-rendered markup and the client-hydrated markup now match, so the icon no longer briefly redraws itself on load.
Figure 1:A long figure caption expands and collapses in place: “Show more” holds steady at the truncation edge, so readers can open the full caption without the control flickering under the cursor.
The openRxiv Labs reader (https://reader.openrxivlabs.org), which serves bioRxiv and medRxiv, is built on Curvenote Reader. Updates here reach real readers on those sites.
The article JSON endpoint stops being a scrape target. The article JSON endpoint that powers hover-card cross-references is now gated. Scripted fetch() calls from hover cards and identified Curvenote clients continue to be served, while top-level navigation (pasting the .json URL into the address bar) and bare HTTP clients get a 403.
JATS ingestion covers more of what real preprints ship with. The JATS pipeline now handles additional author-email shapes and the equal_contributor attribute on contributor blocks, normalizes subject strings so downstream faceting sees a consistent form regardless of source-XML variation, and accepts tables that appear outside a <table-wrap> container instead of dropping them. The net effect is that more preprints render correctly on first ingest, with fewer authors missing metadata and fewer articles missing tables.
Preview links stop silently locking editors out. Editors reviewing many submissions used to accumulate one preview cookie per work, and the browser’s per-domain cookie limit would eventually reject the request before it reached Theme — a hard-to-diagnose failure that only surfaced after enough previews had been opened. Preview cookies now expire with the token they carry, are scoped to the caller’s preview route prefix so they no longer ride along on unrelated asset requests, and are capped per browser under an LRU policy. The cap defaults to a sensible fifteen and can be tuned per site via auth.preview.cookieLimit in the app config.