Shipping Externa Core 1.0 — notes from the maintainer

Tagsexternalaravelopen-source

On 21 September 2026 I cut Externa Core v1.0.0 — the first stable GA after the public betas. Full operator notes live on the Externa blog and in the changelog. This post is the personal side: why the project exists, and what “stable” meant for me as maintainer.

Why Externa

I wanted a self-hosted, MIT-licensed headless CMS that feels native to Laravel operators: admin UI, Public CMS REST (/api/v1), GraphQL, Spatie RBAC, files, outbound webhooks — without forcing a SaaS tenancy model. Frontends stay free to be Next, Nuxt, or whatever; content stays on your server.

That stack is what I already ship for clients. Externa packages the boring parts so I (and anyone else) can reuse them.

What GA changed in practice

The GA cut was not a marketing sticker. Install went Packagist-first (composer create-project qiick/externa-core), Docker/GHCR quick-deploy landed for Compose users, and outbound webhooks refuse delivery without a signing secret — a real behavior change vs early betas. Admin polish (block reorder, field control heights) shipped in the same tag.

If you run Externa today, start from current docs (quick start, upgrade) — Core has moved past 1.0.0. Treat the GA post as history; treat externa.qiick.io and docs as source of truth.

Where to go next

I keep product release notes on the Externa site so operators get install steps and breaking changes in one place. Here I write about the decisions behind the work.