Skip to content

Release history

Contentrain/ai releases

Local-first MCP server for AI content governance — 13 tools for model/content CRUD, validation, normalization, and i18n across any framework.

All releases

102 shown

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

Security behavior changed
@contentrain/[email protected] Breaking risk
Auth RBAC

Field constraint enforcement

Upgrade now
[email protected] Maintenance
Dependencies Breaking upgrade

Routine maintenance and dependency updates.

Security behavior changed
@contentrain/[email protected] Breaking risk
Auth Breaking upgrade

Enforced field validation

Upgrade now
[email protected] Maintenance
Dependencies

Routine maintenance and dependency updates.

@contentrain/[email protected] Breaking risk
⚠ Upgrade required
  • Update code that previously accessed `entry.body` from `all()` results to first retrieve the full document with `bySlug(slug)`, then read `body` from the returned object.
Breaking changes
  • `CdnDocumentQuery.all()` now returns `DocumentIndexEntry[]` (omitting `body`) and `first()` returns `DocumentIndexEntry | undefined`; reading `.body` is a compile error. Use `bySlug(slug)` to fetch the full document including `body`.
Full changelog

Major Changes

  • d617dab: feat(sdk)!: CDN document().all() returns index entries, so reading .body no longer compiles

    On the CDN, document(model).all() reads the model's _index, which carries
    frontmatter only — the body lives in the per-slug document and is reachable via
    bySlug(). But all() was typed Promise<T[]>, and the generated document type
    declares body: string. So entry.body type-checked, returned undefined at
    runtime, and pages rendered their headings and dropped their prose — with no
    error, no warning, and a passing typecheck.

    The trap is that the bundled runtime's all() does carry bodies. Code written
    and tested against bundled delivery compiled and passed, then quietly rendered
    empty on CDN. The two modes genuinely differ in shape, so they no longer share
    one return type.

    BREAKING: CdnDocumentQuery.all() now returns DocumentIndexEntry<T>[]
    (Omit<T, 'body'>), and first() returns DocumentIndexEntry<T> | undefined.
    Reading .body off either is now a compile error. Fetch the body with
    bySlug(slug), which returns { frontmatter, body, html }. Runtime behaviour is
    unchanged — this only makes the types tell the truth about what was already
    being returned.

    // before — compiled, rendered nothing
    const sections = await client.document<GuideSections>("guide-sections").all();
    sections.map((s) => renderMarkdown(s.body)); // undefined at runtime
    
    // after — the first line is a compile error; fetch bodies explicitly
    const index = await client.document<GuideSections>("guide-sections").all();
    const full = await Promise.all(index.map((s) => q.bySlug(s.slug)));
    full.map((d) => renderMarkdown(d!.body));
    

    Type-level contracts are now asserted in *.test-d.ts via vitest --typecheck,
    since tsconfig.json only covers src and never type-checked the tests.

Review required
@contentrain/[email protected] New feature
Auth RCE / SSRF

Media provider tools

Review required
@contentrain/[email protected] New feature
Auth RBAC RCE / SSRF

Media management tools

Review required
@contentrain/[email protected] New feature
RCE / SSRF Breaking upgrade

Media provider facet + tools

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

Review required
@contentrain/[email protected] New feature
Auth RBAC RCE / SSRF

Media tools + types

Review required
@contentrain/[email protected] New feature
Auth RBAC

MCP capability‑awareness + session binding

Review required
@contentrain/[email protected] Breaking risk
Breaking upgrade

mergeBranch defaults

Config change
@contentrain/[email protected] New feature
Breaking upgrade

Auto-delete remote cr/* branches

No immediate action
@contentrain/[email protected] Breaking risk

GitHub optimizations + local write batching

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] New feature

Media path normalization + config

Review required
@contentrain/[email protected] New feature
Breaking upgrade

Media path normalization + config

Review required
[email protected] Mixed
Auth RBAC

Media path normalization + dependency updates

Config change
@contentrain/[email protected] New feature
Breaking upgrade

Media path normalization

No immediate action
@contentrain/[email protected] New feature

Media path normalization + config

Review required
@contentrain/[email protected] Breaking risk
Breaking upgrade

Stop committing context.json

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

Review required
@contentrain/[email protected] Bug fix
Auth RBAC

Structured git/hook error handling

@contentrain/[email protected] Breaking risk
⚠ Upgrade required
  • Update code that accesses `.content` on document entries to use `.body`.
  • Regenerate the client after updating dependencies.
  • Ensure CommonJS usage includes the required `await init()` call.
Breaking changes
  • The generated document body field is now `body` (was `content`). Update consumers reading `.content` to use `.body` and regenerate the client.
Notable features
  • `DocumentQuery.sort()` added — documents can now be ordered (e.g., by `published_at`).
  • `include()` now resolves relations across i18n boundaries, resolving both i18n:false and i18n:true targets regardless of explicit locale.
  • Generated types corrected: duplicate `slug` member removed; relation fields typed as `id | ResolvedTarget`; string frontmatter no longer numerically coerced; `where(field, 'ne', x)` on array fields now acts as the complement of `eq` (membership).
Full changelog

Major Changes

  • 149fa6b: Fix generated client correctness and align with the platform.

    Breaking: the generated document body field is now body (was content), matching @contentrain/types DocumentEntry.body and the MCP document_save schema. Update consumers reading .content on document entries to .body, and regenerate the client.

    Also fixed in the generated runtime + types:

    • Dictionary interpolation was broken in generated output — the param regex lost its escaping during emit, so dictionary('ui').get('key', { name }) returned the raw {name} template. Now interpolates correctly.
    • DocumentQuery.sort() added — documents can now be ordered (e.g. by published_at); previously only collections could sort, and calling .sort() on a document query threw.
    • include() now resolves relations across i18n boundaries — an i18n:false relation target (e.g. author) is resolved whether or not .locale() was set, and i18n:true targets resolve when no explicit locale is passed. Previously one side silently stayed an unresolved id string.
    • Generated types corrected — no more duplicate slug member when a document model declares a slug field; relation fields are typed as id | ResolvedTarget (and include(...) arguments are constrained to model keys) so resolved relations are no longer plain string.
    • String frontmatter is no longer numerically coerced — a string-typed field like "007" keeps its value instead of becoming 7.
    • where(field, 'ne', x) on array fields is now the complement of eq (membership), matching eq semantics.
    • Removed dead/misleading CJS proxy code; documented the required await init() for CommonJS.

Patch Changes

Review required
@contentrain/[email protected] New feature
Auth RBAC

Git hardening + context.json

Config change
@contentrain/[email protected] New feature
Auth Breaking upgrade

Multi-tenant MCP + GitHub App auth

Review required
@contentrain/[email protected] Breaking risk
Auth RBAC

Provider config expanded

No immediate action
@contentrain/[email protected] New feature

Docs alignment, tool catalog update

Review required
@contentrain/[email protected] Breaking risk
Breaking upgrade Auth

Provider‑agnostic engine + GitHub/GitLab

No immediate action
@contentrain/[email protected] Bug fix

CLI resolution fix + shared dir publish

No immediate action
@contentrain/[email protected] New feature

CLI tips + MCP redesign + Agent Skills

No immediate action
@contentrain/[email protected] New feature

CLI tips, MCP redesign, Agent Skills integration

No immediate action
@contentrain/[email protected] New feature

CLI tips + MCP redesign + Agent Skills

No immediate action
@contentrain/[email protected] New feature

CLI tips + Scan redesign + Agent Skills integration

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

Review required
[email protected] Breaking risk
Breaking upgrade Dependencies

Git transaction rewrite

No immediate action
@contentrain/[email protected] Breaking risk

Worktree‑isolated git transaction rewrite

Review required
@contentrain/[email protected] Breaking risk
Breaking upgrade

Dedicated contentrain branch + worktree isolation

No immediate action
@contentrain/[email protected] Breaking risk

CDN transport + query operators

Config change
@contentrain/[email protected] Breaking risk
Breaking upgrade

Agent Skills migration

No immediate action
v1.0.6 New feature

Granular IDE rules

Upgrade now
[email protected] Maintenance
Dependencies

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

No immediate action
@contentrain/[email protected] Maintenance

Routine maintenance and dependency updates.

release-2026-03-16 Breaking
⚠ Upgrade required
  • @contentrain/query and @contentrain/mcp versions below the new minimum are deprecated and will be removed in a future release
Breaking changes
  • Minimum required version of @contentrain/query is now 5.0.0 (previous versions are deprecated)
  • Minimum required version of @contentrain/mcp is now 1.0.0 (previous versions are deprecated)
Full changelog

Published packages:

Deprecated:

  • @contentrain/query < 5.0.0
  • @contentrain/mcp < 1.0.0

Beta — feedback welcome: [email protected]