Beetl Docs
Getting started

Release notes

What changed, newest first.

Newest first. Dates are merge dates, taken from the engineering changelog rather than from a marketing calendar, so some entries are internal changes that happen to matter to you.

Beetl ships continuously. There are no numbered releases.

September 2026

2026-09-01 — Secrets backend is pluggable. A SecretsBackend abstraction now sits in front of an AES-256-GCM Postgres implementation and the existing OVHcloud OKMS client. Every OVH_* variable became conditional, so the server boots with no OVH account. This is the largest self-hosting unblock so far. Beetl's own production deployment stays on OKMS.

August 2026

2026-08-27 — Object storage is bring-your-own for every tenant. Tenant creation provisions no storage at all. A new tenant starts with an empty store list, and the first store an admin registers is promoted to default automatically. Until one is registered, every write path returns OBJECT_STORE_NOT_CONFIGURED. See the Quickstart.

2026-08-25 — The assistant edits the page you are looking at. Two generic tools, get_page_state and patch_page_state, let the assistant read the live page and apply JSON Patch operations to it. Four surfaces publish state: Query, Graph, Pipeline Editor and Automation Editor. Edits flash where they landed and can be reverted for the turn. The old page-specific insert_query tool was removed.

2026-08-25 — API key scopes collapsed from three to two. read_only and draft both became read; production became write. Existing keys keep working. The tool registry grew to 17 entries, of which MCP exposes 13.

2026-08-20 — Scheduled automations stopped stalling. The dispatcher's in-memory fetcher was replaced with per-worker PostgreSQL LISTEN/NOTIFY, plus a lag gauge and an alert so a future stall is visible rather than silent. In the same change, prior-run memory was bounded: the model now sees a truncated report instead of the previous run's full transcript.

2026-08-19 — Navigation was cut back, and pipeline destinations became optional. The sidebar is now Home, Chat, Automations, Dashboards and Query. Connections, Data Catalog and Pipelines left the sidebar and are reachable only by URL or through the Data Landscape graph. Separately, a pipeline can now have no destination at all, which makes a sources-and-stages exploration pipeline a first-class thing.

2026-08-18 — Tags on connections, datasets and pipelines. Tags are set per entity and filtered from the graph toolbar. They surface only inside the Data Landscape graph.

2026-08-16 — Automations shipped. A recurring, observe-only investigation described in plain language, with a cron schedule, a test-before-save run, and a report that links every query it ran to the durable result behind it. Automations are workspace-owned rather than creator-owned, which makes them the first shared object in the product. There is still no way for one to notify anyone.

2026-08-16 — A persistent scheduler for control-plane work. PostgreSQL-backed cron queues now run stale-stream sweeps, transient artifact cleanup, history pruning and automation dispatch.

2026-08-14 — The old frontend is gone. The Askama, HTMX and Alpine.js UI was deleted along with its crate and its mount point. The React SPA at /web is the only UI.

2026-08-13 — Authentication moved to Zitadel OIDC. Sign-in is a PKCE authorization-code flow with proper end-session logout. Local password handling was deleted outright. There are no password fields anywhere in the product.

2026-08-13 — MCP became a first-class external surface. One shared tool registry now generates the MCP tool list, per-user scoped API keys replaced the single shared environment credential, and scope is enforced at a single dispatch choke point. Every chat-visible tool result is wrapped in an untrusted-data envelope as structural prompt-injection containment.

2026-08-11 — "Connector" was retired from the UI. "Integration" is the official term for a custom connector. "Connection" remains the link to one source system, and beetl-connector is still the name of the edge extraction binary. The three are different things. See Connections and Integrations.

2026-08-05 — The assistant can read a wiki. Three read-only tools, list_files, read_file and search_files, give the assistant platform reference documentation and a generated page per deployed pipeline. It can read and search. It cannot write.

July 2026

2026-07-30 — Tenant isolation rebuilt. Each tenant now gets its own Superset database connection instead of a shared connection with a row-level-security clause, and dashboard access is validated against that connection at token-mint time. A read-only Arrow Flight SQL server took over programmatic query access, deriving tenant scope from the caller's credential. The old /api/queries/* HTTP family was deleted.

2026-07-30 — Per-tenant object stores. Storage stopped being one global bucket. Datasets record which store they were written against, and a store change does not move existing data.

2026-07-24 — The assistant became persistent. A collapsible right-hand panel on every authenticated page, backed by one durable assistant session per user. Pages can publish live context to it.

2026-07-20 — React SPA. The entire product UI was reimplemented as a React and TypeScript single-page app over a same-origin JSON API, with the Data Landscape graph as the home page and embedded Superset dashboards as a new section. "Bridge" was renamed "Connector" in the same change.

Earlier

2026-06-03 — Confirmations for production-scoped tools. deploy_pipeline now pauses the turn and renders an Allow or Deny card in the browser. It remains the only tool wired through that flow end to end.

2026-06 — Pipeline variables and run context. A Variables panel for vars.*, a run-values dialog for run.*, fn.today() / fn.now() / fn.uuid() helpers, and per-source trigger mapping.

2026-05-23 — One file, one connection, one dataset. File upload was rebuilt around explicit user-supplied dataset names, a schema-checked Replace operation, and hard failure on unsupported formats.

2026-05 — Durable query results, charting, and lineage. Results became Arrow IPC artifacts in object storage with a seven-day retention and their own URLs, charting moved to server-inferred ECharts options, and every result gained a per-cell lineage profile with deterministic drill-down.

2026-05 — Server-Sent Events connections. A subscription-based seventh system type, with the connector owning the stream loop and batching events to Parquet.

On this page