Repository navigation
v1.2.0
Released 2026-10-18 from develop (PR #176). Milestone 1.2.0: 29 closed items.
Features
- Editorial approvals for versioned collections:
approvals_required, submit/approve/reject, promotion gate, a review-list filter, webhook eventsitem.submitted/item.approved/item.rejected, and the permissionscan-submit-collections/can-approve-collections(#48) - Translation helpers on the item form: a locale switcher showing per-locale completeness (filled/total), "Apply to all locales" / "Apply to empty locales", and per-field "Copy from {locale}" (#49). Corrected 2026-10-21: an earlier version of these notes described a side-by-side source/target workspace that was replaced before this release.
- AI field translation on the item form (
ContentTranslatorplus a translate endpoint) (#193) - Collection layouts: optional kanban (select/radio) and calendar (date) views; table stays the default (#47). Kanban columns lazy-load and drag-and-drop order persists via
board_sort; the calendar has multiple views and drag-to-reschedule; items-list toolbar filters (#193) - Slack and Telegram notifiers on the domain event bus. Messages include title, actor, status and an admin link, and each project can mute event types (
notifier_event_types) (#39, #199) - Collaborative presence and soft lock via Echo: avatars, whisper lock, stale-save protection with
expected_updated_at(#50) - Optional Meilisearch sync of published items, using queue jobs and the Compose profile
meilisearch(#40) - Optional git export of published items to a remote: JSON/Markdown, deploy-key SSH, dry-run (#41)
- CMS import profiles
directusandwordpressforImportRemoteJson(#30) - Optional OIDC/SSO login (Socialite plus issuer discovery). Accounts link by verified email; JIT provisioning is off by default (#29). A Keycloak QA profile ships in
compose.oidc.yaml - Official Nuxt headless starter, qiick-io/externa-nuxt-starter, plus starter conventions in
docs/starters.md(#152, #156)
Fixes
- Meilisearch: the index is now created with
primaryKey=id. Before this fix, documents were silently not indexed (#179) - Git export: clones use
--template=so they work on sandboxed filesystems, and empty bare remotes are bootstrapped (#179, #182) - OIDC: callback validation errors now redirect to login instead of looping back to the IdP, and SSO rejection errors show on the login page
- AI translate now updates React-controlled TipTap/markdown fields (#193)
- Telegram test in Project settings runs synchronously and shows Bot API errors; tokens are validated against the BotFather format (#183)
Security
- The OIDC client secret and the Telegram bot token are stored encrypted (#29, #39)
- npm lockfile bumps (
concurrently/shell-quote,source-map-js) sonpm audit --omit=dev --audit-level=highpasses (#182)
Breaking changes
- None expected. All new integrations (SSO, Meilisearch, git export, notifiers, approvals) are opt-in.
Upgrade notes
- Back up the database.
- Run
composer install(this addslaravel/socialite ^5.31), thennpm ci && npm run build. - Run
php artisan migrate. This adds the approvals,board_sort,notifier_event_typesand OIDC/notifier settings columns. - Restart the queue workers (Horizon) and Reverb. Presence and the Meilisearch/git-export jobs depend on them.
- Optional: enable the Compose profiles
meilisearchand/orcompose.oidc.yaml(QA only), and configure SSO, notifiers and approvals in Project settings. - Docker: pull
ghcr.io/qiick-io/externa-core:1.2.0once thev1.2.0tag publishes.
Docs: https://docs.externa.qiick.io (companion release externa-docs 1.1.16)