Timeplus Enterprise 3.3
Key Highlights
For a detailed tour of the new features in this release, see What's New in Timeplus Enterprise 3.3.
Key highlights of the Timeplus 3.3 release include:
- New backup and recovery capabilities: a stream tool for stream data recovery and backup/restore, sequence-aware backup and recovery controls, plus more resilient recovery paths with incremental commit replay and self-healing from torn WAL tails.
- Smarter cluster workload balancing: stream-shard leader rebalancing and a reliable workload rebalancer for materialized views, with new
SYSTEM TRANSFER SCHED MATERIALIZED VIEW/SYSTEM REBALANCE SCHED MATERIALIZED VIEWScommands and configurable scheduling policies. - Major Python UDF upgrades: embedded CPython migrated to 3.14 free-threaded with improved observability, UDF init hooks via SETTINGS, and automatic package reconciliation from S3-hosted requirements.txt.
- Faster and leaner startup and recovery: lazy-loaded primary key index to bound startup memory, memory-pressure interventions to prevent materialized-view reboot recovery storms, and containment of single-table startup failures.
- Streaming SQL enhancements: streaming LEFT ANTI JOIN,
SHUFFLE BYpropagation through CTE/subquery boundaries, shard pruning for IN-subqueries, and a new offsets-only checkpoint mode. - Broad stability and correctness hardening across Raft replication, checkpoints, mutable streams, Kafka sources, and memory accounting.
Supported OS
| Deployment Type | OS |
|---|---|
| Linux bare metal | x64 or ARM chips: Ubuntu 20.04+, RHEL 8+, Fedora 35+, Amazon Linux 2023 |
| Mac bare metal | Intel or Apple chips: macOS 14, macOS 15 |
| Kubernetes | Kubernetes 1.25+, with Helm 3.12+ |
Releases
We recommend using stable releases for production deployment. Engineering builds are available for testing and evaluation purposes.
3.3.3
Released on 09-29-2026. Installation options:
- For Linux or Mac users: Downloads
- For Docker users (not recommended for production):
docker run -p 8000:8000 docker.timeplus.com/timeplus/timeplus-enterprise:3.3.3 - For Kubernetes users:
helm install timeplus/timeplus-enterprise --version 13.0.7
Component versions:
- timeplusd 3.3.3
- timeplus_appserver 3.3.1
- timeplus_connector 3.1.0
- timeplus cli 3.0.0
- timeplus byoc 1.0.1-rc.2
Changelog
This release consolidates timeplusd changes introduced since 3.3.1. For changes already published in 3.3.1, see the 3.3.1 changelog below.
Features and Enhancements
- Harden timeplusd meta CLI and add offline database drop for outage remediation (#12300)
- Add partition-scoped backup and additive fill restore to the stream tool (#12331)
Bug Fixes
- Fix a Raft scheduler deadlock that occurred when an outbound send queue was full (#12418). Impact: could halt replication and leader election cluster-wide until restarted.
- Reject pausing a materialized view before its first pipeline build (#12328). Impact: a
SYSTEM PAUSE MATERIALIZED VIEWissued right afterCREATE MATERIALIZED VIEWcould block DDL processing on a node until it was restarted. Such a pause now fails withRESOURCE_NOT_INITEDand can be retried. - Recover trimmed Raft hard state from the durable checkpoint record (#12400). Impact: a replica could fatal-abort on every startup after a hard reset.
- Release historical parts once a streaming query has read them (#12375). Impact: outdated parts could not be deleted while the streaming query or materialized view that read them was running, growing disk usage.
- Retry a failed historical commit instead of wedging the committed sn (#12404). Impact: one failed commit could freeze a shard and grow disk usage indefinitely.
- Reset exec_mode for parallel-replica remote legs so materialized views over log external streams can start (#12373). Impact: such MVs could never start on a multi-node cluster.
- Fix checkpoint barrier loss in RemoteSource async-read path (#12326). Impact: an MV could silently get stuck at its first checkpoint epoch forever.
- Make NativeLog fetch honor the caller's byte budget (#12350). Impact: background polling could fetch up to 8192x more data than intended, risking OOM.
- Fix secondary index rebuild on mutable streams when the index key columns are a subset of the primary key (#12351). Impact:
ALTER STREAM ... ADD INDEXbackfilled existing rows under empty index keys, so index queries missed old rows and empty-string lookups returned bogus matches. - Make SYSTEM STOP MERGES/MOVES cover every shard of a multi-shard stream (#12304). Impact: the command silently affected only the first shard.
CREATE STORAGE POLICYnow rejects read-only and write-once (e.g.s3_plain) disks (#12377). Impact: TTL moves to such disks retried forever, causing massive redundant S3 writes. Existing storage policies are not re-validated on upgrade; if one uses a write-once disk, move it to a disk type that supports renames, such ass3.- Rewind idempotent keys when an inline historical commit fails (#12392). Impact: could cause permanent, silent data loss on commit failure.
- Fix null idempotent keys after a schema switch inside a historical commit batch (#12406). Impact: could crash the whole server (no data loss).
- Fix NULL handling in
arg_min/arg_maxover nullable columns (#12407). Impact: a NULL value could overwrite the aggregate result, and affected materialized views could fail checkpoint recovery withCORRUPTED_DATA. - Parse creation query AST every time on provisioner retry, so a retried CREATE no longer carries a stale UUID (#12325). Impact: a stale orphan directory could block cluster-wide schema creation.
- Fix PEM files not being flushed to disk for Kafka, HTTP and Splunk HEC external streams (#12335). Impact: the CA or private key file could be written empty, breaking TLS connections.
3.3.1
Released on 08-01-2026. Installation options:
- For Linux or Mac users: Downloads
- For Docker users (not recommended for production):
docker run -p 8000:8000 docker.timeplus.com/timeplus/timeplus-enterprise:3.3.1 - For Kubernetes users:
helm install timeplus/timeplus-enterprise --version 13.0.6
Component versions:
- timeplusd 3.3.1
- timeplus_appserver 3.3.1
- timeplus_connector 3.1.0
- timeplus cli 3.0.0
- timeplus byoc 1.0.1-rc.2
Changelog
This release consolidates all timeplusd changes from 3.2.11 through 3.3.1.
Features and Enhancements
- Add sequence-aware backup and recovery controls (#12274)
- Enable SYSTEM STOP and START MOVES (#12270)
- Add stream tool for stream data recovery and backup/restore (#12267)
- Tolerate corrupted checkpoint lease and keep it renewed during recovery (#12266)
- Contain single-table startup failure, raise broken-parts bytes threshold, shard-attributed load logs (#12264)
- Lazy-load primary key index to bound startup memory (#12250)
- Migrate embedded CPython to 3.14 free-threaded + FT observability (#11852)
- Memory-pressure interventions for materialized-view reboot recovery storm (#12219)
- MergeTree global merge settings (#12224)
- Propagate SHUFFLE BY through CTE/subquery boundaries (#12129)
- Stream-shard leader rebalancing — config + balancing core (#12204/#12215)
- Reliable workload rebalancer for Raft materialized views + manual trigger (#12204/#12205)
- Support Python UDF init hooks via SETTINGS (#12198)
- SYSTEM TRANSFER SCHED MATERIALIZED VIEW (#12189/#12201)
- SYSTEM REBALANCE SCHED MATERIALIZED VIEWS - manual rebalance trigger (#12200)
- Schedule policy (#12196)
- Reconcile Python UDF packages from S3-hosted requirements.txt (#12186/#12187)
- Throttle repeated Kafka broker outage warnings (#12191/#12194)
- Support flush hook in Python external stream sink (#12183/#12184)
- Refine merge settings (#12178)
- Prefer not to merge settings (#12161)
- Add offsets-only checkpoint mode (#11753)
- Enhance stall detection (#12074)
- Enable shard pruning for IN-subquery and literal tuple-IN (#12139)
- Support NATS NKey authentication (#12120)
- Support streaming LEFT ANTI JOIN (#12119)
- Support setting JWT and seed content in settings (#12116)
- Block mutable stream secondary index creation for unsupported key expressions (#12113)
- Refresh QueryScope per build to clear phantom memory_tracker amount (#12096)
- Unblock metric tick from S3 LIST + TTL cache historical-store size (#12052)
- Enable vertical merge for wide part (#12057)
Bug Fixes
- Decode pip output as UTF-8 instead of the locale encoding (#12293)
- Keep -1/+1 consecutive pair contiguous through the shard merge (#12234)
- Stage pip into the Python asset so package install works (#12285)
- Sync executor with upstream and back off merge selection after memory-limited failures (#12247)
- Clamp negative low_sn to 0 when logging processed_sn fallback (#12277)
- Fix SYSTEM STOP MERGES segfault on streams without local historical storage (#12268)
- Bound hydrated bytes parked in shared storage fetch batches (#12262)
- Fix silent data loss when Raft proposals are dropped during no-leader windows (#12260)
- Fix JS UDF dictionary getValue/batchGetValues missing-key handling (#12253)
- Fix stream recovery replay with incremental commits (#12251)
- Stop torn-tail recovery from inverting a loglet (#12238)
- Stop the historical-recovery OOM crash-loop at write, load, and recover (#12237)
- Gate retention on a real applied-SN (#12228)
- Rebind prefix-range slices after merge (#12230)
- Reduce default TTL of high-frequency metric logs (#12226)
- Override isReady() to gate materialized view builds on schema readiness (#12222)
- Check attributes existence before JSON extraction (#12216)
- Mitigate Protobuf map-entry issue for Confluent schema registry (#12211)
- Manual rebalance trigger: immediate task is not a scheduling failure (#12208)
- Deterministic per-stream tie-break to remove low-node-ID placement bias (#12207)
- Use the shard's storage when listing active parts in system.parts (#12192, #12193)
- Roll back torn WAL tail on partial write under ENOSPC (#12185)
- Throw bad_alloc on failed ByteVector allocation instead of NULL dereference (#12181)
- Suppress phantom changelog rows in multishard memory aggregation (#12162)
- Restore data_version on StoragePolicyDescriptor deserialize (#12170)
- Drop spurious "Profile counters are not set" warning (#12166)
- Clone inner_query and serialize lazy semantic init (#12152)
- EMIT ON UPDATE no longer drops updates when +1 partner is filtered to empty (#12126)
- Direct join honors nullable left keys (#12143)
- Enforce NAMED_COLLECTION access in settings merge (#12151)
- Fix DROP DATABASE CASCADE failure when alerts exist (#12130, #12158)
- Self-heal NativeLog replica from torn-WAL inconsistency instead of crash-looping (#12156)
- Restore min_size_to_keep floor for metadata and checkpoint logs (#12137)
- Make version_column + TTL safe (#11991)
- Cap delayed write streams for parallel-write disks (#12123)
- Background NativeLog commit no longer throws TOO_MANY_PARTS (#12112)
- Skip filter and expression fusion when child carries substream-aware stateful functions (#12111)
- Bump V8 and cherry-pick ARM64 64K-page fixes (#12105)
- Apply proposed librdkafka fix for improved Kafka stability (#12103)
- Fix Pulsar health check and ddl_index/named_collection issues (#12088)
- Fix mutable stream file descriptor leak (#12093)
- Align DNSResolver throw type with upstream (#12087)
- Fix incorrect alert dependency tracking behavior (#12080)
- Resolve Python interpreter symlinks recursively (#12081)
- Fix Kafka client race between shutdown() and read() (#12078)
- Fix mutable stream corruption after adding an index and rebooting (#12070)
- Probe builtin views via system.stream_shards (#12047)
- Retry on Poco::Exception in ReadBufferFromS3::nextImpl (#12041)
- Fix hanging issue when recreating Kafka consumer (#12038)
- Gate OTel external stream on USE_GRPC (#12032)
- Fix data race in getting watermark (#12031)