Changelog
All notable changes to Contentrain Studio are documented here. The format follows Keep a Changelog and the project adheres to Semantic Versioning.
v0.4.8
Released 2026-10-08 · compare changes
Enhancements
- migrate: The Studio+Migrate bundle: Migrate sells its fee plus Studio year 1 as one order. Studio provisions the account (
POST /api/migrate/provision, signed claim v2), opens one Polar checkout at the quoted total, moves the subscription to the yearly list product for renewal, and refuses a quote it does not agree with. An order whose account already has a covering plan joins that workspace and charges nothing. Money guards and the GitHub identity check are in place (#396, #404, #405, #407, #409, #411) - migrate: Refunds: a grant can be revoked (
refund_before_delivery,refund_after_delivery,delivery_failed,ops), which cancels the subscription it is bound to; revoking an already ended subscription is success (#406, #408) - migrate: Studio setup beside a live move: install URL, grant status and a signed setup callback, with the comments export imported from the claim (#403, #383)
- comments: The workspace owner and admins get an email when a comment arrives (#401)
- billing: Yearly plans: honest overage-lock copy; forms, comments and CDN count over the billing window (#413)
- billing: Companion monthly usage subscription for yearly plans, behind
NUXT_POLAR_COMPANION_USAGE(off) (#415) - content: Relation and relations fields in the edit form are a searchable select: type to filter (case- and diacritic-insensitive, matches the label, the id and the model name), polymorphic relations are grouped by model, only the first 100 matches are drawn with a note to keep typing, and chips, reordering and the manual id fallback are unchanged (#417). A field that already has a value opens to the whole list, not only its own entry (#419)
- migrate: The account state carries
monthly_list_cents, the sized plan's monthly price × 12, so the Migrate offer can show the yearly saving; the price stays in Studio (#418) - migrate: One click connects a bundle or covered order's delivered repository as a project from the claim page, with a next step for every missing thing (
plan_locked,no_installation,repo_not_accessible,migration_not_merged); a repository that is already a project is the answer, not an error (#422). A repository in another GitHub account says so with both accounts named, and a renamed or moved repository still connects through GitHub's redirect (#429) - billing: Checkout can send the customer back to the Migrate claim:
POST /api/billing/checkouttakesreturnTo, which is kept only as an internal path under/migrate/claimand dropped otherwise (absolute URLs,//host, backslashes,.., other pages) (#423) - settings: Project-scoped keys move into the project: an API keys tab holds the MCP keys and the Conversation API keys; the workspace tabs become Overview, Members, Billing, GitHub, Connected apps and AI; the MCP Cloud tab is gone and the old
?tab=ai-keys/?tab=mcp-cloudlinks redirect. An ee-backed feature is hidden in Community and otherwise shows an upgrade prompt that names the plans from the plan matrix (#430, #431, #432) - connected-apps: A copyable OpenAI Codex
config.tomlblock (OAuth sign-in, no key in the file) (#427) @contentrain/mcp3.9.32,@contentrain/query7.6.38,@contentrain/types1.59.0 (typed Migrate grant-status fields,renewal_centsandmonthly_list_centsfrom the contract) (#424, #426, #433, #434)- media: Uploaded images are kept as a private source; animated GIF/WebP stay animated; stored EXIF/XMP and unsanitised SVG can be swept (
pnpm media:strip-metadata) (#387, #385, #394) @contentrain/types1.49.0; the Migrate golden handoff comes from the package (#410, #399)- cdn: The delivery route enforces each key's scopes. Keys with the default scope are unaffected.
- activity: The project activity feed follows project access; workspace owners and admins keep the full view.
Full release notes (10 fixes, upgrade notes for self-hosted deployments): GitHub release v0.4.8.
v0.4.7
Released 2026-09-27 · compare changes
Enhancements
- models:
title_fieldnames a nested field by its dotted path;@contentrain/types1.30.0,@contentrain/mcp3.9.0 (#372)
Full release notes (3 fixes, upgrade notes for self-hosted deployments): GitHub release v0.4.7.
v0.4.6
Released 2026-09-26 · compare changes
Enhancements
- migration: Fetch old-site media only from the origin Migrate signed (#368)
Full release notes (upgrade notes for self-hosted deployments): GitHub release v0.4.6.
v0.4.5
Released 2026-09-26 · compare changes
Highlights
- New: a site migrated with Contentrain Migrate moves its media into Studio Media — a resumable job reads the files from the repository and fetches the ones left at the old site, then one commit points the site at them (#362, #363, #364, #366)
- The Migrate claim screen leads to the delivered site and its media (#365)
- The handoff is read from
.contentrain/migrate/handoff.jsonfirst (#360) - Branches say when approved content is waiting on the advance PR, and link it (#361)
Full release notes (4 fixes, upgrade notes for self-hosted deployments): GitHub release v0.4.5.
v0.4.4
Released 2026-09-24 · compare changes
Highlights
- New plans: $0.01 AI credits — Starter 300, Pro 1,600 plus 450 API credits — with existing subscriptions keeping their terms, shown to them everywhere they are quoted (#355, #356)
- Chat turns reserve their credits up front and stop inside their budget; a turn cut by the month's last credits says so and when credits come back (#335)
- With overage off nothing past the plan's allowance reaches the payment meter, in chat or in the Conversation API; a usage count that cannot be read refuses the call instead of reading as 0, and the billing screen shows it as unavailable (#335, #354)
- Canceling keeps paid access until the period ends, a failed renewal starts the grace period with an email, and a trial keeps running for a day while the provider's conversion is late (#336, #340)
- "Subscription activated" is sent on the first paid order, not before the charge (#345, #352)
- Public forms, comments, the Conversation API and MCP Cloud follow the billing plan and the overage lock; a locked workspace answers
402 payment_required(#337, #341, #349, #352) - Overage cannot be turned on for a subscription that cannot bill it, and limit messages show credits and the reset date (#334)
- Usage alerts by email; each meter shows its own reset date and overage price; members see usage read-only; cancel and pause notices (#343)
- New: a paid Migrate order includes a Studio trial, claimed with a signed token, one grant per order; Migrate trials are capped at Starter credits (#342, #344, #350)
- New: Opus 5.5; Studio-key trials keep to the non-premium models (#339, #344)
- New: media on a separate CDN host, an origin-transfer limit per plan with a 20 % grace, and a daily GB meter (#351)
- MCP Cloud write tools pause before the GitHub App's hourly budget runs out, so the editor keeps working (#346)
- URL imports reserve workspace storage like every other upload path (#348)
- Plan texts come from the catalog, so the agent no longer promises features a plan does not have (#347)
- A save fast-forwards the content branch instead of writing a merge commit each time (#338)
Full release notes (16 fixes, upgrade notes for self-hosted deployments): GitHub release v0.4.4.
v0.4.3
Released 2026-09-23 · compare changes
Highlights
- Turns on your own Anthropic key (BYOA) no longer use the workspace's AI credits and are never billed; Usage lists them on their own line (#331)
- Usage resets on your billing date instead of the 1st of the month (#277)
- AI and API usage is counted in credits: a heavy turn costs more than one, capped per message at 30 on Starter and 60 on Pro and Enterprise (#274, #280)
- CDN bandwidth and media storage are fixed limits; Usage marks them as such (#300)
- The agent writes to the locale you are working in, and says which one (#301)
- Behaviour change: asking the agent to delete an entry or change its status now applies to every locale unless you name one (#324)
- Edits made at the same time merge instead of overwriting each other, vocabulary included (#304, #327, #333)
- New: the agent can replace text inside a field without re-sending the whole field (#319)
- New: a chat attachment you save into content moves into the media library, and chat attachments count toward storage (#323, #317)
- The agent refuses to delete an entry other entries still reference, and resolves a linked site page to the entry it renders (#307, #316)
- Saves say whether they created or updated, set the status in the same commit, merge object fields key by key, and save document batches together (#305, #310)
- Brain queries filter, sort and paginate; Turkish requests are classified correctly and tool errors are reported (#308, #299, #306)
- Projects open faster: the cached project renders at once, without the serial load waterfall or duplicate requests (#322, #329, #332)
- CDN: a model that fails to build keeps its previous files, and a partial build is no longer reported as complete (#309, #318, #320)
- MCP Cloud writes work again, and moving a project to another instance rewrites its media addresses in one commit (#302, #328)
Full release notes (26 fixes, upgrade notes for self-hosted deployments): GitHub release v0.4.3.
v0.4.2
Released 2026-09-21 · compare changes
Enhancements
- review: Lift a one-entry edit that publishes, empties or rewrites (#273)
Full release notes: GitHub release v0.4.2.
v0.4.1
Released 2026-09-18 · compare changes
Full release notes (3 fixes, upgrade notes for self-hosted deployments): GitHub release v0.4.1.
v0.4.0
Released 2026-09-18 · compare changes
Enhancements
- review: Review a pending change as content, not as a git diff (#208)
- about: Name the running build on /about and /api/health (#224)
- content: Schedule an entry from Studio, and keep what MCP plans in meta (#229)
- comments: Ship comments v1 — read/submit API, moderation, agent tools, WordPress import (#231)
- comments: Finish the Studio surface — import upload, usage meter row, project default locale (#232)
- forms: Close the WordPress parity gaps — notifications, locale, per-form cap, detail modal (#233)
- migration: Take in the Migrate handoff — sync, overview card, agent context, comments (#234)
- media: Bulk ingest from URLs with an old → new URL map (#235)
- review: Request changes on a pending branch, visible to author and agent (#237)
- billing: Credit-weighted AI usage and plan-tier model gating (#243)
- chat: Keep the conversation cache warm across turns and tool iterations (#251)
- review: Decide an auto-merge from what changed, not from who asked (#257)
- review: Approve a plan, gate a release, and keep the receipt (#258)
- branches: Report where the content branch stands, in four states (#259)
- media: Stop buying the same bytes twice on a repeated ingest (#260)
Full release notes (20 fixes, upgrade notes for self-hosted deployments): GitHub release v0.4.0.
v0.3.0
Released 2026-08-15 · compare changes
Enhancements
- chat: Trial banner overlay, one-card composer, capped app shell (#182)
- project: Resizable, collapsible content panel (#183)
- vocabulary: Paste a glossary instead of typing it one term at a time (#188)
- content: Say what the row icons do, and what the media actually is (#189)
- shell: Let the sidebar be resized, and collapsed (#190)
- content: Read the title from the field the model declares (#192)
- content: Connect the search that was already built, and stop (#193)
- content: Filter and sort a listing by what the model actually declares (#195)
- content: Heal a diverged advance with the ecosystem's reconcile (#201)
Full release notes (11 fixes): GitHub release v0.3.0.
v0.2.1
Released 2026-07-27 · compare changes
Full release notes (2 fixes): GitHub release v0.2.1.
v0.2.0
Released 2026-07-17 · compare changes
Full release notes (10 fixes): GitHub release v0.2.0.
v0.2.0-beta.1
Enhancements
- Providers: Selectable auth × database provider pair — a Studio-managed
AuthProvideron plain PostgreSQL, chosen behind boot validation, that replaces Supabase GoTrue on managed deployments (portable migration lineage, RLS helpers, and a full 43-method PostgresDatabaseProvider) - Remote MCP: Studio-managed OAuth 2.1 authorization server, a projectId-less remote MCP endpoint behind the OAuth grant, and a Connected Apps panel to review and revoke remote MCP connections
- MCP: Bump
@contentrain/mcpto 1.10.0 (session fingerprinting, media tool classes) and expose the media tools over MCP Cloud - AI: Add Claude Sonnet 5 and consolidate the chat model list into a single-source catalog
- CDN: Emit per-locale content bundles for single-fetch delivery; require an explicit CDN bucket and alert on swallowed R2-teardown failures
- Auth: Directory-review support — env-gated reviewer login for app-directory submissions
Performance
- Agent: ~6x fewer GitHub API calls in the agent write path
- CDN: Serve the delivery hot path from in-process caches with conditional R2 reads
Bug Fixes
- Auth: Keep user sessions off the service-role client, pin the OAuth exchange
redirect_uritositeUrlbehind proxies, and let the OAuth module own both legs of the dance (its own CSRF state) - CDN: Stop a full rebuild from wiping out-of-band media binaries, and derive webhook build paths from the compare API rather than payload commits
- Git: Never auto-delete the source branch on merge (MCP 1.8.0)
- Brain: Fall back to a full rebuild off the default branch when
.contentrainis missing - Content: Handle document per-slug meta in status, copy-locale, and the UI; add 17 dictionary keys used in code but never defined
- Chat: Refuse media-intent uploads while a project's CDN delivery is off
Chore
- Ignore
.codex/agent local configs
v0.1.0
First stable release, closing out the v0.1.0-beta line.
Enhancements
- Media: Public media management API (
/api/media/v1) — CRUD routes, scoped API keys, and a scope-selection UI shared with CDN keys - CDN: Public media delivery with build-time path rewriting, plus edition/plan gating that aligns the Assets and CDN surfaces
- Editor: Source-mode markdown editor and an agent markdown-authoring guide
- Chat: Attach external files and links to conversations, with explicit attachment intent
- Agent: Publish/media/branch tools and relation-integrity checks at save; system prompt and enforcement aligned with governance and edition
- Content: Array-of-object field editing
- Observability: Sentry error and performance monitoring
- SEO: Page titles, head meta, and Open Graph tags
Bug Fixes
- Chat: Replace retired Claude model IDs, and fix turn streaming, document date validation, and live context reactivity
- Content: Merge document and collection/singleton saves with the existing entry instead of replacing, and resolve document paths under the model id
- Billing: Grant the free trial once per workspace, use the real
trial_end, and surface a clean error when the payment provider call fails - Members / Workspace: Owner keeps the owner role after inviting a member; drop a non-existent column from the
project_membersinsert - Config: Fail boot if the service-role key isn't actually
service_role - Forms / Webhooks / Branches: Render the "None" captcha option, add missing webhook dictionary keys, and decode percent-encoded branch route params
Documentation
- Close the mobile-responsive shell item (shipped since v0.1.0-beta.1)
Chore
- Standardize contentrain.io email addresses and dependency bumps
v0.1.0-beta.8
Enhancements
- MCP Cloud: Hosted HTTP endpoint, API key management, and a workspace settings tab for keys (Faz S6)
- MCP Cloud: Honor project workflow + plan for external writes, enforce tool allowlist, fix quota semantics, and improve onboarding
- Pricing: Simplify free tier, boost starter, upgrade Pro, and wire the enterprise CTA
- Billing: Polar payment plugin, usage outbox drainer, usage meters, Stripe overage billing, and trial-ending reminder emails
- Billing: Normalize payment state into
payment_accounts+ outbox - Scripts: Content-driven Polar sync (products, prices, meters)
- Email: Shared branded layout and Polar webhook notifications
- Legal / Runtime: Editions, deployment profiles, and an edition-aware license system with matching UI surfaces
- GitHub App: Connect-existing flow, repo-level access lifecycle (revoke / delete / rename), and ownership verification
- Chat: Durable internal tool trace persistence
- Content Engine: Align with @contentrain/mcp 1.5.0, query 6, and types 0.5.1
- Enforcement: Orphan feature cleanup — enforce or flag roadmap items
Performance
- AI: Anthropic prompt cache and cache token accounting
Bug Fixes
- MCP Cloud: Close launch blockers, exempt
/api/mcpfrom session auth, forward the client Accept header to the loopback server, and pass Retry-After as a number - Billing: Resolve self-host detection, redirect free workspaces to checkout, correct the Conversation API actor model, and revert reserved message slots on failed or aborted chats
- Chat: Preserve assistant text blocks across tool iterations, persist conversation trace rows reliably, and remove non-existent columns from the conversations query
- Auth: Exempt forms and the Conversation API from session middleware
- Settings: Plan display, self-host UX, and trunk-based branch model
- CI / Deploy / DB: Use CHANGELOG.md for release notes, pin pnpm, fix deployment routing, and restore Supabase role grants
Refactors
- Adopt the @contentrain/mcp
RepoProvidersurface and delegate content operations, validation, and serialization to @contentrain/mcp (Faz S1–S4) - Billing: Introduce a payment provider plugin registry and derive
PLAN_*constants from.contentraincontent - Chat: Shared history builder with model / plan / source-aware budgets
Documentation
- Reflect MCP integration and S6 prep in the roadmap, align deployment docs with the trunk-based flow, and finalize License v1.0
Chore
- Dependency bumps and a hardened DB baseline for portability
Tests
- Chat: Update integration assertion to expect populated
assistantText
v0.1.0-beta.7
Enhancements
- API: Add CLI integration endpoints for the Studio CLI
Bug Fixes
- Content: Align validation and serialization tests with @contentrain/types
Refactors
- Content: Migrate validation and serialization to @contentrain/types
Documentation
- Update roadmap and CLAUDE.md for CLI integration and overage billing
v0.1.0-beta.6
Enhancements
- Billing: Add overage billing system with a usage dashboard
v0.1.0-beta.5
Bug Fixes
- Security: Atomic plan limit checks and GDPR audit logging gaps
Documentation
- Mark resolved deferred items and fix the media route test mock
Chore
- Dependency bumps (Docker actions, testing group, ESLint, Tailwind CSS, Vue group,
@types/node)
v0.1.0-beta.4
Bug Fixes
- Billing: Remove per-seat pricing, adopt a flat-rate model, and align the Pro seat limit to 10
- Webhooks: Complete all 8 webhook event dispatches and fix test coverage
Documentation
- Add public ROADMAP.md and align deferred items across all docs
v0.1.0-beta.3
Bug Fixes
- Release: Include the full Docker build context
Documentation
- Align Studio open-core positioning
v0.1.0-beta.2
Tests
- e2e: Stabilize CDN panel rebuild assertion
v0.1.0-beta.1
Initial beta release of Contentrain Studio.
Enhancements
- Supabase auth provider, API routes, and auth UI
- Auth UI with Contentrain SDK, Annon icons, and Tailwind CSS 4 theme
- Logo assets, favicon, and Radix Vue atom components
- Nuxt layout system with NuxtImg and workspace three-panel
- Auth guard with redirect
- Auth-marketing Contentrain model
- Syne display font for headings and marketing content
- Error page UI strings
- Workspace hierarchy (User -> Workspace -> Project)
- Sidebar-first layout
- GitHub App provider with installation flow
- ConnectRepoDialog for repository connection
- Project workspace page with chat + context panel
- EmptyState, Skeleton atoms, NuxtLoadingIndicator
- Dark/light theme toggle, workspace settings
- Content snapshot API + context panel with model list
- Sidebar model section in project view
- vue-sonner toast notifications
- Content model browsing, slug editing, sidebar model selection
- IndexedDB snapshot cache, view transitions
- Type-aware content field display (all 4 content kinds)
- @contentrain/types v0.2.0 integration
- Domain-grouped model list with kind icons and entry counts
- Collapsible domain groups
- Markdown preview with Tailwind Typography
- Nested objects and array-of-objects rendering
- Locale switcher in context panel
- GitProvider write operations
- Content Engine (validation, serialization, write path)
- Database migration, encryption, Anthropic SDK
- AIProvider interface, Anthropic implementation, chat SSE endpoint
- Chat UI (composable, bubbles, tool cards, input, panel)
- Project initialization flow (Path B)
- Inline content editing (click to edit, creates branch)
- Branch management API + sidebar pending changes
- Live project state in system prompt
- Context pin + drag system (share content with agent)
- Comprehensive Contentrain architecture in system prompt
- Vocabulary + context.json loading
- Vocabulary + project stats in content panel overview
- Radix Vue tooltips on project stats
- Meta files, relation integrity, unique constraints, document support
- Context.json tracking on every operation
- Entry status badges + document kind write support
- Modal-based content editor + CRUD chat prompts
- Branch diff UI, role-based workflow, GitHub webhook
- Workspace and project member management UI
- Project settings modal, vocabulary editing, config API
- Chat project switch reset, avatars, context attach to message
- Conversation history, model selection, API endpoints
- Enterprise edition structure + license feature flags
- Comprehensive plan-based feature gating
- Rate limiting + BYOA key management UI
- copy_locale tool, branch protection PR fallback, command palette
- Auto-detect GitHub App installation on tab focus
- CDN content delivery infrastructure
- CDN project settings UI
- CDN usage metering and per-key rate limiting (EE)
- CDN real-time build progress via SSE
- Plan badge on workspace switcher + session persistence
- Command palette with search, commands, and recents
- Content publish workflow + CDN status filtering
- Clickable publish/unpublish status badge
- Diff-based stale object cleanup in CDN builds
- Boot-time config validation via Nitro plugin
- Starter kit templates, repo name display
- Media management infrastructure (provider, migration, variants)
- Media processing pipeline (Sharp optimizer, variants, blurhash)
- Media API routes (upload, list, CRUD, URL import, bulk ops)
- Media agent tools (search, upload from URL, get metadata)
- Asset manager UI (composable, card, uploader, detail, grid panel)
- Content field media integration (picker, thumbnail preview)
- CDN media manifest, endpoint media serving, usage tracking
- Media UI string dictionary entries (37 keys)
- Full-screen asset manager modal
- Upload UX with XHR progress bar in drag-drop zone
- Media assets in chat context pin system
- Empty state illustrations, GitHub installation checks, Pro CTAs
- Form submission infrastructure (public endpoints, validation, security)
- Form config API, Turnstile captcha, honeypot, HTML sanitization
- Outbound webhooks (CRUD, deliveries, retries, HMAC signing)
- Conversation API (public endpoints with API key auth)
- Conversation key management (CRUD, model/locale restrictions)
- Brain content analysis tools (SEO audit, locale parity, quality score)
- Schema validation tool with health scoring
- Profile + account settings (display name, avatar, account deletion)
Bug Fixes
- Comprehensive security audit (30+ fixes across auth, forms, CDN, media, webhooks)
- Numerous UX, accessibility, and error handling fixes
Documentation
- Open source governance suite (LICENSE, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY)
- Deployment guides (SELF_HOSTING, DOCKER, DEPLOYMENT)
- README rewrite
INFO
For the complete commit-level changelog, see the GitHub releases page.
Related Pages
- Contributing -- development setup and PR process
- Self-Hosting -- deployment guide