Summary
July 2026 · 2026-07-01 – 2026-07-31
What landed this month:
- Cluster DDL and operational events are now recorded in the
greptime_private.eventssystem table. - Prometheus native histogram support advanced across the write path, runtime model, and PromQL functions.
- Table-aware permissions are now enforced across SQL queries,
remote_write, andOpenTelemetryingest.
GreptimeDB shipped v1.2.0-beta.1 on July 31, the first beta of v1.2.0. The release post walks through it, including the 4 breaking changes to check before upgrading. Patch releases v1.1.4, v1.1.3 and v1.1.2 also went out this month. Still on an older version? Upgrade to the latest release.
Contributors
Over the past month, 20 contributors merged a total of 209 PRs. Among them, 7 individual contributors contributed 10 PRs. Welcome to our new contributors: @yimeng, @divyansh-1009, @srivtx!
Thanks to the community contributors who shipped this month:
- @raphaelroshan db#8539 db#8484 db#8449
- @QuakeWang db#8481 db#8426
- @agrawalx db#8491
- @divyansh-1009 db#8238
- @lyang24 db#8587
- @yimeng db#8637
- @srivtx db#8403
Highlights
db#8648 feat(event-recorder): configure lifecycle event recording
Cluster lifecycle events now land in the greptime_private.events system table rather than only the logs. Each row carries the event type, a JSONB payload and a timestamp, with procedure id, state and error columns for procedure-driven events, so "when was this table created, altered or dropped" becomes a SQL query.
Several PRs widened that scope this month: DDL events for databases (db#8623), tables (db#8627), views (db#8626) and flows (db#8632), plus repartition (db#8665), WAL prune (db#8677) and batch GC (db#8673), alongside the region migration events that were already recorded.
Recording is configurable: event_recorder.ttl sets the retention of the events table (90d by default), and event_recorder.event_types narrows which types are recorded — omit it to record everything, set it to an empty array to turn recording off.
db#8382 feat: persist Prometheus remote write v2 native histograms
Prometheus Remote Write v2 native histograms are now decoded and persisted, stored as a single greptime_native_histogram Struct field column in the same metric table as regular samples. Spans, buckets, custom values, and the separate int/float count families all live inside the Struct, where the populated family signals the histogram type.
Three follow-ups pushed the read side forward: db#8656 added a shared runtime model with reconciliation, reset detection, and quantiles; db#8664 built the PromQL function layer; and db#8693 wired up result plumbing so native histogram vectors and matrices serialize over HTTP. The work is tracked as an eight-PR series and is still in progress.
db#8552 fix: enforce table-aware permissions across query and ingest protocols
Table-level authorization gaps in query and ingestion paths are now closed. INSERT INTO dst SELECT * FROM src requires access to both tables, and remote_write, OTLP, InfluxDB, and log requests that span multiple tables authorize every target before the first batch is written.
db#8624 perf(mito2): make compaction picker asynchronous to avoid blocking the region worker
Compaction picking previously ran on the region worker loop, where a slow picker could block writes and DDL. The picker now runs in a background thread, and a new BackgroundNotify::CompactionPickFinished message delivers results back to the worker. This release also fixes a data-visibility bug where a truncate raced a concurrent compaction and left the compaction's output files visible after truncation.
db#8540 feat(json2): support JSON2 nested path fallback reads
Reading a nested path no longer requires the SST to store that exact path. When a query asks for a.b.c but the file only holds a.b as a variant leaf, the reader decodes a.b.c out of the parent instead of returning nothing.
Alongside it, db#8435 switched variant payloads from serde JSON bytes to jsonb binary encoding. Two constraints also landed: JSON2 columns currently accept only JSON objects (db#8381), and tables holding them must be append-only (db#8434).
Ecosystem Updates
.NET Ingester
1 release this month (v0.3.0).
GreptimeClientOptions.KeepAlive(KeepAliveOptions) adds configurable HTTP/2 gRPC keepalive to all write paths.- Keepalive is enabled by default:
PingDelay30s,PingTimeout10s,PingWhileIdletrue. - Idle connections silently reset by load balancers, NAT gateways, or firewalls are now detected via pings rather than surfacing as write errors.
Go Ingester
2 releases this month (v0.7.4, v0.7.3).
gRPCkeepalive is now enabled by default for all connections- Multi-endpoint failover support is added to the client
- Dependency
golang.org/x/netis bumped tov0.55.0 github.com/opencontainers/runcis updated tov1.3.6
Dashboard
4 releases this month (v0.13.10, v0.13.9, v0.13.8, v0.13.7).
- Dashboards can now be saved as snapshots
- Table column widths are locked only during resize mode, not always
- All supported Perses plugins are now included in the dashboard
- Hidden columns now show a tooltip hint in the virtual list logs view
- PromQL editor query header and Prometheus plugin
promqlupdate bugs are fixed
Good First Issues
New to GreptimeDB? These are scoped for a first contribution. Comment on an issue to pick it up.
Issue#7603 Support WITH (timeout/wait) for DDL statements
Only ALTER TABLE repartition accepts WITH (timeout='...', wait=...) today; every other DDL submits its procedure and waits for completion. Extend the parser and the DDL submission paths so CREATE/DROP/TRUNCATE, views and flows take the same options, keeping them separate from table and database options so they are not persisted as table properties. The issue breaks the work down per statement, so it can be picked up one DDL at a time.
Keywords: SQL, DDL, Parser
Difficulty: Medium
Issue#8634 Prometheus remote read does not honor custom timestamp and value column names
Remote write already accepts an existing metric table whose timestamp and value columns use names other than the process-wide defaults, but remote read still looks them up as greptime_timestamp and greptime_value, so the query fails to plan or reports a missing column. Resolve both columns from the table schema, thread the names through query planning and result conversion, and add a remote read regression test.
Keywords: Prometheus, Remote Read, Query Engine
Difficulty: Medium
Get Involved
- Docs: https://docs.greptime.com
- GitHub: https://github.com/GreptimeTeam/greptimedb
- X: https://x.com/Greptime
Questions, bug reports, or feature ideas are all welcome. Open an issue or say hi in the community channel.


