@ciderpress/config
1.0.0-rc.13
Minor Changes
- 601f2d2: Add validated client-side redirects for moved documentation routes.
Patch Changes
- f76385d: Reduce install size by removing unused dependencies from the CLI, config, theme, and UI packages.
- Updated dependencies [f76385d]
- @ciderpress/theme@1.0.0-rc.8
1.0.0-rc.12
Patch Changes
- c65bb52: Keep Ciderpress compatible with current documentation tooling while preserving CLI option discovery and parsing across commands.
- Updated dependencies [c65bb52]
- @ciderpress/theme@1.0.0-rc.7
1.0.0-rc.11
Minor Changes
- 45204fb: Add
home.hero.backgroundwith string, fixed-contrast, and light/dark variant forms plus responsive image sources. When it is not set,brand.bannersupports both static image paths and runtime React backgrounds such as canvas, WebGL, and inline SVG components. - 45204fb: Proof-strip logos accept
{ dark, light }source variants and switch artwork with the active site variant.
1.0.0-rc.10
Major Changes
-
Rename to
ciderpress. The project moved to thethebytefarmorg and the kit now lives at the unscopedciderpresspackage name (replacing@zpress/kit).Consumer migration:
@zpress/cli→@ciderpress/cli@zpress/config→@ciderpress/config@zpress/ui→@ciderpress/ui@zpress/theme→@ciderpress/theme@zpress/templates→@ciderpress/templates@zpress/kit→ciderpress(unscoped)zpress.config.ts→ciderpress.config.ts- Window globals:
__ZPRESS_*__→__CIDERPRESS_*__ - CSS vars:
--zp-*→--cp-*
The
@zpress/*packages are not republished —@ciderpress/*starts fresh at this version. Tagline: press your docs. -
ciderpress 1.0 — release candidate
This is a major release that locks the v1 public API. Headline changes:
Theme system
- Replaced the built-in
basetheme with apple-named built-ins:honeycrisp(red, dark + light — the canonical brand),grannysmith(green, dark + light),midnight(deep dark blue, dark only), andarcade(neon green, dark only). The legacy slug'default'aliases to'honeycrisp'viaTHEME_ALIASES. - Replaced
theme.colorModewiththeme.variant(values:'dark' | 'light'). The'toggle'value is no longer supported — themes that declare both variants always show the toggle; themes that declare one hide it. defineTheme()input shape changed from{ name, tokens, modes, defaultMode }to{ name, variants: { dark?, light? }, defaultVariant? }. The factory validates the envelope before parsing token trees so error messages now point at the offending input field.ciderpress,@ciderpress/core, and@ciderpress/configno longer re-exportColorMode,ThemeMode,COLOR_MODES, orresolveDefaultColorMode. UseThemeVariant,THEME_VARIANTS, andresolveDefaultVariantfrom@ciderpress/theme. The deprecated aliases remain in@ciderpress/themeitself for one-version migration safety.
Config surface
Frontmatteris now strict — unknown keys are rejected at config load and produce a typed compile-time error. On-disk markdown frontmatter is unaffected (gray-matter never typed it asFrontmatter).- Renamed
WorkspaceCategory→WorkspaceGroup. Theconfig.workspacesfield name is unchanged. - Every field on
CiderpressConfigand its sub-types now has solid JSDoc that propagates to IDE hover docs. - Tightened the CLI
--color-modeschema fromstringtoenum('dark', 'light').
Dependency hygiene
- Removed
gray-matter(last released 2021, drags in the abandonedjs-yaml@3line with known prototype-pollution CVEs). Replaced with a ~25-lineparse/stringifyhelper built onyaml(eemeli/yaml). - Removed unused
js-yamland@types/js-yamldirect deps from@ciderpress/core.
Fixes
safe-url.tsregex now stores its control-character range as Unicode escape sequences (\u0000–\u007F) instead of raw control bytes. Git no longer marks the file as binary; editors render it correctly.- Deleted orphaned
packages/ui/src/head/js/color-mode-{dark,light}.js. - Hardened variant resolution across the head IIFE, theme provider, and theme switcher with cross-reference comments and a re-entrancy guard on the MutationObserver snap-back.
Migration
- Replaced the built-in
Minor Changes
-
Add config-driven document templates.
Templates can now be authored as plain
.md/.mdxfiles withlabel/hintfrontmatter, discovered from directories declared via the newtemplatesconfig field. A custom template whose filename matches a built-in overrides it, and.mdxtemplates scaffold to.mdx.@ciderpress/config— newtemplates?: string | string[]field.@ciderpress/templates— newbuildTemplate()validator andTemplateErrortype;Templategains an optionalextensionfield. Built-in template files renamed from.liquidto.md(no behavior change).@ciderpress/cli— newciderpress templates listandciderpress templates checkcommands; template validation folded intociderpress checkandciderpress build;ciderpress draftnow discovers config templates and preserves the template's extension.
-
Fix: the navbar fallback no longer overrides the auto-generated
/logo.svgwith the hardcoded<CiderpressLogo />wordmark. Whenlogois omitted, the nav now shows the SVG written to the public dir by the banner module (derived fromtitle). Sites that committed their ownpublic/logo.svgalready won this round; sites that didn't were silently getting the ciderpress wordmark.The themed wordmark is still available as an opt-in:
New: two top-level config fields for overriding auto-generated asset paths.
banner?: string— hero image used on the home page and workspace landing pages. Defaults to/banner.svg.favicon?: string— favicon path. Defaults to/icon.svg. Distinct fromicon(the Iconify id for the inline topbar mark).
Auto-generation and the
<!-- ciderpress-generated -->marker still carry the default case — these fields are only needed to point at a different filename or a CDN URL. -
Add
feedbackconfig to toggle the "Was this page helpful?" widget.The widget is off by default. Set
feedback: trueto enable it with the default question, orfeedback: { question: '...' }to enable it with custom text.@ciderpress/config— newfeedback?: boolean | FeedbackConfigfield onCiderpressConfig, with an exportedFeedbackConfigtype.@ciderpress/ui—SiteBlockandCiderpressSiteBlockgain afeedback: { enabled, question }field;Layoutrenders<Feedback />only when feedback is enabled.
-
Full custom branding. Every brand surface on a ciderpress site is now user-overridable, plus the home page can be reordered and have sections suppressed without writing custom MDX.
Topbar icon chip
config.iconnow actually renders — a small chip painted by<HeaderIcon />immediately before<HeaderLogo />insidecp-header-logo. Pair withlogofor the canonical two-slot identity (small mark + wordmark). Accepts the sameIconConfigunion as cards.Loader
config.loaderaccepts four forms:A fallback dismissal timer in the inline head script guarantees
data-cp-readyflips even when the React bundle never hydrates (static dist over plain http with no service worker). Cross-field validation rejects configs wheremaxDisplayMs < minDisplayMs + 200.Favicon
Setting
favicondisables the runtime favicon retinting that otherwise swaps<link rel="icon">to a themed pixel-apple data URI. The optionaltypefield emits a second<link rel="icon" type="...">so extension-less URLs still resolve to the right MIME.Icons broadened
The image form is honoured on the topbar icon chip, workspace cards, section cards, feature cards, and sidebar links.
Home page — section opt-outs and customisation
Home page — section order
home.layoutcontrols render order and visibility. Omit a section from the array to suppress it. Default is['hero', 'trust', 'features', 'split', 'workspaces', 'cta'].The schema rejects duplicates and unknown ids.
Home page — full custom MDX
For full control (custom sections, JSX in arbitrary positions), add a section that mounts at
/and write your own MDX. The sync engine detects an explicitindex.mdand skips the auto-generated home page. All home components are importable from@ciderpress/ui/theme.Footer brand mark
The site footer no longer falls back to the ciderpress apple. When
site.footer.brandMarkis omitted, the chip renders<img src="/icon.svg">— your custom mark or the auto-generated one derived fromconfig.title.Security + correctness
- CSS
</style>injection blocked inloader.labelandloader.content—<is hex-escaped (\3c) so the byte sequence</style>never appears in the inline<style>tag. escapeJsxPropnow escapes backslash, blocking trailing-backslash escapes in image-form iconsrc/alt.- Empty
src: ''rejected at the schema layer. - Layouts short-circuit on
import.meta.env.SSG_MDso the Copy-Markdown button no longer pulls topbar logo / search button / nav items into every copied page.
Acme example
The
examples/custom/directory ships a realistic mid-size product docs site (Acme Corp) that exercises every new field — custom logo, favicon, dashboard-style hero demo, custom split, reordered sections, six feature cards, three workspace items, a three-column footer. Verified: zero "ciderpress" strings in the rendered HTML.Run
pnpm example:custom,pnpm example:custom:build, orpnpm example:custom:serve. - CSS
-
Make group badges consistent across every surface, and restructure the
badgesconfig.A collapsible group that is also a doc (a nav row that both toggles children and links to a page) previously hid its badge in the sidebar but still rendered it in the breadcrumb and section cards — so a group badge showed in some places but not others, unlike a normal page. Suppression is now uniform: when a group's badge is hidden, it's hidden on the sidebar, breadcrumb, and cards together; when enabled, it surfaces everywhere at once.
The toggle that controls this also moved. Because it now governs every surface (not just the sidebar), it is no longer
sidebar.groupBadges. The top-levelbadgesconfig is now an object: glob rules live underrules, and the newgroupflag controls collapsible-doc group badges.Breaking:
badgesis now{ rules?: BadgeRule[]; group?: boolean }instead ofBadgeRule[]. Wrap existing rule arrays in{ rules: [...] }.sidebar.groupBadgesis removed — usebadges.groupinstead.- New
BadgesConfigtype exported from@ciderpress/config.
Named statuses are unchanged — keep defining them under the top-level
statusesarray. -
Breaking: reshape
homeinto a hero + orderedblocks[]array, unify every page visual into oneHomeVisualunion, and add a selectabletabsblock.homeis now hero + blocksThe named singleton section keys (
home.proof,home.features,home.showcase,home.split,home.cta) and thehome.layoutrender-order array are gone.homeis a special-casedheroplus ablocksarray. Array order is render order, and any block type may repeat — multiple splits, multiple tab bands, whatever the page needs.Each block carries a flat
label/title/bodyheading trio instead of a nestedheadingobject. Omittinghome.blocksstill yields the framework default deck (auto features grid + workspace showcase);blocks: []renders nothing below the hero.Proof strips take logos
A
proofblock'snamesaccepts either a plain string or aProofLogo, and the two mix in one strip:heightdefaults to20. Set it per logo to optically balance marks whose aspect ratios differ, and trim each asset'sviewBoxto its artwork first: padding baked into the file shrinks the mark inside its box, so two logos set to the same height render at different sizes.mono: truedraws a logo as a silhouette in the current text colour instead of its own palette. Reach for it when a mark's baked colours only read against one background, since ciderpress ships a light variant for every theme.Migration
Every mapping from the old shape to the new one. The
typefield on a visual is required, so an un-migratedvisualordemofails config load rather than degrading.Hand-authored
index.mdfiles are not migrated for you — the sync engine skips block compilation when you ship your own home page, so update its frontmatter by hand. Unrecognised top-level home keys (proof:,cta:,split:) are ignored rather than rendered.There is no replacement for
HomeLayoutEntry'scomponentescape hatch — arbitrary React sections are no longer part of the home config. UsebeforeHero/afterHeroonHomeLayout, or a custom page.One visual union
hero.demoandsplit.visualnow take the sameHomeVisual— a union discriminated on a requiredtypefield:{ type: 'code', code, language? }— rendered through Rspress's native ShikiCodeBlockRuntime, the same pipeline as markdown code fences, instead of a bare unstyled<pre>{ type: 'image', src, alt?, width?, height? }— screenshot or graphic{ type: 'terminal', command, lines, windowTitle? }— the framework terminal chrome with your own output
Split bands also gain
reverse, which flips the columns (visual left, copy right).New
tabsblockA strip of selectable tabs driving one panel — click a tab, the panel's copy and visual swap.
orientation: 'vertical'(default) puts the strip beside the panel;'horizontal'runs it above. Built on react-aria-components, so arrow-key navigation and tab/tabpanel ARIA wiring are handled.A tab's
ctarenders where the axis puts it: horizontal closes the copy column, beside the visual; vertical renders it after the visual, so the button closes the panel instead of splitting the body copy from the visual.API changes
Removed from
@ciderpress/config:HomeSectionId,HomeLayoutEntry,DEFAULT_HOME_LAYOUT,HomeSectionHeading,HomeProofConfig,HomeFeaturesConfig,HomeShowcaseConfig,HomeSplitConfig,HomeCtaConfig,HomeSplitVisual,HomeHeroDemoConfig,HomeHeroDemoImage,HomeHeroDemoTerminal,HomeHeroDemoLine.Added to
@ciderpress/config:HomeBlock,HomeBlockType,HomeProofBlock,ProofLogo,ProofItem,HomeFeaturesBlock,HomeShowcaseBlock,HomeSplitBlock,HomeTabsBlock,HomeTabItem,HomeCtaBlock,HomeVisual,HomeVisualCode,HomeVisualImage,HomeVisualTerminal,HomeVisualLine.Added to
@ciderpress/ui:HomeTabs,HomeTabsProps,HomeTabEntry,TabsAction.CTAgains aneyebrowprop, andHomeSplit'svisualprop is now optional — a copy-only split renders full width instead of painting an empty frame.Hand-authored
index.mdfiles withpageType: homemust migrate too: the layout readsblocksfrom frontmatter and no longer honours the oldfeatures/featuresHeading/proof/split/ctakeys. -
Add the
pixelicon set and give every social link a real glyphThe Pixel Icons collection is now bundled and resolvable by the
pixel:prefix, both inIconConfigvalues andVALID_ICON_IDSvalidation.Every
SocialLinkIconvalue now maps to a realpixel:brand glyph —slack,linkedin,gitlab,instagram, andfacebookpreviously fell back to a generic chain icon.The
SocialLinkIconenum was trimmed to the platforms with a pixel-art glyph:lark,wechat,qq,juejin,zhihu,bilibili, andweiboare no longer accepted values (use{ svg: '<svg>...</svg>' }for those). -
Add first-class SEO configuration with nested per-page overrides.
- Configure the production origin, title template, social image, Open Graph defaults, Twitter
cards, robots directives, and sitemap generation under top-level
seo. - Override canonical, search, Open Graph, Twitter, and robots metadata under page frontmatter
seo. - Generate absolute canonical URLs and
sitemap.xmlwhile preserving Rspress's built-in page title, description, Open Graph, andllms.txtgeneration. - Upgrade Rspress to 2.0.19 and use its official sitemap plugin.
- Configure the production origin, title template, social image, Open Graph defaults, Twitter
cards, robots directives, and sitemap generation under top-level
-
Add page badges and a named status registry.
Badges are labels like
ALPHAorWIPthat render in both the sidebar and the breadcrumb. Declare one ad-hoc in a page's frontmatter (badge), reference a named status (status), inherit across a section viadefaults, or apply by route with top-levelbadgesglob rules. Frontmatter anddefaultswin over glob rules.Statuses are the semantic layer over badges: a named, documented preset (
title+description+ color) you define once and reference byid. Ciderpress ships built-in defaults (alpha,beta,wip,experimental,new,stable,deprecated,internal,planned); yourstatusesentries merge over them byid. A status'sdescriptionbecomes the chip's hover tooltip.Badges also render on the child cards of auto-generated section landing pages. A collapsible group that is also a doc hides its sidebar badge by default (to avoid the collapse chevron) — set
sidebar.groupBadges: trueto show it there too.Long titles truncate with an ellipsis and reveal the full text on hover — in the sidebar, the breadcrumb, and the "On this page" outline.
@ciderpress/config—Badge/BadgeConfig/BadgeVariant/BadgeInput/BadgeRule/Statustypes;Frontmatter.badge+Frontmatter.status; top-levelbadges(glob rules) andstatuses(registry); a shared badge wire-format (encodeBadges/decodeBadges/normalizeBadgeInput) and status resolver (DEFAULT_STATUSES/resolveStatuses/resolveStatusBadges/statusToBadge).@ciderpress/cli— sync resolves badges + statuses (file frontmatter →defaults→ glob, first source wins) and emits them as Rspress sidebartags plus a route→badges map (.generated/badges.json). A collapsible group that is also a doc gets no sidebar tag (its badge shows on the page instead).@ciderpress/ui— aTagoverride renders badge chips (variant color, custom-color tint, hover tooltip), delegating other tags to Rspress; badges also render beside the breadcrumb viathemeConfig.pageBadges; sidebar, breadcrumb, and outline entries get single-line ellipsis with atitletooltip on overflow.
-
Workspace API mirrors Page, plus a
devServerconfig block for reverse proxies.Workspace API migration
The
Workspaceinterface now uses the same discovery surface asPage. Six legacy fields are replaced with their Page-aligned equivalents:WorkspaceGroup.itemsis unchanged — it's a differentitems(an array of Workspaces, not an array of Pages).Workspace.openapiis unchanged.devServerconfig blockNew top-level field for reverse-proxy and host/port control:
CLI flags
--port,--host,--urloverride config values. The ready message prints both the configured URL and the local bind URL when they differ, so a portless / nginx / Caddy hostname falls back tohttp://127.0.0.1:portif the proxy isn't running.IPv4 default for
devServer.hostDefault changed from
'localhost'to'127.0.0.1'. On macOS, Node resolveslocalhostto IPv6 ([::1]) first; Rsbuild then binds IPv6-only and any reverse proxy pointed at127.0.0.1:portreturns 502 Bad Gateway. Binding the IPv4 loopback by default keeps localhost-only security while staying compatible with every proxy. SetdevServer.host: '0.0.0.0'to expose on every interface (LAN / Docker).End-to-end docs rewrite
Every concept doc, framework guide, and the configuration reference now matches the shipped surface — Workspace shape,
devServer, theme block, sidebar islands, announcement shape, etc. The contributing-guide example walk-through (Stage 1 → Stage 3 in/framework/scaling) uses the newpages/nav.island/discover.*vocabulary throughout. New/guides/using-portlesswalkthrough covers the four-step portless flow.Custom example
examples/custom/ships pre-configured for portless with a stable port (devServer.port: 7174), aportless: "acme"hostname override, and apnpm setup:portlessscript that registers theacme.localhost → 127.0.0.1:7174alias automatically. Visithttps://acme.localhostafter runningpnpm devfrom the example dir.
Patch Changes
-
Upgrade dependencies to latest across the workspace.
- Catalog:
@rslib/core^0.23.1,@rspress/core^2.0.15,@typescript/native-preview7.0.0-dev.20260628.1,vitest^4.1.9 - CLI:
@clack/prompts^1.6.0,ink^7.1.0,liquidjs^10.27.1 - UI:
react-aria-components^1.19.0,esbuild^0.28.1, iconify icon sets (material-icon-theme,simple-icons,vscode-icons) - Tooling:
oxlint^1.71.0,oxfmt^0.56.0,turbo^2.10.0,@microsoft/api-extractor^7.58.9,eslint-plugin-jsdoc^63.0.10,eslint-plugin-security^4.0.1,@types/node^26.0.1 - E2E:
@playwright/test^1.61.1,@argos-ci/playwright^7.1.1 - Benchmarks:
@codspeed/vitest-plugin^5.7.1
mermaidstays pinned at ^10.9.6 — v11 uses langium for parsing and breaks Rspress's webpack compilation of global components. - Catalog:
-
Upgrade dependencies to latest across the workspace, and fix Mermaid rendering on Mermaid v11.
- Catalog:
@rspress/core^2.0.16,@typescript/native-preview7.0.0-dev.20260707.2,type-fest^5.8.0,vitest^4.1.10 - UI:
mermaid^11.16.0 (was v10), iconify icon sets - CLI:
@clack/prompts^1.7.0 - Config:
tsx^4.23.0,@types/node^26.1.0 - Tooling:
oxlint^1.73.0,oxfmt^0.58.0,turbo^2.10.4
@rslib/coreis held at0.23.1: 0.23.2 regressed the ESM build (emitted.jsinstead of.mjsand dropped the bundled type declarations).Mermaid is now on v11 — the previous v10 pin was based on a misdiagnosis.
mermaid.render()resolves correctly on v11; the blank-diagram symptom was a defect inMermaidRenderer.tsx:configdefaulted to a fresh{}each render, re-firing the render effect in a loop that repeatedly rendered into the same element id and clobbered the injected SVG. Fixed by keying the render callback on a serialized config value and using a unique element id per render call. Diagrams now paint on first load without interaction and survive theme toggles. - Catalog:
-
Reject top-level leaf pages with a nested path during config validation.
A visible leaf page (no
pages) placed directly inconfig.pagesrenders as a top-level sidebar link, which resolves to a file at the content root. A nestedpath(e.g./getting-started/introduction) files the page a directory deep, so the generated root_meta.jsonentry pointed at a file that wasn't there — a silent dead link in the sidebar. Config validation now fails with an actionable message telling you to use a single-segment path or nest the page under a section withpages. -
Test/exercise the CI release pipeline.
No code changes — this changeset only exists to force the changesets bot to open a release PR, validate that the GitHub Actions workflow can publish via npm trusted publishing (no
NPM_TOKEN, OIDC-only withid-token: write+NPM_CONFIG_PROVENANCE: true), and confirm provenance attestations land on the resulting1.0.0-rc.2releases. Following the local bootstrap publish of1.0.0-rc.1, this is the first CI-driven cut. -
d8da2eb: Upgrade runtime and build dependencies to their latest compatible releases.
This includes TypeScript 7, Rslib 0.23.2, React 19.2.8, and the current workspace toolchain. Improve compatibility with current TypeScript, React, and Rspress releases.
-
Upgrade dependencies to latest across the workspace.
- Catalog:
@rslib/core^0.21.5,@rspress/core^2.0.12,@typescript/native-preview7.0.0-dev.20260519.1,vitest^4.1.7,zod^4.4.3 - CLI:
@clack/prompts^1.4.0,@kidd-cli/core^0.24.0,ink^7.0.3,jiti^2.7.0,liquidjs^10.27.0 - UI:
katex^0.16.47,openapi-sampler^1.7.3,ts-morph^28.0.0, iconify icon sets, React 19.2.6 - Config:
c124.0.0-beta.5,tsx^4.22.3 - Tooling:
oxlint^1.66.0,oxfmt^0.51.0,turbo^2.9.14,@types/node^25.9.1,@types/react^19.2.15
mermaidstays pinned at ^10.9.5 — v11 uses langium for parsing and breaks Rspress's webpack compilation of global components. - Catalog:
-
Post-rc.0 fixes ahead of the next pre-release tag.
@ciderpress/ui
- Restored the theme-aware
<CiderpressLogo />SVG in the navbar. Root cause: webpack's CJS-flavored resolver couldn't loadciderpress/@ciderpress/uibecause their.exports only declaredimport— the client bundle was crashing entirely, so theNavLogoportal never hydrated. Aliased both viaimport.meta.resolveincreateRspressConfig. - Single-variant themes now hide the appearance toggle. The CSS rule was
inside
@layer ciderpress.overridesand was losing to Rspress's unlayered defaults; hoisted it out of the layer. - Feature card grids inside MDX doc pages no longer pick up the home-page section's 32px horizontal padding, so cards align with body prose.
- New:
pageType: 'blank'frontmatter now suppresses the site footer (Rspress already skipped the navbar). Blank pages are fully chromeless — use for marketing landings inside a docs deployment.
Repo
- Deleted
@ciderpress/coreand redistributed its sync engine into@ciderpress/cli/liband its config loader into@ciderpress/config/loader. The package is no longer published. Imports must move accordingly:import { loadConfig } from '@ciderpress/core'→from '@ciderpress/config/loader'- sync engine internals are no longer a public surface.
- Swapped
ts-pattern+es-toolkitdirect usage formassaman/matchandmassaman/*subpaths across all packages.
- Restored the theme-aware
-
Updated dependencies
-
Updated dependencies
-
Updated dependencies
-
Updated dependencies
-
Updated dependencies
-
Updated dependencies
-
Updated dependencies [d8da2eb]
-
Updated dependencies
-
Updated dependencies
-
Updated dependencies
- @ciderpress/theme@1.0.0-rc.6
1.0.0-rc.9
Minor Changes
-
96aa946: Add first-class SEO configuration with nested per-page overrides.
- Configure the production origin, title template, social image, Open Graph defaults, Twitter
cards, robots directives, and sitemap generation under top-level
seo. - Override canonical, search, Open Graph, Twitter, and robots metadata under page frontmatter
seo. - Generate absolute canonical URLs and
sitemap.xmlwhile preserving Rspress's built-in page title, description, Open Graph, andllms.txtgeneration. - Upgrade Rspress to 2.0.19 and use its official sitemap plugin.
- Configure the production origin, title template, social image, Open Graph defaults, Twitter
cards, robots directives, and sitemap generation under top-level
1.0.0-rc.8
Minor Changes
-
583fecc: Breaking: reshape
homeinto a hero + orderedblocks[]array, unify every page visual into oneHomeVisualunion, and add a selectabletabsblock.homeis now hero + blocksThe named singleton section keys (
home.proof,home.features,home.showcase,home.split,home.cta) and thehome.layoutrender-order array are gone.homeis a special-casedheroplus ablocksarray. Array order is render order, and any block type may repeat — multiple splits, multiple tab bands, whatever the page needs.Each block carries a flat
label/title/bodyheading trio instead of a nestedheadingobject. Omittinghome.blocksstill yields the framework default deck (auto features grid + workspace showcase);blocks: []renders nothing below the hero.Proof strips take logos
A
proofblock'snamesaccepts either a plain string or aProofLogo, and the two mix in one strip:heightdefaults to20. Set it per logo to optically balance marks whose aspect ratios differ, and trim each asset'sviewBoxto its artwork first: padding baked into the file shrinks the mark inside its box, so two logos set to the same height render at different sizes.mono: truedraws a logo as a silhouette in the current text colour instead of its own palette. Reach for it when a mark's baked colours only read against one background, since ciderpress ships a light variant for every theme.Migration
Every mapping from the old shape to the new one. The
typefield on a visual is required, so an un-migratedvisualordemofails config load rather than degrading.Hand-authored
index.mdfiles are not migrated for you — the sync engine skips block compilation when you ship your own home page, so update its frontmatter by hand. Unrecognised top-level home keys (proof:,cta:,split:) are ignored rather than rendered.There is no replacement for
HomeLayoutEntry'scomponentescape hatch — arbitrary React sections are no longer part of the home config. UsebeforeHero/afterHeroonHomeLayout, or a custom page.One visual union
hero.demoandsplit.visualnow take the sameHomeVisual— a union discriminated on a requiredtypefield:{ type: 'code', code, language? }— rendered through Rspress's native ShikiCodeBlockRuntime, the same pipeline as markdown code fences, instead of a bare unstyled<pre>{ type: 'image', src, alt?, width?, height? }— screenshot or graphic{ type: 'terminal', command, lines, windowTitle? }— the framework terminal chrome with your own output
Split bands also gain
reverse, which flips the columns (visual left, copy right).New
tabsblockA strip of selectable tabs driving one panel — click a tab, the panel's copy and visual swap.
orientation: 'vertical'(default) puts the strip beside the panel;'horizontal'runs it above. Built on react-aria-components, so arrow-key navigation and tab/tabpanel ARIA wiring are handled.A tab's
ctarenders where the axis puts it: horizontal closes the copy column, beside the visual; vertical renders it after the visual, so the button closes the panel instead of splitting the body copy from the visual.API changes
Removed from
@ciderpress/config:HomeSectionId,HomeLayoutEntry,DEFAULT_HOME_LAYOUT,HomeSectionHeading,HomeProofConfig,HomeFeaturesConfig,HomeShowcaseConfig,HomeSplitConfig,HomeCtaConfig,HomeSplitVisual,HomeHeroDemoConfig,HomeHeroDemoImage,HomeHeroDemoTerminal,HomeHeroDemoLine.Added to
@ciderpress/config:HomeBlock,HomeBlockType,HomeProofBlock,ProofLogo,ProofItem,HomeFeaturesBlock,HomeShowcaseBlock,HomeSplitBlock,HomeTabsBlock,HomeTabItem,HomeCtaBlock,HomeVisual,HomeVisualCode,HomeVisualImage,HomeVisualTerminal,HomeVisualLine.Added to
@ciderpress/ui:HomeTabs,HomeTabsProps,HomeTabEntry,TabsAction.CTAgains aneyebrowprop, andHomeSplit'svisualprop is now optional — a copy-only split renders full width instead of painting an empty frame.Hand-authored
index.mdfiles withpageType: homemust migrate too: the layout readsblocksfrom frontmatter and no longer honours the oldfeatures/featuresHeading/proof/split/ctakeys.
Patch Changes
- Updated dependencies [583fecc]
- Updated dependencies [583fecc]
- @ciderpress/theme@1.0.0-rc.5
1.0.0-rc.7
Minor Changes
-
cebd0d2: Make group badges consistent across every surface, and restructure the
badgesconfig.A collapsible group that is also a doc (a nav row that both toggles children and links to a page) previously hid its badge in the sidebar but still rendered it in the breadcrumb and section cards — so a group badge showed in some places but not others, unlike a normal page. Suppression is now uniform: when a group's badge is hidden, it's hidden on the sidebar, breadcrumb, and cards together; when enabled, it surfaces everywhere at once.
The toggle that controls this also moved. Because it now governs every surface (not just the sidebar), it is no longer
sidebar.groupBadges. The top-levelbadgesconfig is now an object: glob rules live underrules, and the newgroupflag controls collapsible-doc group badges.Breaking:
badgesis now{ rules?: BadgeRule[]; group?: boolean }instead ofBadgeRule[]. Wrap existing rule arrays in{ rules: [...] }.sidebar.groupBadgesis removed — usebadges.groupinstead.- New
BadgesConfigtype exported from@ciderpress/config.
Named statuses are unchanged — keep defining them under the top-level
statusesarray.
1.0.0-rc.6
Minor Changes
-
395da42: Add
feedbackconfig to toggle the "Was this page helpful?" widget.The widget is off by default. Set
feedback: trueto enable it with the default question, orfeedback: { question: '...' }to enable it with custom text.@ciderpress/config— newfeedback?: boolean | FeedbackConfigfield onCiderpressConfig, with an exportedFeedbackConfigtype.@ciderpress/ui—SiteBlockandCiderpressSiteBlockgain afeedback: { enabled, question }field;Layoutrenders<Feedback />only when feedback is enabled.
-
c66ef61: Add the
pixelicon set and give every social link a real glyphThe Pixel Icons collection is now bundled and resolvable by the
pixel:prefix, both inIconConfigvalues andVALID_ICON_IDSvalidation.Every
SocialLinkIconvalue now maps to a realpixel:brand glyph —slack,linkedin,gitlab,instagram, andfacebookpreviously fell back to a generic chain icon.The
SocialLinkIconenum was trimmed to the platforms with a pixel-art glyph:lark,wechat,qq,juejin,zhihu,bilibili, andweiboare no longer accepted values (use{ svg: '<svg>...</svg>' }for those). -
0d6b434: Add page badges and a named status registry.
Badges are labels like
ALPHAorWIPthat render in both the sidebar and the breadcrumb. Declare one ad-hoc in a page's frontmatter (badge), reference a named status (status), inherit across a section viadefaults, or apply by route with top-levelbadgesglob rules. Frontmatter anddefaultswin over glob rules.Statuses are the semantic layer over badges: a named, documented preset (
title+description+ color) you define once and reference byid. Ciderpress ships built-in defaults (alpha,beta,wip,experimental,new,stable,deprecated,internal,planned); yourstatusesentries merge over them byid. A status'sdescriptionbecomes the chip's hover tooltip.Badges also render on the child cards of auto-generated section landing pages. A collapsible group that is also a doc hides its sidebar badge by default (to avoid the collapse chevron) — set
sidebar.groupBadges: trueto show it there too.Long titles truncate with an ellipsis and reveal the full text on hover — in the sidebar, the breadcrumb, and the "On this page" outline.
@ciderpress/config—Badge/BadgeConfig/BadgeVariant/BadgeInput/BadgeRule/Statustypes;Frontmatter.badge+Frontmatter.status; top-levelbadges(glob rules) andstatuses(registry); a shared badge wire-format (encodeBadges/decodeBadges/normalizeBadgeInput) and status resolver (DEFAULT_STATUSES/resolveStatuses/resolveStatusBadges/statusToBadge).@ciderpress/cli— sync resolves badges + statuses (file frontmatter →defaults→ glob, first source wins) and emits them as Rspress sidebartags plus a route→badges map (.generated/badges.json). A collapsible group that is also a doc gets no sidebar tag (its badge shows on the page instead).@ciderpress/ui— aTagoverride renders badge chips (variant color, custom-color tint, hover tooltip), delegating other tags to Rspress; badges also render beside the breadcrumb viathemeConfig.pageBadges; sidebar, breadcrumb, and outline entries get single-line ellipsis with atitletooltip on overflow.
Patch Changes
-
6edf324: Upgrade dependencies to latest across the workspace, and fix Mermaid rendering on Mermaid v11.
- Catalog:
@rspress/core^2.0.16,@typescript/native-preview7.0.0-dev.20260707.2,type-fest^5.8.0,vitest^4.1.10 - UI:
mermaid^11.16.0 (was v10), iconify icon sets - CLI:
@clack/prompts^1.7.0 - Config:
tsx^4.23.0,@types/node^26.1.0 - Tooling:
oxlint^1.73.0,oxfmt^0.58.0,turbo^2.10.4
@rslib/coreis held at0.23.1: 0.23.2 regressed the ESM build (emitted.jsinstead of.mjsand dropped the bundled type declarations).Mermaid is now on v11 — the previous v10 pin was based on a misdiagnosis.
mermaid.render()resolves correctly on v11; the blank-diagram symptom was a defect inMermaidRenderer.tsx:configdefaulted to a fresh{}each render, re-firing the render effect in a loop that repeatedly rendered into the same element id and clobbered the injected SVG. Fixed by keying the render callback on a serialized config value and using a unique element id per render call. Diagrams now paint on first load without interaction and survive theme toggles. - Catalog:
-
8313290: Reject top-level leaf pages with a nested path during config validation.
A visible leaf page (no
pages) placed directly inconfig.pagesrenders as a top-level sidebar link, which resolves to a file at the content root. A nestedpath(e.g./getting-started/introduction) files the page a directory deep, so the generated root_meta.jsonentry pointed at a file that wasn't there — a silent dead link in the sidebar. Config validation now fails with an actionable message telling you to use a single-segment path or nest the page under a section withpages. -
Updated dependencies [6edf324]
- @ciderpress/theme@1.0.0-rc.4
1.0.0-rc.5
Minor Changes
-
6333ea1: Add config-driven document templates.
Templates can now be authored as plain
.md/.mdxfiles withlabel/hintfrontmatter, discovered from directories declared via the newtemplatesconfig field. A custom template whose filename matches a built-in overrides it, and.mdxtemplates scaffold to.mdx.@ciderpress/config— newtemplates?: string | string[]field.@ciderpress/templates— newbuildTemplate()validator andTemplateErrortype;Templategains an optionalextensionfield. Built-in template files renamed from.liquidto.md(no behavior change).@ciderpress/cli— newciderpress templates listandciderpress templates checkcommands; template validation folded intociderpress checkandciderpress build;ciderpress draftnow discovers config templates and preserves the template's extension.
1.0.0-rc.4
Minor Changes
-
cb7412b: Full custom branding. Every brand surface on a ciderpress site is now user-overridable, plus the home page can be reordered and have sections suppressed without writing custom MDX.
Topbar icon chip
config.iconnow actually renders — a small chip painted by<HeaderIcon />immediately before<HeaderLogo />insidecp-header-logo. Pair withlogofor the canonical two-slot identity (small mark + wordmark). Accepts the sameIconConfigunion as cards.Loader
config.loaderaccepts four forms:A fallback dismissal timer in the inline head script guarantees
data-cp-readyflips even when the React bundle never hydrates (static dist over plain http with no service worker). Cross-field validation rejects configs wheremaxDisplayMs < minDisplayMs + 200.Favicon
Setting
favicondisables the runtime favicon retinting that otherwise swaps<link rel="icon">to a themed pixel-apple data URI. The optionaltypefield emits a second<link rel="icon" type="...">so extension-less URLs still resolve to the right MIME.Icons broadened
The image form is honoured on the topbar icon chip, workspace cards, section cards, feature cards, and sidebar links.
Home page — section opt-outs and customisation
Home page — section order
home.layoutcontrols render order and visibility. Omit a section from the array to suppress it. Default is['hero', 'trust', 'features', 'split', 'workspaces', 'cta'].The schema rejects duplicates and unknown ids.
Home page — full custom MDX
For full control (custom sections, JSX in arbitrary positions), add a section that mounts at
/and write your own MDX. The sync engine detects an explicitindex.mdand skips the auto-generated home page. All home components are importable from@ciderpress/ui/theme.Footer brand mark
The site footer no longer falls back to the ciderpress apple. When
site.footer.brandMarkis omitted, the chip renders<img src="/icon.svg">— your custom mark or the auto-generated one derived fromconfig.title.Security + correctness
- CSS
</style>injection blocked inloader.labelandloader.content—<is hex-escaped (\3c) so the byte sequence</style>never appears in the inline<style>tag. escapeJsxPropnow escapes backslash, blocking trailing-backslash escapes in image-form iconsrc/alt.- Empty
src: ''rejected at the schema layer. - Layouts short-circuit on
import.meta.env.SSG_MDso the Copy-Markdown button no longer pulls topbar logo / search button / nav items into every copied page.
Acme example
The
examples/custom/directory ships a realistic mid-size product docs site (Acme Corp) that exercises every new field — custom logo, favicon, dashboard-style hero demo, custom split, reordered sections, six feature cards, three workspace items, a three-column footer. Verified: zero "ciderpress" strings in the rendered HTML.Run
pnpm example:custom,pnpm example:custom:build, orpnpm example:custom:serve. - CSS
-
cb7412b: Workspace API mirrors Page, plus a
devServerconfig block for reverse proxies.Workspace API migration
The
Workspaceinterface now uses the same discovery surface asPage. Six legacy fields are replaced with their Page-aligned equivalents:WorkspaceGroup.itemsis unchanged — it's a differentitems(an array of Workspaces, not an array of Pages).Workspace.openapiis unchanged.devServerconfig blockNew top-level field for reverse-proxy and host/port control:
CLI flags
--port,--host,--urloverride config values. The ready message prints both the configured URL and the local bind URL when they differ, so a portless / nginx / Caddy hostname falls back tohttp://127.0.0.1:portif the proxy isn't running.IPv4 default for
devServer.hostDefault changed from
'localhost'to'127.0.0.1'. On macOS, Node resolveslocalhostto IPv6 ([::1]) first; Rsbuild then binds IPv6-only and any reverse proxy pointed at127.0.0.1:portreturns 502 Bad Gateway. Binding the IPv4 loopback by default keeps localhost-only security while staying compatible with every proxy. SetdevServer.host: '0.0.0.0'to expose on every interface (LAN / Docker).End-to-end docs rewrite
Every concept doc, framework guide, and the configuration reference now matches the shipped surface — Workspace shape,
devServer, theme block, sidebar islands, announcement shape, etc. The contributing-guide example walk-through (Stage 1 → Stage 3 in/framework/scaling) uses the newpages/nav.island/discover.*vocabulary throughout. New/guides/using-portlesswalkthrough covers the four-step portless flow.Custom example
examples/custom/ships pre-configured for portless with a stable port (devServer.port: 7174), aportless: "acme"hostname override, and apnpm setup:portlessscript that registers theacme.localhost → 127.0.0.1:7174alias automatically. Visithttps://acme.localhostafter runningpnpm devfrom the example dir.
Patch Changes
-
5c3e841: Upgrade dependencies to latest across the workspace.
- Catalog:
@rslib/core^0.23.1,@rspress/core^2.0.15,@typescript/native-preview7.0.0-dev.20260628.1,vitest^4.1.9 - CLI:
@clack/prompts^1.6.0,ink^7.1.0,liquidjs^10.27.1 - UI:
react-aria-components^1.19.0,esbuild^0.28.1, iconify icon sets (material-icon-theme,simple-icons,vscode-icons) - Tooling:
oxlint^1.71.0,oxfmt^0.56.0,turbo^2.10.0,@microsoft/api-extractor^7.58.9,eslint-plugin-jsdoc^63.0.10,eslint-plugin-security^4.0.1,@types/node^26.0.1 - E2E:
@playwright/test^1.61.1,@argos-ci/playwright^7.1.1 - Benchmarks:
@codspeed/vitest-plugin^5.7.1
mermaidstays pinned at ^10.9.6 — v11 uses langium for parsing and breaks Rspress's webpack compilation of global components. - Catalog:
-
Updated dependencies [5c3e841]
- @ciderpress/theme@1.0.0-rc.3
1.0.0-rc.3
Minor Changes
-
f71d7f4: Fix: the navbar fallback no longer overrides the auto-generated
/logo.svgwith the hardcoded<CiderpressLogo />wordmark. Whenlogois omitted, the nav now shows the SVG written to the public dir by the banner module (derived fromtitle). Sites that committed their ownpublic/logo.svgalready won this round; sites that didn't were silently getting the ciderpress wordmark.The themed wordmark is still available as an opt-in:
New: two top-level config fields for overriding auto-generated asset paths.
banner?: string— hero image used on the home page and workspace landing pages. Defaults to/banner.svg.favicon?: string— favicon path. Defaults to/icon.svg. Distinct fromicon(the Iconify id for the inline topbar mark).
Auto-generation and the
<!-- ciderpress-generated -->marker still carry the default case — these fields are only needed to point at a different filename or a CDN URL.
1.0.0-rc.2
Patch Changes
-
e4d81aa: Test/exercise the CI release pipeline.
No code changes — this changeset only exists to force the changesets bot to open a release PR, validate that the GitHub Actions workflow can publish via npm trusted publishing (no
NPM_TOKEN, OIDC-only withid-token: write+NPM_CONFIG_PROVENANCE: true), and confirm provenance attestations land on the resulting1.0.0-rc.2releases. Following the local bootstrap publish of1.0.0-rc.1, this is the first CI-driven cut. -
Updated dependencies [e4d81aa]
- @ciderpress/theme@1.0.0-rc.2
1.0.0-rc.1
Major Changes
-
0a651df: Rename to
ciderpress. The project moved to thethebytefarmorg and the kit now lives at the unscopedciderpresspackage name (replacing@zpress/kit).Consumer migration:
@zpress/cli→@ciderpress/cli@zpress/config→@ciderpress/config@zpress/ui→@ciderpress/ui@zpress/theme→@ciderpress/theme@zpress/templates→@ciderpress/templates@zpress/kit→ciderpress(unscoped)zpress.config.ts→ciderpress.config.ts- Window globals:
__ZPRESS_*__→__CIDERPRESS_*__ - CSS vars:
--zp-*→--cp-*
The
@zpress/*packages are not republished —@ciderpress/*starts fresh at this version. Tagline: press your docs.
Patch Changes
- Updated dependencies [0a651df]
- @ciderpress/theme@1.0.0-rc.1
1.0.0-rc.0
Major Changes
-
ciderpress 1.0 — release candidate
This is a major release that locks the v1 public API. Headline changes:
Theme system
- Renamed the built-in
basetheme tohoneycrisp(apple red, the canonical brand theme) and addedgrannysmith(apple green) as a second apple-themed default. Both ship withdarkandlightvariants; the sun/moon toggle swaps between them. The legacy slug'default'aliases to'honeycrisp'viaTHEME_ALIASESfor backward compatibility. The full built-in roster is nowhoneycrisp,grannysmith,midnight, andarcade. - Replaced
theme.colorModewiththeme.variant(values:'dark' | 'light'). The'toggle'value is no longer supported — themes that declare both variants always show the toggle; themes that declare one hide it. defineTheme()input shape changed from{ name, tokens, modes, defaultMode }to{ name, variants: { dark?, light? }, defaultVariant? }. The factory validates the envelope before parsing token trees so error messages now point at the offending input field.ciderpressand@ciderpress/configno longer re-exportColorMode,ThemeMode,COLOR_MODES, orresolveDefaultColorMode. UseThemeVariant,THEME_VARIANTS, andresolveDefaultVariantfrom@ciderpress/theme. The deprecated aliases remain in@ciderpress/themeitself for one-version migration safety.
Config surface
Frontmatteris now strict — unknown keys are rejected at config load and produce a typed compile-time error. On-disk markdown frontmatter is unaffected (gray-matter never typed it asFrontmatter).- Renamed
WorkspaceCategory→WorkspaceGroup. Theconfig.workspacesfield name is unchanged. - Every field on
CiderpressConfigand its sub-types now has solid JSDoc that propagates to IDE hover docs. - Tightened the CLI
--color-modeschema fromstringtoenum('dark', 'light').
Dependency hygiene
- Removed
gray-matter(last released 2021, drags in the abandonedjs-yaml@3line with known prototype-pollution CVEs). Replaced with a ~25-lineparse/stringifyhelper built onyaml(eemeli/yaml). - Removed unused
js-yamland@types/js-yamldirect deps from@ciderpress/cli.
Fixes
safe-url.tsregex is now stored with�- escape sequences instead of raw control bytes. Git no longer marks the file as binary; editors render it correctly.- Deleted orphaned
packages/ui/src/head/js/color-mode-{dark,light}.js. - Hardened variant resolution across the head IIFE, theme provider, and theme switcher with cross-reference comments and a re-entrancy guard on the MutationObserver snap-back.
Migration
- Renamed the built-in
Patch Changes
- Updated dependencies
- @ciderpress/theme@1.0.0-rc.0
0.5.2
Patch Changes
- f26cf74: fix: resolve SWC decorator panic by upgrading rsbuild to 2.0.0-rc.1
0.5.1
Patch Changes
- 1e966e1: Fix workspace include resolution for
appsandpackagesitems:- Use deep glob pattern (
docs/**/*.md) as default include whenrecursive: true. Previously the default was alwaysdocs/*.mdregardless of the flag. - Add config check warning when an explicit include pattern already starts with the basePath derived from
path, which causes double-prefixing and silently matches zero files. Surfaces duringciderpress checkbefore the build step.
- Use deep glob pattern (
0.5.0
Minor Changes
-
9b5099b: Restore
appsandpackagesas first-class root config fieldsRe-adds
appsandpackagestoCiderpressConfigalongside the existing genericworkspacesfield. The home page renders groups in fixed order: Apps, Packages, then custom workspace categories. Each group gets its own heading, auto-generated description, and scope prefix on cards.Also adds
collectAllWorkspaceItems()utility to merge all three sources consistently across the sync engine, validation, landing page injection, and OpenAPI collection.
Patch Changes
- b912b2d: Update and add READMEs
- Updated dependencies [b912b2d]
- @ciderpress/theme@0.3.2
0.4.0
Minor Changes
- 179ae48: Add sidebar button variants (style/shape), site footer with social links toggle, client-side navigation via Link, typed IconId, and ESM compatibility patches for rspress plugins
Patch Changes
- 62248ba: Align
iconfields onSection,CardConfig, andWorkspacewith theIconConfigunion type and remove staleiconColorproperties
0.3.0
Minor Changes
- 429846c: Add OpenAPI documentation support with auto-generated API reference pages from OpenAPI specs, interactive UI components (schema viewer, code examples in 6 languages, collapsible responses), workspace-scoped sidebar merging, and Copy Markdown functionality.
Patch Changes
-
77796f1: Auto-generate section landing pages with SectionCard grids for all section groups with children. Fix sidebar group names, duplicate entries, and missing pages for auto-derived links. Redesign SectionCard with compact icon+title row and optional description. Remove all
&&chains from scripts in favor of turbo task dependencies and pnpm lifecycle hooks. -
3e7a28a: Enforce consistent file structure conventions across all packages and upgrade dependencies to latest versions.
File Structure
Apply a standardized file layout pattern to every source file in the monorepo:
- Exports first: All exported functions, constants, and types appear at the top of each file immediately after imports.
- Private separator: Non-exported (private) helper functions are placed below a
// --- Private ---section separator comment. - Complete JSDoc: Every function now has full JSDoc documentation including
@paramand@returnstags. Non-exported helpers include the@privatetag. - Spacing cleanup: Removed inconsistent double blank lines between declarations across all packages.
Test Colocation
Moved all test files from
packages/*/test/directories to sit alongside their source files inpackages/*/src/:packages/cli/test/→packages/cli/src/lib/packages/config/test/→packages/config/src/packages/core/test/→packages/core/src/(includingsync/andsync/sidebar/subdirectories)packages/templates/test/→packages/templates/src/packages/theme/test/→packages/theme/src/packages/ui/test/→packages/ui/src/
Standards
Updated
.claude/rules/typescript.mdto codify the file structure conventions so all future code follows the same pattern.Dependency Upgrades
oxlint1.55.0 → 1.56.0oxfmt0.40.0 → 0.41.0@kidd-cli/core0.4.0 → 0.7.0c124.0.0-beta.3 → 4.0.0-beta.4laufen1.1.0 → 1.2.1@iconify-json/material-icon-theme1.2.55 → 1.2.56@iconify-json/simple-icons1.2.73 → 1.2.74
-
Updated dependencies [3e7a28a]
- @ciderpress/theme@0.3.1
0.2.2
Patch Changes
- 1b3b8e3: Add vitest test infrastructure and 122 unit tests across all packages
- Updated dependencies [1b3b8e3]
- Updated dependencies [c57ab70]
- @ciderpress/theme@0.3.0
0.2.1
Patch Changes
- 6df5ab7: fix(packages/core): map nav items with
textinstead oftitlefor Rspress compatibility fix(packages/ui): inject critical CSS via Rsbuildhtml.tagsso loading screen works in dev mode fix(packages/ui): re-enabledata-cp-readydismiss flag in ThemeProvider fix(packages/ui): replace pong/invaders loaders with simple dots loader fix(packages/theme): removearcade-fxas standalone theme (effects already apply with arcade) - Updated dependencies [6df5ab7]
- @ciderpress/theme@0.2.1
0.2.0
Minor Changes
-
2055c1a: New Packages: @ciderpress/theme and @ciderpress/config
This release introduces two new packages that refactor configuration and theme management:
@ciderpress/theme - Theme definitions and utilities
- Type-safe theme definitions with
LiteralUnionpattern for autocomplete + extensibility - Built-in themes:
base,midnight,arcade,arcade-fx - Icon color types with autocomplete support
- Zod schemas for theme validation
- Utility functions:
resolveDefaultColorMode,isBuiltInTheme,isBuiltInIconColor
@ciderpress/config - Configuration loading and validation
- Multi-format config support:
.ts,.js,.json,.jsonc,.yml,.yaml - Type-safe
defineConfighelper loadConfigfunction with Result-based error handling- Zod schemas for complete config validation
- JSON Schema generation for IDE autocomplete (
@ciderpress/config/schema) - Re-exports theme utilities for convenience
@ciderpress/core - Internal refactoring
- Removed direct
c12dependency - Now re-exports config and theme utilities from
@ciderpress/config - Public API remains backwards compatible
- Added new exports:
ICON_COLORS,ConfigErrorType,LoadConfigOptions
@ciderpress/ui - Dependency updates
- Removed
@ciderpress/coredependency for config types - Now uses
@ciderpress/configand@ciderpress/themedirectly - Added support for custom themes with fallback to 'toggle' color mode
- Fixed: Added
arcade-fxtheme to theme switcher
Migration Guide
For most users, this is a drop-in replacement with no migration needed. All existing imports from
@ciderpress/corecontinue to work.If you were importing from internal paths, update as follows:
JSON/YAML Config Support
You can now use JSON or YAML config files with IDE autocomplete:
Custom Themes
The
ThemeNametype now supports custom theme names with autocomplete for built-ins: - Type-safe theme definitions with
Patch Changes
- Updated dependencies [2055c1a]
- @ciderpress/theme@0.2.0