explore permission: link and image pickers list the entries a
role can explore, without opening them in the dashboard. Allowing read
allows explore, denying read denies it unless explore is allowed.{field: Article.visibility.germany, deny: {all: true}}.user that commits. alinea dev --role <name>
signs in the local user with that role, for saves, hooks and cms.user().collapsed: false type option expands an entry's children in the
sidebar content tree from the start.alinea/components, the public component library the dashboard is built
from, to build custom fields and views. Dashboard icons are available from
alinea/dashboard/icons.Field.localiser to keep every locale of a value in a single field, with
fallbacks.overview option to container types and roots to configure how the
dashboard lists their children: columns (Config.column) with per-type
selects, formatting and custom cells, built-in type, status, updated and
author columns, sorting by column header (kept in the URL), the default
sort, layout, card thumbnail and toolbar actions. The media library
lists previews, dimensions, sizes and file types. EntryTable in
alinea/cms renders the same columns in custom views. overview.sort
replaces orderChildrenBy, summaryRow and summaryThumb are deprecated
and the overview field option only applies when the parent defines no
columns.alias filter, Query.aliases). The metadata field
also stores createdAt, createdBy, updatedAt and updatedBy.beforeCommit and afterCommit handler hooks to rewrite changes before
they are committed, or to revalidate, notify and deploy after.syncInterval is now a fallback, defaulting to
60 seconds.alinea dev (http://localhost:4500/mcp) so coding
agents can read the schema and create, edit, publish, move and delete entries
and upload media through the dashboard's save path.adminPath, maxUploadSize and tracer config options, and a
workspace mediaUrl option.Field.select.multiple, min and max for lists, images and link
options in rich text, rich text anchors, link anchors and suffixes, and
allowDuplicates for links.alinea/backend (createBackend, auth,
database, github, uploads) with S3 and Supabase uploads and user
management.handlerUrl in the config. dashboardFile is deprecated in favor of
adminPath.${adminPath}/file/... on the site: image and file
links now return that URL instead of the stored location.Config.media() to take root options, children move to children.Field.metadata() and the step option of
Field.time().extensions is now a function that
receives the default extensions, defaultToolbar takes an options object.Edit.move to {id, target, dropPosition}.remote handler option and the unused entry hooks. OAuth2 backends
require validateClaims. Drafts are no longer stored in the database.alinea/ui except RichText, and the form atoms
from alinea/dashboard. The useField hooks are deprecated.data- attributes on
rich text nodes.withAlinea now uses the CLI-provided admin
path, proxies the dashboard in development, rewrites to the generated
dashboard in production and supports custom dashboardFile values.baseUrl to be configured per environment.EntryUrlMeta.llms-full.txt to the published package.cms.user() calls work in preview environmentsnext as a direct dependency to the
alinea package. While we're currently focused on providing a clean Next.js
integration, Alinea is not tied to Next.js and should not depend on it.alinea init command for a Next.js website will now auto-create
the handler route in app/(alinea)/api/cms/route.ts. The generated cms.ts
config file also includes more default options such as the baseUrl and
handlerUrl.enableDrafts: true. Drafts and archived entries will now show their
status in the sidebar as well. Workflows are adjusted to be able to create a
draft entry, including draft children. These will show up as "unpublished" and
can be published in one go. Further stability improvements were made to
updating entry statuses.cms.find and cms.get so they work reliable
in non-strict Typescript codebases as well.Query.parent, Query.next and Query.previous
which were incorrectly typed as an Array.Fix removing field contents in Edit.update. Pass an undefined value to remove
field contents:
await cms.commit(
Edit.update({
id: '...',
set: {removeMe: undefined}
})
)
Fix processing link data correctly even it contains legacy data
Add the Infer.Entry and Infer.ListItem types which can be used to infer the type of an entry or list item from a query.
type Entry = Infer.Entry<typeof EntryType>
const entry: Entry = await cms.get({type: MyType})
type ListItem = Infer.ListItem<typeof ListType>
const list: Array<ListItem> = await cms.get({select: MyType.list})
withAlinea export found in
'alinea/next'.cms.find/get is rewritten to take a single query object.
Have a look at the docs to see how to use the new query api.Field.create.npx alinea build --fix.