Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
🍫 Best practice Nuxt and KQL starter for your headless Kirby CMS

Free Bootstrap 4 design system with over 100 components, pre-built pages, and a full UI kit for faster web projects.
Cacao Kit (Frontend) is an open-source Nuxt starter kit that turns a headless Kirby CMS backend into a feature-rich frontend, using a block-first architecture and Kirby Query Language (KQL) for all content.
Cacao Kit is a production-ready Nuxt starter kit for headless Kirby CMS, created by Johann Schopplich. It consumes content from a Kirby backend through KQL queries secured by a bearer token, and renders every page through a catch-all route that maps Kirby layouts and blocks to Vue components. The output is either a fully static site generated with pnpm run generate or a server-side rendered Nuxt app built with pnpm run build. It is the direct evolution of the simpler Kirby Nuxt Starterkit and is designed to pair with the separate Cacao Kit backend repository.
This kit bundles the tools needed to build a headless Kirby frontend out of the box.
[...slug].vue, which chooses between column-based layouts and linear blocks based on the content received from the CMS.app/queries/ and can be typed with kirby-types, as shown in the example returning an excerpt via page.text.excerpt(300).@nuxtjs/i18n, and Kirby content can be fetched per language by passing the current locale to useKql.app.vue and UnoCSS is already configured.NUXT_PUBLIC_SITE_URL is an optional environment variable for social sharing and SEO.app/pages/about.vue for custom Kirby blueprints with custom fields.Three groups get the most value from this starter: developers already using Kirby, Nuxt developers who want a ready-made headless setup, and teams shipping multilingual sites.
@nuxtjs/i18n integration to serve different languages from the same Kirby backend.With Cacao Kit you can extend block types, run targeted KQL queries, and deploy to static or server environments.
app/components/Kirby/Block/ and register it in Blocks.vue to extend the block renderer with your own content types.app/queries/ and fetch them from any component with useKql, passing a language for localized content.pnpm run generate to produce a dist/ directory for any static host, or pnpm run build for server-side rendering; the only required environment variables are KIRBY_BASE_URL and KIRBY_API_TOKEN.The workflow is straightforward: install, configure environment variables, then run a dev, generate, or build command.
corepack enable and install dependencies with pnpm install.KIRBY_BASE_URL to your Kirby backend and KIRBY_API_TOKEN for bearer authentication.pnpm run dev (visit localhost:3000) or run pnpm run generate / pnpm run build for production.Cacao Kit is distributed as free open-source software under the MIT License.
Here are answers to the most common questions.
Yes, the starter kit is open source under the MIT License, so you can use it for personal and commercial projects without paying a fee. The license is held by Johann Schopplich.
It requires a headless Kirby CMS backend that exposes Kirby Query Language (KQL) over HTTP. You need to set KIRBY_BASE_URL to the backend and KIRBY_API_TOKEN for authentication.
Yes, it includes full internationalization through @nuxtjs/i18n. KQL queries can be executed per language by passing the current locale to useKql, and the project offers a separate branch without i18n for projects that do not need it.
Create a Vue component in app/components/Kirby/Block/, type its props with the block's name, then register the component in app/components/Kirby/Blocks.vue under the block's name.
Yes, run pnpm run generate to create a fully static dist/ directory that can be hosted on any static hosting service. For SSR, run pnpm run build instead.
