Skip to content

Kirby

The Orimora Sync Kirby plugin imports the published documents of a shared folder into Kirby pages, following the same browse-import (pull) pattern as the WordPress plugin: a read-only folder-share token authenticates read-only calls to Orimora, and you map each Orimora collection to a Kirby parent page + template. Orimora stays the source; the Kirby-specific knowledge (field format, escaping) lives in the plugin.

Orimora ──Pull-API (Bearer kb_…)──▶ Kirby plugin ──▶ Kirby pages
(source) (adapter)
  1. In Orimora, share a collection (collection menu → “Connect to a service”, target CMS) to mint a read-only, published-only token (kb_…).
  2. In Kirby, set the connection in site/config/config.php — the token is a secret, so it lives in config, never in Panel-editable content:
    return [
    'orimora.sync.url' => 'https://wiki.example.com',
    'orimora.sync.token' => 'kb_…',
    'orimora.sync.routeKey' => '…random…', // optional: enables the cron route
    ];
  3. In the Panel, open Orimora in the menu: load the shared collections, map each to a Kirby parent page + template + status, and Save mapping. The target parent pages and templates must already exist in your Kirby site.
  4. Hit Sync now — or run it headless. Each published document becomes a page under its mapped parent; a re-sync overwrites title + body of the pages it owns, and documents removed or unpublished in Orimora are set to unlisted (never deleted).

Either the Kirby CLI command:

Terminal window
kirby orimora:sync

or the secret-gated route (after setting orimora.sync.routeKey):

Terminal window
curl -fsS "https://your-site.example/orimora/sync?key=<routeKey>"

Clone the orimora-kirby-importer repository into site/plugins/orimora-sync (or clone it elsewhere and symlink it there):

Terminal window
git clone https://github.com/Orimora-app/orimora-kirby-importer site/plugins/orimora-sync

The built Panel asset is committed, so it works as-is — no build or composer install needed to run it.

  • The token lives in config.php, never in a Panel-editable content file — it stays out of backups and version control. The Panel only ever sees whether a connection is configured.
  • The trust boundary is outbound: the plugin only calls Orimora with the read-only, published-only token. It can neither write to Orimora nor expose drafts.
  • Field-separator safety. Content is written through Kirby’s Page API, whose serializer escapes the ---- field separator automatically — a Markdown body containing ---- (thematic breaks, tables, Setext headings) can never inject foreign Kirby fields (the class of advisory GHSA-x5mr-p6v4-wp93).
  • Panel API routes are guarded by Kirby (an authenticated Panel user); the cron route by a timing-safe key comparison.

Unlike the WordPress plugin — where the CMS owns slug/status/SEO — here Orimora owns title + body and a re-sync overwrites them. Treat imported Kirby pages as read-only mirrors and tell your editors so.

  • Flat tree — a folder’s documents land at one level under the parent (nesting is v2).
  • Images stay as absolute URLs in the Markdown (local sideload is v2).
  • Full pull each sync (not incremental) — this keeps orphan detection correct.
  • One folder share, connection configured in config.php (Panel-editable connection is v2).