Skip to content

LumiBase v0.23.0

Latest

Choose a tag to compare

@github-actions github-actions released this 16 Jul 04:24

Version

  • v0.23.0

Date

  • 2026-07-14

Highlights

  • License changed to Apache License, Version 2.0. v0.22.0 remains the
    final MIT-licensed release; see Changed below.
  • Git integration (GitHub / GitLab). Per-site repository connections with
    PR/CI tracking, GitOps reconcile, and opt-in preview environments.
  • Change Feed: schema-change capture + long-poll, plus a documented API/SDK
    surface.
  • Visitor / pageview counting and extension signing + verify-everywhere
    land as first-party modules.

Added

  • Git integration (GitHub / GitLab). Per-site repository connections with
    GitHub App / GitLab App or OAuth/PAT auth (tokens encrypted at rest). Tracks
    pull requests + CI, stores CI logs for replay, posts a
    lumibase/content-validation commit status, runs GitOps reconcile of
    lumibase/intents.json into content intents, records commit↔content
    provenance, and provisions opt-in ephemeral preview environments per PR. New
    git-sync agent role with conservative L1 autonomy. Studio: Settings →
    Integrations → Git repositories
    . Migration 0009_git_integration is additive
    (CREATE TABLE IF NOT EXISTS, tables prefixed lumibase_git_* per ADR-010) —
    no backfill needed. Registry row #70.

    Optional env: GITHUB_CLIENT_ID/SECRET, GITHUB_APP_ID/PRIVATE_KEY (PKCS#8),
    GITLAB_CLIENT_ID/SECRET, LUMIBASE_PUBLIC_URL. Requires existing
    ENCRYPTION_KEY to manage integrations.

  • Change Feed API contract + SDK. apps/cms/openapi.yaml now documents
    every /cdc/events and /cdc/subscriptions/* endpoint (schemas
    EventEnvelope, ChangeFeedSubscription, ChangeFeedDelivery, …), and
    @lumibase/sdk ships typed command resources — readCdcEvents,
    listCdcSubscriptions, createCdcSubscription, updateCdcSubscription,
    deleteCdcSubscription, ackCdcSubscription, replayCdcSubscription,
    dispatchCdcSubscription, listCdcSubscriptionDeliveries — with the
    matching Cdc* result/input types.

  • Change Feed captures schema changes + long-polls. The outbox gained a
    resource discriminator (migration 0008_cdc_resource_column, default
    item), so collection/field DDL now emits collections.* / fields.*
    events alongside items.* (envelope type is <plural-resource>.<operation>;
    schema payloads are stored verbatim — masking stays item-only). GET /cdc/events accepts ?wait=<seconds> (≤25) to long-poll: the server holds an
    empty first read until an event arrives, cutting idle polls. settings.*
    capture, realtime WS fan-out, consumer-group parallelism, inbound/two-way
    sync, and outbox partitioning are specced in .kiro/specs/cdc-feed-roadmap/.

  • Visitor / pageview counting (lumibase-pageview-counter). Built-in
    pageview module with four per-site strategies (db-rollup default,
    hot-counter, cdc, hll), selectable via the pageviews settings key. Adds
    an atomic counter to the runtime (CacheProvider.increment; Redis INCRBY on
    Docker, a new PageviewCounter Durable Object on Cloudflare) plus a public
    beacon POST /api/v1/pageviews/:site_id/hit and authenticated
    GET /api/v1/pageviews/stats. Attribution is consent-gated (analytics) and
    privacy-preserving (salted visitor hash, never a raw IP). Counters flush to
    lumibase_pageview_daily every 5 minutes.

  • Extension signing + verify-everywhere. Detached Ed25519 signatures are now
    verified at every install/load path (marketplace install, generic CRUD, the
    dynamic endpoint mount, hook dispatch) — official lumibase-* extensions are
    fail-closed. New lumibase_publisher_keys registry (DB overrides env for
    official/revoked), server-derived isOfficial, and a signing CLI
    (@lumibase/extension-cli: keygen/sign/verify). Official extensions with
    autoInstall/enabledByDefault are installed during setup / on site-create.

Changed

  • Project license updated to the Apache License, Version 2.0 (from MIT),
    effective this release.
    v0.22.0 is the final MIT-licensed release; no
    further 0.22.x patch will be issued under MIT. LICENSE and the
    publishable packages' package.json (create-lumibase, @lumibase/sdk,
    @lumibase/mcp-server, @lumibase/extension-sdk) now declare
    Apache-2.0.

Fixed

  • Release Docker image could lose its arm64 variant. release.yml
    (amd64-only, no QEMU) and docker-publish.yml (multi-arch) raced to push
    the same semver tag; the amd64-only build could win and clobber the
    multi-arch manifest (forcing Rosetta on Apple Silicon). release.yml now
    builds linux/amd64,linux/arm64 via QEMU; docker-publish.yml only
    publishes edge from main, so semver/latest tags come solely from
    release.yml.

Notes

  • Docs: anti-abuse mechanisms & best practices guide, OpenAPI setup-endpoint
    documentation, and a data-import guide.

Migrations

  • 0008_cdc_resource_column, 0009_git_integration, 0010_pageviews,
    0011_extension_signing — all additive (CREATE TABLE IF NOT EXISTS /
    ADD COLUMN IF NOT EXISTS, all defaulted). No data backfill required.

Upgrade steps

  • Cloudflare only: deploy the new PAGEVIEW_COUNTER Durable Object binding +
    DO migration tag="v2" (new_sqlite_classes) and the added */5 * * * * cron
    trigger (already in wrangler.toml for every env). Missing the DO binding
    degrades hot-counter/hll to db-rollup (fail-soft).
  • For official extensions to verify on an existing instance: set
    MARKETPLACE_PUBLIC_KEYS to include the official key (lumibase-official-v1)
    and run setup key-seed / a one-time reconcile. LUMIBASE_EXT_SIGNATURE_POLICY
    defaults to require (set warn to soften third-party enforcement).
  • For Git integration: set ENCRYPTION_KEY (if not already) plus the
    provider env vars above to enable connecting repositories.