github.com/mr-karan/logchef
v1.7.0
#2008 most downloaded on Go modules
mr-karan/logchef
What this package is like to depend on
Last release 1 months ago
23 Jul 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 19 of 19 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
40 releases · first in 2025
25 releases in the last 12 months
see the full history below
Release timeline
40 releases · Apr 2025 to Jul 2026Releases
latest 40-
v1.7.1-0.20260723065715-f148e9b30a2523 Jul 2026 pre-releaseNothing published for this version
-
v1.7.1-0.20260721103127-bf6067e8948521 Jul 2026 pre-releaseNothing published for this version
-
v1.7.1-0.20260707101041-2f181269f07a07 Jul 2026 pre-releaseNothing published for this version
-
v1.7.006 Jul 2026Release notes
Open source →Logchef 1.7 is a big one. It makes the metadata store pluggable — run the default single-binary SQLite, or opt into a Postgres backend so multiple replicas share state for high availability. It also ships a redesigned Library for saved queries and collections with a real permission model, turns
alerts.enabledinto a proper server-wide switch, surfaces token expiry everywhere, and clears a wave of UX bugs — all on Go 1.26.Heads-up: this release includes one SQLite migration (
000024) and a breaking Library URL consolidation (/logs/saved+/logs/collections→/logs/library, no redirects). Read Breaking changes and How to upgrade before deploying.
✨ What's new
Pluggable Postgres metadata backend (opt-in) (#96)
Logchef's application metadata — users, teams, sources, saved queries, collections, alerts, API tokens, settings, sessions — can now live in Postgres instead of the embedded SQLite file, so multiple Logchef replicas can serve any request off shared state behind a load balancer. This is the groundwork for high availability.
- SQLite stays the default. The zero-config single-binary start is unchanged — you only need Postgres if you run more than one replica.
- Select it with
database.driver = "postgres"and a[postgres]DSN (orLOGCHEF_DATABASE__DRIVER/LOGCHEF_POSTGRES__DSN). - Postgres migrations take a PostgreSQL advisory lock, so concurrent replica boots don't race — one migrates while the others wait, then all proceed.
- Your logs always stay in ClickHouse and are unaffected by this choice.
- Both backends sit behind a backend-agnostic store contract, validated by a shared conformance suite that runs against both databases in CI.
See the Database Backends & HA guide — including the current caveat that alert evaluation must run on exactly one replica.
Redesigned Library
Saved queries and collections are now one place, with a real permission model.
- Unified
/logs/library— a collections rail on the left, the selected collection's detail on the right. Replaces the old three views (/logs/saved,/logs/collections,/logs/collections/:id) with a single nav item. - Collection editor role — collections now have
owner/editor/member. Editors curate and edit the collection's queries; owners also rename/delete and manage members. - Delegated edit — you can edit a saved query if you're its creator, a global admin, or an owner/editor of a shared collection that contains it. Delete stays creator/admin-only.
- Curate as any participant — pin, move, and remove queries in a shared collection without owning it.
- Anyone can create collections — the old team-admin gate is gone; per-collection roles are the authority.
- Inline save-to-collection — the Save dialog has a collection picker (defaults to your personal collection), so a new query lands where you want in one step.
- Collection detail upgrades — an "Add query" search picker to pin an existing query, "Move to another collection" per query, and a "Created by" column.
- Affordances match your permissions — the server sends
can_edit/can_deletehints so the UI shows the right actions instead of guessing (and never offers one that would 403).
"All Queries" browse for admins
GET /api/v1/saved-queries?scope=all(global-admin only) lists every saved query — including ones not pinned to any collection, which previously had no browse surface. Each row is markedrunnablefor the caller; queries on sources you can't reach show locked. The default source-gated response used by the explorer dropdown and CLI is unchanged.alerts.enabled— a real server-wide switch (#98, fixes #97)Setting
alerts.enabled = false(orLOGCHEF_ALERTS__ENABLED=false) used to only stop the evaluation scheduler while the API and UI stayed fully live — a confusing "half-off" state. Now a middleware gates the whole subsystem: every/api/v1/alerts/*route (plus the admin test-email / test-webhook endpoints) returns a clean503, and/api/v1/metaexposesalerts_enabledso the UI hides alerting entirely. Handy for exploration-only deployments, or to keep alert evaluation on a single instance in a multi-replica setup.Token expiry, everywhere
The service-tokens admin page now shows the same expiry status as the profile API-token list — never expires / expires / expiring soon / expired — via a shared helper. The API-token model gained a computed
expiredflag so consumers don't re-derive it, and the CLI flags an expired saved token inlogchef auth current.Searchable pickers & sortable tables
A reusable type-to-filter picker replaces plain dropdowns for inviting collection members and adding service accounts to teams, and the Manage Sources and team-member tables gain a search box and sortable columns.
🛠️ Fixed (vs v1.6.1)
- Inline 403s no longer bounce you to a full-page Forbidden view — an access error on an inline action (toggle, save, delete) now shows a toast and stays put; page-level access is still enforced by the router.
- Dead toggles across the app work again — Switch/Checkbox controls were bound to
:checked/@update:checked, but the underlying reka-ui primitives only exposemodel-value, so the admin Active toggle, alert enable/disable, source TLS/auth switches, the column selector, and variable multi-selects all silently no-op'd. Rebound tomodel-value. - Saved-query resolver no longer panics on certain resolve paths — it recovers and returns a clean error.
- Saved queries wait for the source schema before running, so opening one no longer races the previously selected source.
- Accurate access status codes —
404only when something's missing,403when the recipient lacks team access (exports & shared queries). - Save dialog only offers collections you own (adding an item is owner-only, so it no longer saves the query and then silently 403s on the pin), and the item Remove button gates on the current collection's ownership.
- Tighter memory accounting on large responses (fixes an under-count from the performance pass), plus a cancellable field-value fan-out and identifier validation on provisioned source database/table/field names.
- Provisioned member users get
account_typeset correctly. - UI/URL polish — bare
/logs/libraryis canonical (click vs reload no longer differ), the add-query dialog no longer overflows,?view=allis preserved, and the date-picker type drift is fixed (TypeScript checks are green and enforced in CI again).
💥 Breaking changes
Library URL consolidation. The three saved-query / collection views are collapsed into one, with no redirects from the old paths:
Old New /logs/saved/logs/library/logs/collections/logs/library/logs/collections/:id/logs/library(select the collection in the rail)/logs/saved/:queryIdis kept as the canonical share / explorer-hydration link. Update any bookmarked or documented old collection URLs.Collection creation is no longer team-admin-gated — any authenticated user can create a collection; per-collection roles (
owner/editor/member) govern everything after that.
🗃️ Migration notes
Backend Migration What it does SQLite 000024Rebuilds the collection_membersrole CHECK toowner | editor | member(adds the collection editor role). Existing rows preserved. Applied automatically on upgrade from 1.6.1.Postgres 000001_initFresh Postgres backends create the full schema in a single advisory-lock–guarded init migration. Take a backup of your SQLite database before upgrading. Migrations are forward-only.
How to upgrade
Binary — download the v1.7.0 binary, stop the service, replace the binary, start it. The
000024SQLite migration applies on first boot; no config changes are needed to stay on SQLite.Docker
docker pull ghcr.io/mr-karan/logchef:v1.7.0 docker compose down docker compose up -d
Postgres (optional, for HA) — read the Database Backends & HA guide first, then set
database.driver = "postgres"with a[postgres]DSN. Run alert evaluation on exactly one replica until leader election lands.
Full changelog:
v1.6.1...v1.7.0Release notes
Open source →Logchef 1.7 makes the metadata store pluggable: alongside the default single-binary SQLite, you can now run an opt-in Postgres backend so multiple replicas share state behind a load balancer for high availability. It also ships a redesigned Library for saved queries and collections with a real permission model (
owner/editor/member+ delegated edit), turnsalerts.enabledinto a proper server-wide switch, surfaces token expiry across UI / API / CLI, adds an admin "All Queries" browse, and clears a wave of UX bugs. Under the hood: Go 1.26, a backend-agnostic store contract validated by a conformance suite that runs against both databases, and audit-driven hardening. Breaking: the Library URL consolidation (see below).Added
- Pluggable Postgres metadata backend (opt-in). Application metadata
(users, teams, sources, saved queries, collections, alerts, API tokens,
settings, sessions, export jobs, query shares) can now live in Postgres
instead of SQLite, so multiple replicas can serve any request off shared
state. SQLite remains the default; the zero-config single-binary start is
unchanged. Select with
database.driver = "postgres"and a[postgres]DSN (orLOGCHEF_DATABASE__DRIVER/LOGCHEF_POSTGRES__DSN). Startup migrations take a PostgreSQL advisory lock so concurrent replica boots don't race. Your logs always stay in ClickHouse and are unaffected. (#96) See the Database Backends & HA guide. alerts.enabledserver switch. Alerting can be disabled globally (alerts.enabled = false/LOGCHEF_ALERTS__ENABLED=false). When off, every alert endpoint returns a clear503, and/api/v1/metaexposesalerts_enabledso the UI hides alerting entirely. (#98)- "All Queries" browse view for admins:
GET /api/v1/saved-queries?scope=all(global-admin only) lists every saved query, including ones not reachable via any collection, each markedrunnablefor the caller (sources you can't reach show locked). Closes a gap where such queries had no browse surface. The default (source-gated) response used by the explorer and CLI is unchanged. - Redesigned Library. The three saved-query / collection views collapse
into a single
/logs/library(collections rail + detail pane). Collections gain an editor role (owner/editor/member), and saved-query edit is delegated: creator, global admin, or an owner/editor of a shared collection containing the query can edit it (delete stays creator/admin-only). The Save dialog gains an inline collection picker, and the server sendscan_edit/can_deletehints so the UI only offers actions that will work. - Curate collections without owning them. Adding, moving, and removing queries in a shared collection is now open to any participant (owner / editor / member). Managing the collection itself (rename, delete, members) stays owner-only.
- Collection detail upgrades: pin an existing saved query via an "Add query" searchable picker, "Move to another collection" per query, and a "Created by" column showing each query's author.
- Type-to-filter pickers + searchable, sortable tables across member and resource management. A reusable searchable picker replaces plain dropdowns (invite a collection member, add a service account to a team), and the Manage Sources and team-member tables gain a search box and sortable columns.
- Token expiry surfaced everywhere: the service-tokens admin page shows the
same expiry status as the profile API-token list (never expires / expires /
expiring soon / expired) via a shared helper; the API-token model gains a
computed
expiredflag; and the CLI flags an expired saved token inlogchef auth current.
Changed
- Backend-agnostic store layer. The metadata layer was reorganized behind a
per-domain store contract with canonical sentinel errors (
ErrNotFound/ErrConflict) and aWithTxtransaction abstraction; SQLite and Postgres are symmetric implementations, validated by a shared conformance suite that runs against both in CI.internal/sqlitemoved underinternal/store/sqlite. - Upgraded to Go 1.26, with hot-path optimizations and idiom modernization.
- Anyone can create collections. The old team-admin gate is dropped;
per-collection roles (
owner/editor/member) are the authority. - Collection member roster is owner-only: previously visible to any team-admin who could list users; now enforced server-side.
Fixed
- Inline 403s no longer bounce to a full-page Forbidden view: an access error on an inline action (toggle, save, delete) shows a toast and stays put; page-level access is still enforced by the router.
- Dead toggles across the app work again: Switch/Checkbox controls were
bound to
:checked/@update:checked, but the reka-ui primitives only exposemodel-value, so the admin Active toggle, alert enable/disable, source TLS/auth switches, the column selector, and variable multi-selects silently no-op'd. Rebound tomodel-value. - Saved-query resolver no longer panics on certain resolve paths. It recovers and returns a clean error.
- Saved queries wait for the source schema before running, so opening one no longer races the previously selected source.
- Save dialog only offers collections you own (adding an item is owner-only, so it no longer saves the query then 403s on the pin), and the item Remove button gates on the current collection's ownership.
- Correct HTTP status codes for export / query-share access:
404only on not-found,403when the recipient has no team access. - Escape-aware response byte-budget: fixes an under-count memory regression from the perf pass, plus a cancellable field-value fan-out and identifier validation on provisioned source database/table/field names.
- Provisioned member users get
account_typeset correctly. - Add-query dialog width no longer overflows its grid;
?view=allis preserved on the Library route. - Frontend typecheck is green again and re-enabled in CI: deduped
@internationalized/date(reka-ui date-picker type drift) and cleared the assortedvue-tscissues that had accumulated behind a disabled check.
Breaking changes
- Library URL consolidation.
/logs/saved,/logs/collections, and/logs/collections/:idcollapse into a single/logs/librarywith no redirects from the old paths./logs/saved/:queryIdis kept as the canonical share / explorer-hydration link. Update bookmarked or documented old collection URLs. - Collection creation is no longer team-admin-gated: any authenticated user can create a collection.
Migration notes
Backend Migration What it does SQLite 000024 Rebuilds the collection_membersrole CHECK toowner | editor | member(adds the collection editor role). Existing rows preserved. Applied automatically on upgrade from 1.6.1; no other new SQLite migrations.Postgres 000001_init Fresh Postgres backends create the full schema in a single advisory-lock-guarded init migration. Internal
- Backend-parity end-to-end suite (agent-browser) covering login, sources, query, field values, the time-range picker, histogram, collections, and admin.
- Dead-code sweep, a dev Postgres 17 service, and Postgres CI (service + sqlc-drift + golangci-lint to zero across the module).
Upgrading
Drop-in for existing SQLite deployments; no config changes required (one small SQLite migration,
000024, applies automatically). To adopt Postgres for HA, read the Database Backends & HA guide first. Note the current caveat that alert evaluation must run on exactly one replica until leader election lands.Release notes
Open source →Logchef 1.7 makes the metadata store pluggable: alongside the default single-binary SQLite, you can now run an opt-in Postgres backend so multiple Logchef replicas share state behind a load balancer for high availability. The release also lets you turn alerting off server-wide, opens collection curation to any participant, adds an admin "All Queries" browse view, and threads type-to-filter pickers and searchable/sortable tables through the member and resource pages. Under the hood: Go 1.26, a backend-agnostic store contract validated by a conformance suite that runs against both databases, and a round of audit-driven hardening.
Added
- Pluggable Postgres metadata backend (opt-in). Application metadata —
users, teams, sources, saved queries, collections, alerts, API tokens,
settings, sessions, export jobs, query shares — can now live in Postgres
instead of SQLite, so multiple replicas can serve any request off shared
state. SQLite remains the default; the zero-config single-binary start is
unchanged. Select with
database.driver = "postgres"and a[postgres]DSN (orLOGCHEF_DATABASE__DRIVER/LOGCHEF_POSTGRES__DSN). Startup migrations take a PostgreSQL advisory lock so concurrent replica boots don't race. Your logs always stay in ClickHouse and are unaffected. (#96) See the Database Backends & HA guide. alerts.enabledserver switch. Alerting can be disabled globally (alerts.enabled = false/LOGCHEF_ALERTS__ENABLED=false). When off, every alert endpoint returns a clear503, and/api/v1/metaexposesalerts_enabledso the UI hides alerting entirely. (#98)- "All Queries" browse view for admins —
GET /api/v1/saved-queries?scope=all(global-admin only) lists every saved query, including ones not reachable via any collection, each markedrunnablefor the caller (sources you can't reach show locked). Closes a gap where such queries had no browse surface. The default (source-gated) response used by the explorer and CLI is unchanged. - Curate collections without owning them. Adding, moving, and removing queries in a shared collection is now open to any participant (owner / editor / member). Managing the collection itself — rename, delete, members — stays owner-only.
- Collection detail upgrades — pin an existing saved query via an "Add query" searchable picker, "Move to another collection" per query, and a "Created by" column showing each query's author.
- Type-to-filter pickers + searchable, sortable tables across member and resource management. A reusable searchable picker replaces plain dropdowns (invite a collection member, add a service account to a team), and the Manage Sources and team-member tables gain a search box and sortable columns.
Changed
- Backend-agnostic store layer. The metadata layer was reorganized behind a
per-domain store contract with canonical sentinel errors (
ErrNotFound/ErrConflict) and aWithTxtransaction abstraction; SQLite and Postgres are symmetric implementations, validated by a shared conformance suite that runs against both in CI.internal/sqlitemoved underinternal/store/sqlite. - Upgraded to Go 1.26, with hot-path optimizations and idiom modernization.
- Collection member roster is owner-only — previously visible to any team-admin who could list users; now enforced server-side.
Fixed
- Saved-query resolver no longer panics on certain resolve paths — it recovers and returns a clean error.
- Correct HTTP status codes for export / query-share access:
404only on not-found,403when the recipient has no team access. - Escape-aware response byte-budget — fixes an under-count memory regression from the perf pass — plus a cancellable field-value fan-out and identifier validation on provisioned source database/table/field names.
- Provisioned member users get
account_typeset correctly. - Add-query dialog width no longer overflows its grid;
?view=allis preserved on the Library route. - Frontend typecheck is green again and re-enabled in CI — deduped
@internationalized/date(reka-ui date-picker type drift) and cleared the assortedvue-tscissues that had accumulated behind a disabled check.
Migration notes
Migration What it does SQLite 000024 Adds the collection editor role. Applied automatically on upgrade from 1.6.1; no other new SQLite migrations. Postgres 000001_init Fresh Postgres backends create the full schema in a single advisory-lock–guarded init migration. Internal
- Backend-parity end-to-end suite (agent-browser) covering login, sources, query, field values, the time-range picker, histogram, collections, and admin.
- Dead-code sweep, a dev Postgres 17 service, and Postgres CI (service + sqlc-drift + golangci-lint to zero across the module).
Upgrading
Drop-in for existing SQLite deployments — no config changes required (one small SQLite migration,
000024, applies automatically). To adopt Postgres for HA, read the Database Backends & HA guide first — note the current caveat that alert evaluation must run on exactly one replica until leader election lands. -
v1.6.2-0.20260706114527-dffd8a29495e06 Jul 2026 pre-releaseNothing published for this version
-
v1.6.120 May 2026Release notes
Open source →Logchef v1.6.1
Patch release. Introduces Service accounts — non-login principals that own scoped API tokens — and reworks the API-token surface so every token carries an explicit scope list enforced by middleware. Also surfaces ClickHouse column comments through the schema API for the LogChef CLI v0.1.6 to consume.
Added
- Service accounts — Non-login principals you can add to teams and own API tokens. Created from Administration → Service Tokens. Cannot authenticate via OIDC or CLI exchange.
- Scoped API tokens — Tokens now carry an explicit scope list (
logs:read,alerts:write, ...). NewrequireTokenScopemiddleware enforces them on every route. Presets in the UI: Read-only, Logs viewer, Logs analyst, Alerts manager, Source admin, Full access. Active preset is highlighted while the selection matches. - Account-type toggle in Add Team Member dialog — Switch between Human user and Service account; the dropdown filters to the selected type and shows
full_namewith email as a subtitle. - Service account badge in team member tables, with a bot icon, so automation principals are visually distinct from humans.
- Team chips and "Manage teams" button on each service account card. Surfaces zero-team state ("token reaches no source") and lets you add or remove team memberships without leaving the page.
- New admin endpoints:
GET/POST/DELETE /admin/service-accountsGET/POST/DELETE /admin/service-accounts/:id/tokensGET/POST/DELETE /admin/service-accounts/:id/teams
- Schema column descriptions — The schema API now surfaces ClickHouse column comments as an optional
descriptionfield. Consumed by LogChef CLI v0.1.6'sschemacommand.
Changed
UserProfile"Create API Token" dialog defaults to the Read-only preset. Previously defaulted to Full access (*), which made every checkbox appear disabled-but-checked and gave no choice unless the user manually clicked away.- Read-only preset includes every
:readscope. Now coverstokens:read,users:read, andsettings:readin addition to the resource read scopes. Admin-gated routes still require admin role at the auth layer, so the wider scope set only matters for admin-owned tokens. /admin/users/*now 404s on service accounts. Service principals are managed through the dedicated/admin/service-accounts/*path so admins can't accidentally promote a service account to admin via the human-user CRUD path.
Fixed
TokenScopePickercheckboxes are now interactive. The component was binding to:checked/@update:checked, but the shadcn-vue Checkbox forwards reka-ui'sCheckboxRootProps, which usesmodel-value/update:model-value. The bug was hidden behind the old Full-access default; switching the default surfaced it.- Token creation rejects empty scopes (HTTP 400). Previously, a request with no scopes silently defaulted to
["*"], minting a god-token. - Corrupt or empty stored scopes fail closed. A row with malformed JSON in
api_tokens.scopesnow grants no access instead of*.
Migration notes
Migration What it does 000023 Adds users.account_type(human/service) andapi_tokens.scopes(JSON array). Existing users default tohuman; existing tokens default to["*"]to preserve behavior. Index onusers(account_type).Full Changelog: v1.6.0...v1.6.1
Release notes
Open source →Patch release. Introduces Service accounts (non-login principals that own scoped API tokens) and reworks the API-token surface so every token carries an explicit scope list enforced by middleware. Also surfaces ClickHouse column comments through the schema API for the Logchef CLI v0.1.6 to consume.
Added
- Service accounts: Non-login principals you can add to teams and own API tokens. Created from Administration → Service Tokens. Cannot authenticate via OIDC or CLI exchange.
- Scoped API tokens: Tokens now carry an explicit scope list
(
logs:read,alerts:write, ...). NewrequireTokenScopemiddleware enforces them on every route. Presets in the UI: Read-only, Logs viewer, Logs analyst, Alerts manager, Source admin, Full access. Active preset is highlighted while the selection matches. - Account-type toggle in Add Team Member dialog: Switch between Human
user and Service account; the dropdown filters to the selected type and
shows
full_namewith email as a subtitle. - Service account badge in team member tables, with a bot icon, so automation principals are visually distinct from humans.
- Team chips and "Manage teams" button on each service account card. Surfaces zero-team state ("token reaches no source") and lets you add or remove team memberships without leaving the page.
- New admin endpoints:
GET/POST/DELETE /admin/service-accountsGET/POST/DELETE /admin/service-accounts/:id/tokensGET/POST/DELETE /admin/service-accounts/:id/teams
- Schema column descriptions: The schema API now surfaces ClickHouse
column comments as an optional
descriptionfield. Consumed by Logchef CLI v0.1.6'sschemacommand.
Changed
UserProfile"Create API Token" dialog defaults to the Read-only preset. Previously defaulted to Full access (*), which made every checkbox appear disabled-but-checked and gave no choice unless the user manually clicked away.- Read-only preset includes every
:readscope. Now coverstokens:read,users:read, andsettings:readin addition to the resource read scopes. Admin-gated routes still require admin role at the auth layer, so the wider scope set only matters for admin-owned tokens. /admin/users/*now 404s on service accounts. Service principals are managed through the dedicated/admin/service-accounts/*path so admins can't accidentally promote a service account to admin via the human-user CRUD path.
Fixed
TokenScopePickercheckboxes are now interactive. The component was binding to:checked/@update:checked, but the shadcn-vue Checkbox forwards reka-ui'sCheckboxRootProps, which usesmodel-value/update:model-value. The bug was hidden behind the old Full-access default; switching the default surfaced it.- Token creation rejects empty scopes (HTTP 400). Previously, a request
with no scopes silently defaulted to
["*"], minting a god-token. - Corrupt or empty stored scopes fail closed. A row with malformed JSON
in
api_tokens.scopesnow grants no access instead of*.
Migration notes
Migration What it does 000023 Adds users.account_type(human/service) andapi_tokens.scopes(JSON array). Existing users default tohuman; existing tokens default to["*"]to preserve behavior. Index onusers(account_type).Release notes
Open source →Patch release. Introduces Service accounts — non-login principals that own scoped API tokens — and reworks the API-token surface so every token carries an explicit scope list enforced by middleware. Also surfaces ClickHouse column comments through the schema API for the LogChef CLI v0.1.6 to consume.
Added
- Service accounts — Non-login principals you can add to teams and own API tokens. Created from Administration → Service Tokens. Cannot authenticate via OIDC or CLI exchange.
- Scoped API tokens — Tokens now carry an explicit scope list
(
logs:read,alerts:write, ...). NewrequireTokenScopemiddleware enforces them on every route. Presets in the UI: Read-only, Logs viewer, Logs analyst, Alerts manager, Source admin, Full access. Active preset is highlighted while the selection matches. - Account-type toggle in Add Team Member dialog — Switch between Human
user and Service account; the dropdown filters to the selected type and
shows
full_namewith email as a subtitle. - Service account badge in team member tables, with a bot icon, so automation principals are visually distinct from humans.
- Team chips and "Manage teams" button on each service account card. Surfaces zero-team state ("token reaches no source") and lets you add or remove team memberships without leaving the page.
- New admin endpoints:
GET/POST/DELETE /admin/service-accountsGET/POST/DELETE /admin/service-accounts/:id/tokensGET/POST/DELETE /admin/service-accounts/:id/teams
- Schema column descriptions — The schema API now surfaces ClickHouse
column comments as an optional
descriptionfield. Consumed by LogChef CLI v0.1.6'sschemacommand.
Changed
UserProfile"Create API Token" dialog defaults to the Read-only preset. Previously defaulted to Full access (*), which made every checkbox appear disabled-but-checked and gave no choice unless the user manually clicked away.- Read-only preset includes every
:readscope. Now coverstokens:read,users:read, andsettings:readin addition to the resource read scopes. Admin-gated routes still require admin role at the auth layer, so the wider scope set only matters for admin-owned tokens. /admin/users/*now 404s on service accounts. Service principals are managed through the dedicated/admin/service-accounts/*path so admins can't accidentally promote a service account to admin via the human-user CRUD path.
Fixed
TokenScopePickercheckboxes are now interactive. The component was binding to:checked/@update:checked, but the shadcn-vue Checkbox forwards reka-ui'sCheckboxRootProps, which usesmodel-value/update:model-value. The bug was hidden behind the old Full-access default; switching the default surfaced it.- Token creation rejects empty scopes (HTTP 400). Previously, a request
with no scopes silently defaulted to
["*"], minting a god-token. - Corrupt or empty stored scopes fail closed. A row with malformed JSON
in
api_tokens.scopesnow grants no access instead of*.
Migration notes
Migration What it does 000023 Adds users.account_type(human/service) andapi_tokens.scopes(JSON array). Existing users default tohuman; existing tokens default to["*"]to preserve behavior. Index onusers(account_type). -
v1.6.1-0.20260513063953-c695bf76795e13 May 2026 pre-releaseNothing published for this version
-
v1.6.013 May 2026Release notes
Open source →Logchef 1.6 narrows the Team abstraction to access control only and adds Collections: cross-team curation lists for saved queries. The unified Saved Queries view replaces the old team-scoped collections page with a flat, searchable table and a collection-picker dropdown. The release also adds a new Team Editor role and restructures the admin URLs for consistency.
API & URL changes
- Saved queries are source-scoped, not team-scoped.
team_queriesis rebuilt assaved_queries(source_id, created_from_team_id, created_by, …). Visibility: any user with source access via any team. Edit: creator + global admin. /api/v1/saved-queries/:id/resolvereturns a transientresolved_team_idcomputed from the user's access paths; no team ownership stored on the query itself.- Alerts de-teamed. New
/api/v1/alertsroute group;alerts.team_iddropped,alerts.created_byadded. query_sharesandexport_jobsloseteam_id.- New
/api/v1/collections: CRUD for collections + members + items. - Collection mutation routes use
requireAnyTeamCollectionMutator(admin or editor in any team). Team admin-only routes (membership management, source linking,/api/v1/users) stay strict onrequireAnyTeamAdmin. - Admin frontend URLs restructured.
/management/*→/admin/*,/profile→/settings/profile,/admin/sources/list→/admin/sources,/admin/sources/edit/:id→/admin/sources/:id/edit. No redirects from old paths. - Old team-scoped paths return 404. No shims, no redirects.
- Frontend URL:
/logs/saved/:queryIdis the canonical share link.
Added
- Collections: Cross-team curation lists. Personal collection
auto-created per user ("My Collection"). Shared collections are
invite-only with
owner+memberroles. Items a member can't run show with arunnable: falseflag (lock icon in UI). - Unified Saved Queries view: Single page at
/logs/savedwith a collection-picker dropdown (All Queries / My Collection / shared collections), inline search, and a Metabase-style flat table. - "Add to Collection" drawer: Per-row action on saved queries. Slide-out panel shows all collections as checkboxes for quick pin/unpin. Create new collections inline.
- "Remove from collection" action: When viewing a specific collection, each row's menu gains a destructive remove action.
- Saved query resolve with
resolved_team_id: The/resolveendpoint deterministically picks the correct team for execution using priority: explicit?team_idhint →created_from_team_id→ first accessible team fallback. created_from_team_idon saved queries: nullable metadata recording which team context the query was saved from. Used as a preference hint during resolve; not an ACL gate.- Invite members by email: Collection member invite uses an email dropdown (same UX as team member management), not a raw user ID.
- Shareable saved-query links with configurable TTL.
- Backend-streamed result downloads with synchronous admission control (HTTP 429 at capacity).
- Calendar month/year drill-down in the date picker.
- OIDC
skip_email_verified_checkoption. (#85, #86) - Native ClickHouse TLS. (#88)
- Team Editor role: new team role between Member and Admin. Editors can manage collections (create, rename, invite, pin items) and save queries. They cannot invite team members or link sources; those stay admin-only. (#94)
- Shared UI primitives:
PageHeader,PageSection,EmptyState,LoadingStateundercomponents/layout/. Replace the ad-hoc empty/ loading/header markup across admin and settings pages with one consistent visual language. useTeamPermissions()composable: central frontend role-check API:isGlobalAdmin,isAnyTeamAdmin,isAnyTeamCollectionMutator,isTeamAdmin(teamId),isTeamCollectionMutator(teamId),canSaveQuery,canEditSavedQuery(query),canManageCollection(c).- Tests: 18 backend cases for the new role helpers (cross-team
negatives + regression guards that editors stay distinct from admins),
28 frontend Vitest cases for
useTeamPermissions.
Changed
- Saved Queries view is now the unified entry point. The old two-page
layout (separate /logs/saved + /logs/collections list) is replaced by
a single flat table with the collection picker.
/logs/collectionsis a standalone management page (create, delete, navigate to detail). - Alert notifications drop
team_id/team_namefields. Recipients resolve to users directly. - Explore UI polish: quieter top bar, concrete query placeholders, tighter histogram styling, Local|UTC segmented timezone control.
- Export → Download rename; backend-streamed pipe is the only path.
- AI SQL insert clears saved-query state and switches to SQL mode.
- Save button in the query editor is now visible to all team members (it was previously gated to admins by mistake; backend always allowed it). Edit/delete of a saved query still requires the creator or a global admin.
- Distinct icons for LogchefQL vs SQL saved queries (
SearchandDatabase); the previous near-identical file icons were hard to tell apart at small sizes. - Admin/settings pages migrated to the shared
PageHeader+PageSectionlayout. The whole-page Card wrapper pattern is gone. - Sidebar links carry team + source context into Explorer and Alerts
via a single
resolveTo()helper.
Fixed
- Unbounded query result OOM:
[query] max_limitcap (default 100k rows). A large unbounded result set previously exhausted the browser renderer. - Long raw SQL in the URL no longer trips the HTTP header size limit on the server.
- "No source selected" race: explorer waits for
currentSourceDetails.id === contextStore.sourceIdbefore executing, so newly-selected sources don't run the previous source's query. - Stale-request guard in
sourcesStore.loadSourceDetails: a fast source switch is no longer overwritten by an older in-flight response. - Saved query loads wrong source: resolved query's
source_idnow overrides stale URL?source=param. - Crash-safe export pruner: interrupted prunes no longer leave orphaned download files behind.
- Translate API errors are surfaced to the editor instead of failing silently.
- Export download URLs are relative, so downloads work behind reverse proxies that rewrite hostnames.
Removed
- Query Folders (the team-scoped experiment from v1.6.0-dev).
- Bookmarks (
is_bookmarkedcolumn): replaced by personal collections. team_idon saved queries, alerts, query shares, export jobs.- Dead frontend code paths (
loadTeamSourceQueries,createTeamSourceQuery,useQueryFoldersStore, etc.).
Migration notes (000016 → 000021)
Migration What it does 000016 Drops query_folders+query_folder_items000017 Rebuilds team_queries→saved_queries, dropsteam_id, addscreated_by000018 Drops team_idfromalerts,query_shares,export_jobs; addsalerts.created_by000019 Creates collections,collection_members,collection_items000020 Drops is_bookmarked; seeds personal collections; migrates bookmarks to collection items000021 Adds created_from_team_idtosaved_queries; backfills fromteam_sourcesFollow-ups
logchef-mcp(separate repo) needs rewiring to/api/v1/saved-queries.- Provisionable collections out of scope for 1.6.
Contributors
- @m0nikasingh: OIDC email verification skip (#86), native ClickHouse TLS (#88), AI SQL insert mode fix (#89)
Release notes
Open source →LogChef 1.6 narrows the Team abstraction to access control only and adds Collections — cross-team curation lists for saved queries. The unified Saved Queries view replaces the old team-scoped collections page with a flat, searchable table and a collection-picker dropdown. The release also adds a new Team Editor role and restructures the admin URLs for consistency.
API & URL changes
- Saved queries are source-scoped, not team-scoped.
team_queriesis rebuilt assaved_queries(source_id, created_from_team_id, created_by, …). Visibility: any user with source access via any team. Edit: creator + global admin. /api/v1/saved-queries/:id/resolvereturns a transientresolved_team_idcomputed from the user's access paths — no team ownership stored on the query itself.- Alerts de-teamed. New
/api/v1/alertsroute group;alerts.team_iddropped,alerts.created_byadded. query_sharesandexport_jobsloseteam_id.- New
/api/v1/collections— CRUD for collections + members + items. - Collection mutation routes use
requireAnyTeamCollectionMutator(admin or editor in any team). Team admin–only routes (membership management, source linking,/api/v1/users) stay strict onrequireAnyTeamAdmin. - Admin frontend URLs restructured.
/management/*→/admin/*,/profile→/settings/profile,/admin/sources/list→/admin/sources,/admin/sources/edit/:id→/admin/sources/:id/edit. No redirects from old paths. - Old team-scoped paths return 404. No shims, no redirects.
- Frontend URL:
/logs/saved/:queryIdis the canonical share link.
Added
- Collections — Cross-team curation lists. Personal collection
auto-created per user ("My Collection"). Shared collections are
invite-only with
owner+memberroles. Items a member can't run show with arunnable: falseflag (lock icon in UI). - Unified Saved Queries view — Single page at
/logs/savedwith a collection-picker dropdown (All Queries / My Collection / shared collections), inline search, and a Metabase-style flat table. - "Add to Collection" drawer — Per-row action on saved queries. Slide-out panel shows all collections as checkboxes for quick pin/unpin. Create new collections inline.
- "Remove from collection" action — When viewing a specific collection, each row's menu gains a destructive remove action.
- Saved query resolve with
resolved_team_id— The/resolveendpoint deterministically picks the correct team for execution using priority: explicit?team_idhint →created_from_team_id→ first accessible team fallback. created_from_team_idon saved queries — nullable metadata recording which team context the query was saved from. Used as a preference hint during resolve; not an ACL gate.- Invite members by email — Collection member invite uses an email dropdown (same UX as team member management), not a raw user ID.
- Shareable saved-query links with configurable TTL.
- Backend-streamed result downloads with synchronous admission control (HTTP 429 at capacity).
- Calendar month/year drill-down in the date picker.
- OIDC
skip_email_verified_checkoption. (#85, #86) - Native ClickHouse TLS. (#88)
- Team Editor role — new team role between Member and Admin. Editors can manage collections (create, rename, invite, pin items) and save queries. They cannot invite team members or link sources — those stay admin-only. (#94)
- Shared UI primitives —
PageHeader,PageSection,EmptyState,LoadingStateundercomponents/layout/. Replace the ad-hoc empty/ loading/header markup across admin and settings pages with one consistent visual language. useTeamPermissions()composable — central frontend role-check API:isGlobalAdmin,isAnyTeamAdmin,isAnyTeamCollectionMutator,isTeamAdmin(teamId),isTeamCollectionMutator(teamId),canSaveQuery,canEditSavedQuery(query),canManageCollection(c).- Tests — 18 backend cases for the new role helpers (cross-team
negatives + regression guards that editors stay distinct from admins),
28 frontend Vitest cases for
useTeamPermissions.
Changed
- Saved Queries view is now the unified entry point. The old two-page
layout (separate /logs/saved + /logs/collections list) is replaced by
a single flat table with the collection picker.
/logs/collectionsis a standalone management page (create, delete, navigate to detail). - Alert notifications drop
team_id/team_namefields. Recipients resolve to users directly. - Explore UI polish — quieter top bar, concrete query placeholders, tighter histogram styling, Local|UTC segmented timezone control.
- Export → Download rename; backend-streamed pipe is the only path.
- AI SQL insert clears saved-query state and switches to SQL mode.
- Save button in the query editor is now visible to all team members (it was previously gated to admins by mistake; backend always allowed it). Edit/delete of a saved query still requires the creator or a global admin.
- Distinct icons for LogchefQL vs SQL saved queries (
SearchandDatabase); the previous near-identical file icons were hard to tell apart at small sizes. - Admin/settings pages migrated to the shared
PageHeader+PageSectionlayout. The whole-page Card wrapper pattern is gone. - Sidebar links carry team + source context into Explorer and Alerts
via a single
resolveTo()helper.
Fixed
- Unbounded query result OOM —
[query] max_limitcap (default 100k rows). A large unbounded result set previously exhausted the browser renderer. - Long raw SQL in the URL no longer trips the HTTP header size limit on the server.
- "No source selected" race — explorer waits for
currentSourceDetails.id === contextStore.sourceIdbefore executing, so newly-selected sources don't run the previous source's query. - Stale-request guard in
sourcesStore.loadSourceDetails— a fast source switch is no longer overwritten by an older in-flight response. - Saved query loads wrong source — resolved query's
source_idnow overrides stale URL?source=param. - Crash-safe export pruner — interrupted prunes no longer leave orphaned download files behind.
- Translate API errors are surfaced to the editor instead of failing silently.
- Export download URLs are relative, so downloads work behind reverse proxies that rewrite hostnames.
Removed
- Query Folders (the team-scoped experiment from v1.6.0-dev).
- Bookmarks (
is_bookmarkedcolumn) — replaced by personal collections. team_idon saved queries, alerts, query shares, export jobs.- Dead frontend code paths (
loadTeamSourceQueries,createTeamSourceQuery,useQueryFoldersStore, etc.).
Migration notes (000016 → 000021)
Migration What it does 000016 Drops query_folders+query_folder_items000017 Rebuilds team_queries→saved_queries, dropsteam_id, addscreated_by000018 Drops team_idfromalerts,query_shares,export_jobs; addsalerts.created_by000019 Creates collections,collection_members,collection_items000020 Drops is_bookmarked; seeds personal collections; migrates bookmarks to collection items000021 Adds created_from_team_idtosaved_queries; backfills fromteam_sourcesFollow-ups
logchef-mcp(separate repo) needs rewiring to/api/v1/saved-queries.- Provisionable collections out of scope for 1.6.
Contributors
- @m0nikasingh — OIDC email verification skip (#86), native ClickHouse TLS (#88), AI SQL insert mode fix (#89)
- Saved queries are source-scoped, not team-scoped.
-
v1.5.1-0.20260408120957-ef1c2119dc2b08 Apr 2026 pre-releaseNothing published for this version
-
v1.5.008 Apr 2026Release notes
Open source →Added
- Rich value autocomplete in LogchefQL editor: After typing
host=, the editor instantly suggests top field values with occurrence counts (e.g.,cdn.logchef.dev (1.7K)). Suggestions come from the sidebar's cached field data, so no additional network calls happen during typing. Supports partial matching inside quotes, auto-quoting string values, and proper escaping of special characters. - Numeric field values in sidebar: Fields like
status(UInt16) andbytes(UInt32) now appear as filterable fields and auto-load their top values alongside LowCardinality fields. - Shared field values cache: New Pinia store (
exploreFieldValues) allows the sidebar and editor to share field value data, eliminating redundant API calls.
Changed
- Tailwind CSS v4 migration: Upgraded from Tailwind v3 to v4 with oklch color system,
@themedirectives, and@tailwindcss/viteplugin (replaces PostCSS). - shadcn-vue Vega theme: Switched from new-york to Vega style with Zinc base and Blue accent. Small border radius for a sharper, more technical look.
- Sidebar defaults to collapsed: Icon-only mode maximizes screen real estate for log viewing. Expand via rail hover or
Cmd+B. - Theme toggle moved to sidebar footer: Single-click cycle (Light → Dark → System) instead of buried in dropdown menu.
- Histogram charts use Unovis: Migrated from custom chart to Unovis with brush-drag zoom, crosshair tooltips, and stacked bar support.
- Monaco editor lazy-loaded: SQL editor loads on demand, reducing initial bundle for LogchefQL-only users.
- Bolder chart colors: Blue chart gradient shifted one step darker for better visibility on both light and dark backgrounds.
Fixed
- Hyphenated field names work everywhere: Fields like
user-identifierare now backtick-quoted in all SQL queries (field values, histograms, group-by). Previously causeduser - identifiersubtraction errors. - Validation errors return 400, not 500: Invalid field names, timezones, and identifiers now return proper HTTP 400 Bad Request with
ValidationErrortype instead of 500 Internal Server Error. - Histogram tooltip styling: Fixed broken tooltip background/border after TW4 migration (
hsl(var(--...))→var(--...)). - Histogram crosshair null guard: Added optional chaining (
row?.ts) to prevent crash when data is empty. - Editor line height mismatch: Fixed LogchefQL editor height calculation (
baseLineHeight: 21→20to match Monaco'slineHeight). - 1-second histogram buckets: Support for sub-minute bucket intervals in ClickHouse.
- Brush zoom restored: Click-to-zoom on histogram bars works alongside brush-drag selection.
- Grouped histogram string values: Fixed dereferencing of grouped string values in histogram data.
- Session cookie handling: Fixed local dev cookie configuration and team provisioning.
- Team admin permissions: Team admins can now manage members on managed (provisioned) teams.
- Idle connection cleanup: Added
IdleTimeoutand periodicQueryTrackercleanup to prevent connection leaks. - Noisy logs reduced: Session management logs downgraded to DEBUG; structured slog source shortened to
file:line. - Cursor pointer restored: Added
cursor-pointerbase rule for all interactive elements (TW4 preflight removed it).
Release notes
Open source →Added
- Rich value autocomplete in LogchefQL editor — After typing
host=, the editor instantly suggests top field values with occurrence counts (e.g.,cdn.logchef.dev (1.7K)). Suggestions come from the sidebar's cached field data — no additional network calls during typing. Supports partial matching inside quotes, auto-quoting string values, and proper escaping of special characters. - Numeric field values in sidebar — Fields like
status(UInt16) andbytes(UInt32) now appear as filterable fields and auto-load their top values alongside LowCardinality fields. - Shared field values cache — New Pinia store (
exploreFieldValues) allows the sidebar and editor to share field value data, eliminating redundant API calls.
Changed
- Tailwind CSS v4 migration — Upgraded from Tailwind v3 to v4 with oklch color system,
@themedirectives, and@tailwindcss/viteplugin (replaces PostCSS). - shadcn-vue Vega theme — Switched from new-york to Vega style with Zinc base and Blue accent. Small border radius for a sharper, more technical look.
- Sidebar defaults to collapsed — Icon-only mode maximizes screen real estate for log viewing. Expand via rail hover or
Cmd+B. - Theme toggle moved to sidebar footer — Single-click cycle (Light → Dark → System) instead of buried in dropdown menu.
- Histogram charts use Unovis — Migrated from custom chart to Unovis with brush-drag zoom, crosshair tooltips, and stacked bar support.
- Monaco editor lazy-loaded — SQL editor loads on demand, reducing initial bundle for LogchefQL-only users.
- Bolder chart colors — Blue chart gradient shifted one step darker for better visibility on both light and dark backgrounds.
Fixed
- Hyphenated field names work everywhere — Fields like
user-identifierare now backtick-quoted in all SQL queries (field values, histograms, group-by). Previously causeduser - identifiersubtraction errors. - Validation errors return 400, not 500 — Invalid field names, timezones, and identifiers now return proper HTTP 400 Bad Request with
ValidationErrortype instead of 500 Internal Server Error. - Histogram tooltip styling — Fixed broken tooltip background/border after TW4 migration (
hsl(var(--...))→var(--...)). - Histogram crosshair null guard — Added optional chaining (
row?.ts) to prevent crash when data is empty. - Editor line height mismatch — Fixed LogchefQL editor height calculation (
baseLineHeight: 21→20to match Monaco'slineHeight). - 1-second histogram buckets — Support for sub-minute bucket intervals in ClickHouse.
- Brush zoom restored — Click-to-zoom on histogram bars works alongside brush-drag selection.
- Grouped histogram string values — Fixed dereferencing of grouped string values in histogram data.
- Session cookie handling — Fixed local dev cookie configuration and team provisioning.
- Team admin permissions — Team admins can now manage members on managed (provisioned) teams.
- Idle connection cleanup — Added
IdleTimeoutand periodicQueryTrackercleanup to prevent connection leaks. - Noisy logs reduced — Session management logs downgraded to DEBUG; structured slog source shortened to
file:line. - Cursor pointer restored — Added
cursor-pointerbase rule for all interactive elements (TW4 preflight removed it).
- Rich value autocomplete in LogchefQL editor: After typing
-
v1.4.2-0.20260402074653-b2676751027702 Apr 2026 pre-releaseNothing published for this version
-
v1.4.102 Apr 2026Release notes
Open source →Maintenance release on top of v1.4.0.
Added
- Canonical request logging: Every API request emits a structured log line with the method, path, status, latency, user, and team. Companion activity log tracks user-visible state changes for audit.
Changed
- Product name standardized to "Logchef": Replaced lingering "LogChef" casing across the UI, docs, and log lines.
- Session management logs dropped from INFO to DEBUG. Only
user.loginstays at INFO; the rest is audit-grade noise that doesn't belong in the default log stream. slogsource field flattened tofile:line. Easier to grep, fewer bytes per line.
Fixed
- Team admins can manage members on provisioned (managed) teams: Previously the managed flag locked them out of all membership edits.
- Idle ClickHouse connection cleanup: Added
IdleTimeoutand a periodicQueryTrackersweep so leaked connections don't accumulate. - Provisioning docs moved into the sidebar with a clearer "Getting started" sub-section so first-time admins actually find them.
Release notes
Open source →Maintenance release on top of v1.4.0.
Added
- Canonical request logging — Every API request emits a structured log line with the method, path, status, latency, user, and team. Companion activity log tracks user-visible state changes for audit.
Changed
- Product name standardized to "Logchef" — Replaced lingering "LogChef" casing across the UI, docs, and log lines.
- Session management logs dropped from INFO to DEBUG. Only
user.loginstays at INFO; the rest is audit-grade noise that doesn't belong in the default log stream. slogsource field flattened tofile:line. Easier to grep, fewer bytes per line.
Fixed
- Team admins can manage members on provisioned (managed) teams — Previously the managed flag locked them out of all membership edits.
- Idle ClickHouse connection cleanup — Added
IdleTimeoutand a periodicQueryTrackersweep so leaked connections don't accumulate. - Provisioning docs moved into the sidebar with a clearer "Getting started" sub-section so first-time admins actually find them.
-
v1.4.030 Mar 2026Release notes
Open source →Added
- Declarative provisioning: Define teams, sources, and access control in a TOML config file for GitOps-style management. Resources declared in config are tagged "managed" and fully controlled by config; UI-created resources are left alone. Supports dry-run mode, separate
provisioning.tomlfile, and an admin export endpoint (GET /admin/provisioning/export). API rejects mutations on managed resources. - All Teams collections view: Browse saved queries across all your teams from a single page. New "All Teams" option in the team dropdown on the Collections page shows queries with Team and Source columns.
- SQL input validation: Timezone, field name, and group-by inputs are now validated before SQL interpolation, preventing injection attacks on ClickHouse queries.
Changed
- Auth returns 401 for expired sessions: Backend now returns HTTP 401 (not 403) for authentication failures, so the frontend correctly redirects to login instead of showing a Forbidden page.
- Parallel source health checks: Admin source listing now pings all sources concurrently instead of serially, reducing page load time proportional to source count.
- OIDC audience validation enabled: ID token verifier now validates the audience claim to prevent token confusion attacks.
Fixed
- Query cancellation works end-to-end: LogchefQL queries now use a proper cancellable context (was no-op). Frontend preserves the query ID during cancellation so backend
KILL QUERYcan execute. - SQL mode no longer rewrites user queries: Time range and limit changes no longer silently modify raw SQL in SQL mode, respecting the user's query as written.
- Histogram timestamp detection: The timestamp field check now inspects only the SELECT clause instead of the full query, preventing false positives when the field appears in WHERE/ORDER BY.
- No duplicate query on page load: The auto-execute watcher now skips if URL state initialization already triggered a query.
- Post-login redirect preserved: The requested page is now stored in a cookie through the OIDC round-trip, so users return to their original page after login.
- Calendar highlights today: Date picker calendar now opens focused on today's date with default times (00:00:00 for From, 23:59:59 for To).
- Bookmark index covers sort: New migration adds
updated_atto the bookmark index for efficient sorted queries. - Frontend type errors fixed: Resolved 3 pre-existing TypeScript errors in SourceSparkline, TeamsList, and SourceStats.
- QueryEditor decomposed: Extracted AiSqlDialog, VariableConfigSheet, and VariablesPanel into focused components (2645→1839 lines).
- Context store migrated: Converted from Options API to Composition API setup function for consistency.
- QueryEditor props typed: Replaced runtime prop definitions with TypeScript interface.
Release notes
Open source →Added
- Declarative provisioning — Define teams, sources, and access control in a TOML config file for GitOps-style management. Resources declared in config are tagged "managed" and fully controlled by config; UI-created resources are left alone. Supports dry-run mode, separate
provisioning.tomlfile, and an admin export endpoint (GET /admin/provisioning/export). API rejects mutations on managed resources. - All Teams collections view — Browse saved queries across all your teams from a single page. New "All Teams" option in the team dropdown on the Collections page shows queries with Team and Source columns.
- SQL input validation — Timezone, field name, and group-by inputs are now validated before SQL interpolation, preventing injection attacks on ClickHouse queries.
Changed
- Auth returns 401 for expired sessions — Backend now returns HTTP 401 (not 403) for authentication failures, so the frontend correctly redirects to login instead of showing a Forbidden page.
- Parallel source health checks — Admin source listing now pings all sources concurrently instead of serially, reducing page load time proportional to source count.
- OIDC audience validation enabled — ID token verifier now validates the audience claim to prevent token confusion attacks.
Fixed
- Query cancellation works end-to-end — LogchefQL queries now use a proper cancellable context (was no-op). Frontend preserves the query ID during cancellation so backend
KILL QUERYcan execute. - SQL mode no longer rewrites user queries — Time range and limit changes no longer silently modify raw SQL in SQL mode, respecting the user's query as written.
- Histogram timestamp detection — The timestamp field check now inspects only the SELECT clause instead of the full query, preventing false positives when the field appears in WHERE/ORDER BY.
- No duplicate query on page load — The auto-execute watcher now skips if URL state initialization already triggered a query.
- Post-login redirect preserved — The requested page is now stored in a cookie through the OIDC round-trip, so users return to their original page after login.
- Calendar highlights today — Date picker calendar now opens focused on today's date with default times (00:00:00 for From, 23:59:59 for To).
- Bookmark index covers sort — New migration adds
updated_atto the bookmark index for efficient sorted queries. - Frontend type errors fixed — Resolved 3 pre-existing TypeScript errors in SourceSparkline, TeamsList, and SourceStats.
- QueryEditor decomposed — Extracted AiSqlDialog, VariableConfigSheet, and VariablesPanel into focused components (2645→1839 lines).
- Context store migrated — Converted from Options API to Composition API setup function for consistency.
- QueryEditor props typed — Replaced runtime prop definitions with TypeScript interface.
- Declarative provisioning: Define teams, sources, and access control in a TOML config file for GitOps-style management. Resources declared in config are tagged "managed" and fully controlled by config; UI-created resources are left alone. Supports dry-run mode, separate
-
v1.3.1-0.20260205080757-86df1713bb1e05 Feb 2026 pre-releaseNothing published for this version
-
v1.3.005 Feb 2026Release notes
Open source →Added
- Configurable query result limit: New
[query]config section withmax_limitsetting (default: 1,000,000 rows). Allows admins to increase export limits based on infrastructure capacity. Frontend dropdown now shows options up to 1M rows. - User preferences persistence: Theme, timezone, display mode, and fields panel state now persist across sessions. Preferences sync automatically and load on login.
- Team admins can manage their teams: Team admins now have access to team settings and member management without requiring global admin privileges.
- Source editing and duplication: Edit existing source configurations and duplicate sources for quick setup of similar data sources.
Changed
- Query limit options now dynamically loaded from server config instead of hardcoded values.
- SQL editor now has max height (300px) with scrollbar for lengthy queries.
Fixed
- Histogram now auto-refreshes when changing Group By column selection.
- Time icon in date picker now visible in dark mode.
- Date picker Now button auto-applies and fixes initial date format issues.
- JSON strings embedded in log fields now auto-parse for better readability.
- Table auto-resizes when filter sidebar closes.
Release notes
Open source →Added
- Configurable query result limit — New
[query]config section withmax_limitsetting (default: 1,000,000 rows). Allows admins to increase export limits based on infrastructure capacity. Frontend dropdown now shows options up to 1M rows. - User preferences persistence — Theme, timezone, display mode, and fields panel state now persist across sessions. Preferences sync automatically and load on login.
- Team admins can manage their teams — Team admins now have access to team settings and member management without requiring global admin privileges.
- Source editing and duplication — Edit existing source configurations and duplicate sources for quick setup of similar data sources.
Changed
- Query limit options now dynamically loaded from server config instead of hardcoded values.
- SQL editor now has max height (300px) with scrollbar for lengthy queries.
Fixed
- Histogram now auto-refreshes when changing Group By column selection.
- Time icon in date picker now visible in dark mode.
- Date picker Now button auto-applies and fixes initial date format issues.
- JSON strings embedded in log fields now auto-parse for better readability.
- Table auto-resizes when filter sidebar closes.
- Configurable query result limit: New
-
v1.2.227 Jan 2026Release notes
Open source →Maintenance release on top of v1.2.1. Bundles the CLI v0.1.3 bump.
Changed
versionStringlinker flag now reaches the UI sidebar, so the version badge matches the running binary instead of falling back tounknown.- Alertmanager UI settings removed: Obsolete after the SMTP / webhook alert delivery work in v1.2.0.
Fixed
- Migration description for the TLS setting was misleading; corrected.
- Changelog template syntax is now escaped so
{{ ... }}examples render literally.
Release notes
Open source →Maintenance release on top of v1.2.1. Bundles the CLI v0.1.3 bump.
Changed
versionStringlinker flag now reaches the UI sidebar, so the version badge matches the running binary instead of falling back tounknown.- Alertmanager UI settings removed — Obsolete after the SMTP / webhook alert delivery work in v1.2.0.
Fixed
- Migration description for the TLS setting was misleading; corrected.
- Changelog template syntax is now escaped so
{{ ... }}examples render literally.
-
v1.2.2-0.20260121115215-f0a82c92d69421 Jan 2026 pre-releaseNothing published for this version
-
v1.2.121 Jan 2026Release notes
Open source →Fixed
- Explore history URL hydration: Fixed issue where browser history navigation could fail to restore query state correctly.
Release notes
Open source →Fixed
- Explore history URL hydration — Fixed issue where browser history navigation could fail to restore query state correctly.
-
v1.2.021 Jan 2026Release notes
Open source →Added
- Rust CLI: New cross-platform command-line interface written in Rust
logchef auth: Browser-based OIDC authentication with PKCE flowlogchef query: Execute LogchefQL queries with syntax highlighting (powered by tailspin)logchef config: Manage CLI configuration and multiple server contextslogchef query --no-timestamp: Hide timestamps in text output for cleaner exports- Multi-context support for managing dev/staging/prod instances (kubectl-style)
- Configurable keywords and regex patterns for log highlighting
- Configuration stored at
~/.config/logchef/logchef.json
- CLI OIDC config:
oidc.cli_client_idadded toconfig.tomland docs for browser-based CLI auth - CLI Token Exchange API:
POST /api/v1/cli/tokenendpoint for CLI authentication - CLI OIDC Discovery:
/api/v1/metanow includesoidc_issuerandcli_client_idfor CLI auth flow - Multi-select variables: Select multiple values that expand to
IN (...)clauses in SQL. - SQL optional clauses (
[[ ... ]]): Wrap variable clauses to auto-remove when value is empty. - Variable widget configuration: Configure variables as text inputs, dropdowns, or multi-selects with default values.
- Collections "All Sources" view: Browse saved queries across all sources in one place.
- Alert delivery via SMTP and webhooks: Send notifications directly without Alertmanager.
- Saved query name shown in browser tab title.
- Smart LIMIT handling in SQL mode.
- Support for CTEs, JOINs, and subqueries with template variables.
Changed
- Saved queries persist variable widget configuration and defaults.
- Relative time range refreshes before each query execution.
- Reduced log noise and redacted session IDs for security.
Fixed
- SQLite SQLITE_BUSY errors: Implemented dual-connection pattern (read pool + single write connection) to eliminate database lock contention under concurrent API requests.
- Saved query updates use the current editor content.
- Alert timestamps use ISO8601 UTC formatting for last triggered.
- Alert relative time formatting edge cases.
- Variable date display uses consistent YYYY-MM-DD format.
- Template variables validated and sent consistently to backend.
- Canceled requests on page reload no longer show error toasts.
- Collections race condition causing empty list on initial load.
- Y-scroll bar eliminated on explorer main content area.
- Variable datetime-local format accepts values without seconds.
Removed
- Legacy Go CLI (
cmd/logchef/,internal/cli/): replaced by Rust CLI. config.sample.toml: superseded by the fully commentedconfig.toml.
Release notes
Open source →Added
- Rust CLI — New cross-platform command-line interface written in Rust
logchef auth— Browser-based OIDC authentication with PKCE flowlogchef query— Execute LogchefQL queries with syntax highlighting (powered by tailspin)logchef config— Manage CLI configuration and multiple server contextslogchef query --no-timestamp— Hide timestamps in text output for cleaner exports- Multi-context support for managing dev/staging/prod instances (kubectl-style)
- Configurable keywords and regex patterns for log highlighting
- Configuration stored at
~/.config/logchef/logchef.json
- CLI OIDC config —
oidc.cli_client_idadded toconfig.tomland docs for browser-based CLI auth - CLI Token Exchange API —
POST /api/v1/cli/tokenendpoint for CLI authentication - CLI OIDC Discovery —
/api/v1/metanow includesoidc_issuerandcli_client_idfor CLI auth flow - Multi-select variables — Select multiple values that expand to
IN (...)clauses in SQL. - SQL optional clauses (
[[ ... ]]) — Wrap variable clauses to auto-remove when value is empty. - Variable widget configuration — Configure variables as text inputs, dropdowns, or multi-selects with default values.
- Collections "All Sources" view — Browse saved queries across all sources in one place.
- Alert delivery via SMTP and webhooks — Send notifications directly without Alertmanager.
- Saved query name shown in browser tab title.
- Smart LIMIT handling in SQL mode.
- Support for CTEs, JOINs, and subqueries with template variables.
Changed
- Saved queries persist variable widget configuration and defaults.
- Relative time range refreshes before each query execution.
- Reduced log noise and redacted session IDs for security.
Fixed
- SQLite SQLITE_BUSY errors — Implemented dual-connection pattern (read pool + single write connection) to eliminate database lock contention under concurrent API requests.
- Saved query updates use the current editor content.
- Alert timestamps use ISO8601 UTC formatting for last triggered.
- Alert relative time formatting edge cases.
- Variable date display uses consistent YYYY-MM-DD format.
- Template variables validated and sent consistently to backend.
- Canceled requests on page reload no longer show error toasts.
- Collections race condition causing empty list on initial load.
- Y-scroll bar eliminated on explorer main content area.
- Variable datetime-local format accepts values without seconds.
Removed
- Legacy Go CLI (
cmd/logchef/,internal/cli/) — replaced by Rust CLI. config.sample.toml— superseded by the fully commentedconfig.toml.
- Rust CLI: New cross-platform command-line interface written in Rust
-
v1.1.1-0.20251229072656-a439e277f03229 Dec 2025 pre-releaseNothing published for this version
-
v1.1.029 Dec 2025Release notes
Open source →Added
- Bookmark Favorite Queries - Star saved queries for quick access (#60)
- Bookmarked queries appear at top of collections dropdown
- Copy shareable URL for any saved query
- Direct link format:
/logs/collection/:teamId/:sourceId/:collectionId
Changed
- LogchefQL Parser Rewrite - Replaced hand-written tokenizer with grammar-based parser using participle
- Better error messages with position-aware diagnostics
- More maintainable and extensible grammar definitions
- Improved query type detection (LogchefQL vs SQL)
- Frontend Tooling Migration - Switched from pnpm + Vite to Bun + rolldown-vite
- Build time: ~2.3s (was >55s)
- Dev server start: ~1s (was ~3s)
- Install time: ~8s (was ~25s)
- Frontend State Management - Refactored stores and composables
- Centralized URL state synchronization
- Cleaner explore store with better state transitions
- Improved context and teams store initialization
Fixed
- Proper context propagation throughout backend (contextcheck compliance)
- Reduced cyclomatic complexity in high-complexity functions
- Saved Query Navigation - Switching between saved queries no longer shows stale content
- Saved Query Validation - Backend now accepts relative-only time ranges (was: "absolute start time must be positive")
- Cross-Page Context - Team/source selection preserved when navigating between Explorer, Collections, and Alerts
- Sidebar Navigation - Links now include full context params (team + source)
Contributors
- Bookmark Favorite Queries - Star saved queries for quick access (#60)
-
v1.0.1-0.20251222174226-6aadee56659222 Dec 2025 pre-releaseNothing published for this version
-
v1.0.020 Dec 2025Release notes
Open source →The 1.0 release marks Logchef as production-ready. Eight months of development brought alerting, a proper backend query language, field exploration, and many UX improvements.
Highlights
- Alerting system - SQL-based alerts with notification delivery
- LogchefQL Backend Parser - Full parsing, validation, and type-aware SQL generation in Go
- Field Values Sidebar - Kibana-style field exploration with click-to-filter
- Query Cancellation - Cancel long-running queries in ClickHouse, not just the UI
Added
- Field Values Sidebar - Kibana-inspired field exploration panel
- Shows top 10 unique values for
LowCardinality,Enum, andStringcolumns with occurrence counts - Click any value to add it as a filter (
field="value") or exclude it (field!="value") - Auto-expands fields with ≤6 distinct values for quick access
- Respects time range and active LogchefQL query filters
- Progressive per-field loading - values load in parallel (max 4 concurrent) with per-field status
- Hybrid loading strategy - LowCardinality/Enum fields auto-load, String fields require click
- Per-field error handling with retry button
- Shows top 10 unique values for
- Backend LogchefQL parser (
internal/logchefql/) - full parsing, validation, and SQL generation in Go- Pipe operator (
|) for custom SELECT clauses:namespace="prod" | namespace msg.level - Dot notation for nested JSON:
log_attributes.user.name = "john" - Quoted field syntax for dotted keys:
log_attributes."http.status_code" >= 500 - Type-aware SQL for Map, JSON, and String columns
- Pipe operator (
- LogchefQL API endpoints:
/logchefql/translate,/logchefql/validate,/logchefql/query - Field value exploration endpoints:
/fields/values,/fields/:fieldName/values - Query cancellation - Cancel button or
Esckey cancels the query in ClickHouse - Build commands:
just build-ui-analyzefor bundle analysis,just clean-allfor deep clean - Double-click column header resizer to auto-fit column width
Changed
- Breaking: LogchefQL parsing moved from frontend to backend
- Architecture: Backend is now the single source of truth for SQL generation
- Queries execute via
/logchefql/query- backend builds and executes full SQL - "View as SQL" shows actual executed SQL from backend
- Mode switching (LogchefQL → SQL) fetches SQL from
/logchefql/translate
- Queries execute via
- LogchefQL validation uses backend API with debounced calls
- Field values API accepts
logchefqlparam instead ofconditions - Pipe operator includes timestamp field in SELECT for proper ordering
- Data table UX improvements:
- Compact rows for better log density
- Expand/collapse chevron on each row
- Click-to-copy cells with visual feedback
- Cell action buttons in floating overlay
- Unrestricted column resizing
Fixed
- Histogram queries work with MATERIALIZED timestamp columns (#59)
- Surrounding logs (context modal) works with MATERIALIZED timestamp columns
- Field sidebar excludes complex types (Map, Array, Tuple, JSON)
- Field values queries have 15s timeout to prevent query pileup
- Export in compact mode no longer returns undefined values
- Alerts create redirect and dark mode AI input styling
Removed
- Frontend LogchefQL parser - replaced by backend implementation
-
v0.6.004 Dec 2025Release notes
Open source →Added
- Alerting System - SQL-based alerting with notification delivery
- Create alerts using LogchefQL or SQL queries
- Configure thresholds, frequency, and severity
- Route alerts to Slack, PagerDuty, email via webhooks and SMTP
- Alert history with execution logs
- Dedicated alert detail page with edit and history tabs
- Admin Settings UI - Runtime configuration management via web interface
- Manage alerts, AI, authentication, and server settings
- Settings stored in database, override config.toml at runtime
- Config-to-database seeding on first boot
- Duplicate source feature for quick configuration copying
- Keyboard typeahead navigation in team member and source dropdowns
- Alert history retention limit enforcement
config.sample.tomlshowing minimal essential configuration
Changed
- Runtime configuration now loaded from database, overriding config.toml for non-essential settings
- Simplified
config.sample.tomlto show only bootstrap essentials (server, sqlite, oidc, auth, logging) - AI base_url now defaults to standard OpenAI API endpoint (
https://api.openai.com/v1) - Redesigned alerts list UI for better readability
- Simplified alerts by removing
query_typeandlookback_secondsfields
Fixed
- Database settings now actually used at runtime (LoadRuntimeConfig integration)
- Active tab persistence when saving settings (no longer jumps to Alerts tab)
- Number input values properly converted to strings before API submission
- Acronyms (URL, API, AI, TLS, ID) now properly formatted in settings UI
- Alert
delivery_failedflag cleared after successful retry - Available users and sources now sorted alphabetically in team dialogs
- Null check added for test query warnings in AlertForm
- Frontend context and source loading logic improvements
- Duplicate
updateCustomFieldsmethod removed from monaco-adapter
Removed
- Rooms feature (refactored out)
- Alerting System - SQL-based alerting with notification delivery
-
v0.5.003 Oct 2025Release notes
Open source →Added
- LogchefQL Query Language Improvements
- Pipe operator (
|) for custom SELECT fields:namespace="prod" | namespace msg.level - Dot notation for nested JSON fields:
log_attributes.user.name = "john" - Quoted field support for dotted keys:
log_attributes."user.name" = "alice" - Type-aware SQL generation for Map, JSON, and String columns
- Pipe operator (
- Query History - localStorage-based history per team-source, shows last 10 executed queries
- Enhanced Source Stats - Table schema info with column types, TTL expressions, sort keys, primary key display
- Structured Error Handling - Position-aware error reporting with line/column info, user-friendly messages
- Phase 2 P0 safety improvements for LogchefQL
Fixed
- Preserve quoted literals and harden numeric coercion to avoid precision loss
- BigInt checks for safe integer range
- LogchefQL Query Language Improvements
-
v0.4.012 Aug 2025Release notes
Open source →Added
- Query Variables - Use
{{variable_name}}in LogchefQL or SQL, input fields appear for each variable - Prometheus Metrics - Comprehensive metrics with meaningful labels for monitoring
- Grafana Dashboard - Pre-built dashboard for Logchef monitoring
- Compact Log Viewer - Terminal-style compact view for log exploration
- Enhanced AI SQL Assistant with current query context
- Histogram toggle in UI
- Tooltips on theme switchers
Changed
- Refactored table controls for consistent UI across viewing modes
- Refactored team/source context management for better robustness
- Simplified histogram generation with LogchefQL-only rule
- Replaced toast component with Sonner
- Centralized route↔store sync
Fixed
- Query cancellation improvements
- Team switching race conditions and 403 errors
- Saved queries load when team sources aren't fully loaded yet
- Collections navigation route in SavedQueriesDropdown
- Handle Logchef QL variables properly in query translation
- Vue warnings in QueryEditor component
- Docker compose missing API token config
Contributors
- @songxuanqing - Query variables feature (#9)
- Query Variables - Use
-
v0.3.013 Jun 2025Release notes
Open source →Added
- MCP Server Integration - Model Context Protocol server for AI assistant integration
- MCP server documentation
-
v0.2.212 Jun 2025Release notes
Open source →Added
- AI SQL Assistant - Natural language to SQL query generation using OpenAI-compatible APIs
- API Token Authentication - Programmatic access via API tokens
- Query timeout settings and version info display
- TeamEditor role for saving queries to collections
- Logchef logo and credits
Changed
- AI assistant includes current query context for better suggestions
- Updated quickstart instructions with specific release version
Fixed
- Stale histogram data and empty table on source switch
- Panic when timestamp not in SELECT clause
- Query editor content updates on query_id change with KeepAlive
Contributors
- @vedang - Placeholder text improvements
- @r--w - Documentation link fix
- @gowthamgts - Quickstart link fix
-
v0.2.2-0.20250430155450-8c54a8cb38cd30 Apr 2025 pre-releaseNothing published for this version
-
v0.2.127 Apr 2025Release notes
Open source →Patch release for the Logchef CLI.
Added
- Startup banner. Running
logchefin an interactive terminal shows the current version and a branded banner. It can be disabled in config, with an environment variable, in CI, or with--quiet. - Update notification. Interactive commands check for a newer stable CLI
release and show an unobtrusive update notice. The check is cached and can be
disabled in config, with an environment variable, in CI, or with
--quiet.
Fixed
- Brand color. The startup banner uses the Logchef blue.
- Release builds package the bundled skill correctly across supported target platforms.
- Startup banner. Running
-
v0.2.1-rc.127 Apr 2025 pre-releaseNothing published for this version
-
v0.2.027 Apr 2025Release notes
Open source →Logchef CLI 0.2.0 is the VictoriaLogs release:
query,sql,find, andtailall work against VictoriaLogs sources, andtailfollows both backends over a native SSE stream (with a--pollfallback) instead of the old polling loop. It also adds a batch of inspection and setup commands —explain,fields,histogram,open,doctor,skills, andcompletions— plus a global--quiet, syntax-highlighted generated queries, and actionable error hints.Added
explaincommand: Print the generated ClickHouse SQL / VictoriaLogs LogsQL for a LogchefQL query without executing it. Syntax-highlighted.fieldscommand: Discover fields on a source and their top values, for building a query without opening the explorer.histogramcommand: Counts-over-time buckets rendered as a terminal bar chart. Works against both ClickHouse and VictoriaLogs sources.opencommand: Open the current query in the web explorer. Accepts a relative--sinceor an absolute--from/--to,--sqlfor a native query, and--printto emit the URL instead of launching a browser.doctorcommand: Diagnose your setup — config, auth, server reachability, version compatibility, and resolved defaults — with fix hints for each failing check.--jsonfor machine-readable output.skillscommand: Serve the bundled, version-matched CLI skill for AI agents:logchef skills get core [--full].completionscommand: Generate shell completions for bash, zsh, fish, and powershell.- Native SSE
tail:tailfollows both ClickHouse and VictoriaLogs sources over a server-sent-events stream, replacing the old bounded-polling loop. Use--pollto fall back to polling. - Global
--quiet/-q: Suppress progress and diagnostic output on any command for clean scripting.
Changed
- VictoriaLogs parity:
query,sql,find, andtailnow work against VictoriaLogs sources, not just ClickHouse.sql --since/--from/--totime injection andquery --dry-runare fixed for VictoriaLogs. - Syntax-highlighted generated queries:
explainand the--show-sqltrace onquery/sqlare syntax-highlighted on a TTY. - Actionable error hints: Command failures now suggest the likely fix (wrong source, missing auth, unsupported capability) instead of just surfacing the raw server error.
Release notes
Open source →Initial public release.
Added
- Log Explorer - Interactive log exploration with filtering and search
- LogchefQL - Custom query language for log filtering
- SQL Mode - Full ClickHouse SQL support for advanced queries
- Saved Queries - Save and share queries within teams
- Team Management - Multi-tenant access with RBAC
- Source Management - Configure multiple ClickHouse data sources
- Histogram Visualization - Time-based log distribution charts
- Monaco Editor - Syntax highlighting and autocompletion
- OIDC Authentication - Single sign-on support
- Dark/Light Theme - User preference support
- Docker Deployment - Docker Compose setup for quick start
Infrastructure
- Single binary deployment
- SQLite for metadata storage
- ClickHouse for log storage
- Embedded web UI
- Prometheus metrics endpoint
-
v0.2.0-rc.426 Apr 2025 pre-releaseNothing published for this version
-
v0.2.0-rc.326 Apr 2025 pre-releaseNothing published for this version
-
v0.2.0-rc.226 Apr 2025 pre-releaseNothing published for this version
-
v0.2.0-rc.126 Apr 2025 pre-releaseNothing published for this version
-
v0.1.0-alpha.425 Apr 2025 pre-releaseNothing published for this version
-
v0.1.0-alpha.324 Apr 2025 pre-releaseNothing published for this version
-
v0.1.0-alpha.223 Apr 2025 pre-releaseNothing published for this version
-
v0.1.0-alpha.122 Apr 2025 pre-releaseNothing published for this version