8.12 RC1
This is the first Release Candidate of Redis 8.12 in Redis Open Source.
Release Candidates are feature-complete pre-releases. Pre-releases are not suitable for production use.
Redis 8.12 introduces new features and performance improvements.
- Ubuntu 22.04 (Jammy Jellyfish), 24.04 (Noble Numbat), 26.04 (Resolute Raccoon)
- Rocky Linux 8.10, 9.7, 10.1
- AlmaLinux 8.10, 9.7, 10.1
- Debian 12.13 (Bookworm), Debian 13.4 (Trixie)
- Alpine 3.23
- macOS 14.8.4 (Sonoma), 15.7.4 (Sequoia), 26.3 (Tahoe) - for both Intel and ARM
- RediSearch/RediSearch#10073 Indexed value hashing is now collision-resistant, preventing HashDoS-style index degradation from adversarial input. (MOD-14459)
- RediSearch/RediSearch#11202 Incomplete UTF-8 characters no longer reads out of bounds in indexed TEXT fields. (MOD-18088)
- #15331 Compressed bitmaps — Integrated redis-roaring into Redis core for lower memory usage and faster bitmap operations. Special thanks to Antonio, the original creator of redis-roaring, for contributing this capability! https://redisroaring.com/redis-merge/#/1;
- #15986 New command:
BITRANGEINTARRAYequivalent to redis-roaring’sR.RANGEINTARRAY, to return set bit offsets within a specified range - #15938 Set expiration to individual set member; New commands:
SEXPIRE,SPEXPIRE,SEXPIREAT,SPEXPIREATto set expiration andSTTL,SPTTL,SEXPIRETIME,SPEXPIRETIMEto retrieve remaining TTLs or expiration timestamps - #15649 Bless keys: avoid eviction of specified keys; New command:
BLESS - #15829
CLUSTER MIGRATION STATUSnow reports progress for both the snapshot and incremental migration phases - #15556
TLSnamed groups can now be configured usingtls-groups - RedisBloom/RedisBloom#1063 Count-min-sketch extensions: Added optional
CELL_SIZEsupport toCMS.INITBYDIMandCMS.INITBYPROBfor lower memory usage, negative increments inCMS.INCRBYto decrement counts, and cell size reporting inCMS.INFO - RedisJSON/RedisJSON#1640 Auto-create JSON deep path
- RediSearch/RediSearch#10151
EXPLAINSCOREis now supported forFT.HYBRID. (MOD-10044) - RediSearch/RediSearch#11330 SQ8 new compression is now available for HNSW vector fields. (MOD-6132)
- RediSearch/RediSearch#10247
RETURN_STRICTtimeout handling is now enabled for localFT.HYBRIDexecution. (MOD-16492) - RediSearch/RediSearch#11278
FT.ALTERavoids unnecessary document reindexing during schema additions. (MOD-18171) - RediSearch/RediSearch#11384 Score/payload-only hash updates avoid reindexing. (MOD-18182)
- RediSearch/RediSearch#11230 Hash documents are no longer re-indexed when no vector indexed field is touched. (MOD-17688)
- #15569 Changes made by
XDELEX DELREFfor already-deleted stream entries could fail to propagate to replicas or the AOF - #15508 Operations using random radix-tree traversal could behave incorrectly when starting from certain leaf nodes
- #15604 Memory usage could be calculated incorrectly for hashes using shared templates
- #15489 RDB files could fail to load after
XSETIDreduced a stream’s entries_added counter - #15626
SETcould calculate an incorrect expiration time when given an excessively large relativeTTL - #15628 Active defragmentation could incorrectly handle the shared-template registry used by compact hashes
- #15530 After failover, a replica could remain connected to another replica instead of the new primary
- #15733 Invalid cluster slot ranges could be accepted after being merged into a valid range
- #15756
RESTOREcould calculate an incorrect expiration time when given an excessively large relativeTTL - #15699 Memory growth could be accounted for incorrectly when
SETBITorBITFIELDexpanded a string - #15815
XTRIMcould leave a stream in a state that prevented an RDB file containing it from loading - #15795 Clients could fail to receive a protocol error when a malformed command arrived across multiple network reads
- #15875
ARLASTITEMScould omit elements appearing after a gap in an array - #15916 Data could be lost when a legacy AOF file was upgraded before loading completed
- #15917 Hiredis clients on Linux could mishandle errors when establishing TCP connections
- #15869 Redis could crash when a module thread paused I/O threads
- #15468 - Pub/Sub subscriptions could remain active after the subscribing user’s channel permissions were revoked or the user was deleted, if the client had re-authenticated as another user.
- #15623 Module actions scheduled by hash-field expiration notifications could be delayed after fields expired in the background
- #15680 Data could be lost after a replica migrated to a different shard
- #15587
LMOVEMcould emit keyspace notifications inconsistent with those produced byLMOVE - #15695 Command side effects could be propagated to replicas or the AOF despite settings that should have excluded them
- RediSearch/RediSearch#10872 Shard no longer crashes with SIGSEGV when
RESTOREof a legacyft_index0payload is issued outside an RDB load. (MOD-15685) - RediSearch/RediSearch#10728 GC timer arming off the main thread on ARM no longer causes random shard crashes after extended uptime. (MOD-17309)
- RediSearch/RediSearch#10767 Server no longer crashes on writes when an index
FILTERreferences no schema fields. (MOD-15592) - RediSearch/RediSearch#11303, RediSearch/RediSearch#11304, RediSearch/RediSearch#11308, RediSearch/RediSearch#11309, RediSearch/RediSearch#11310, RediSearch/RediSearch#11311
FT.ALTER SCHEMA ADDrunning concurrently with queries underWORKERS>0no longer crashes query execution across VECTOR, TAG, NUMERIC, GEO, ISMISSING, and GEOSHAPE nodes. (MOD-18356, MOD-18361, MOD-18366, MOD-18367, MOD-18368) - RediSearch/RediSearch#11474
FT.AGGREGATEwith the numericSORTBYoptimizer no longer crashes or returns wrong results. (MOD-6967) - RediSearch/RediSearch#10209 Coordinator no longer crashes under RESP2 when
FT.PROFILE HYBRIDhits a return-strict timeout. (MOD-16396) - RediSearch/RediSearch#10145 TEXT PHONETIC matches now behave correctly when non-TEXT fields precede TEXT fields in the schema. (MOD-16304)
- RediSearch/RediSearch#11262
FT.AGGREGATEcursor withFILTERnow reports the correct result count. (MOD-18172) - RediSearch/RediSearch#11282
FT.EXPLAINnow renders a multi-word tag value as a single tag rather than anINTERSECT. (MOD-8666) - RediSearch/RediSearch#10768
NOTqueries no longer leak excluded documents or drop results after a concurrent index change. (MOD-17394) - RediSearch/RediSearch#10637 Numeric index cardinality and bounds are now correct under float compression. (MOD-16877)
- RediSearch/RediSearch#10704 Empty wildcard patterns no longer cause out-of-bounds writes or spurious empty-value matches. (MOD-17451)
- RediSearch/RediSearch#10752 Wildcard
?onWITHSUFFIXTRIETEXT fields now matches per codepoint rather than per byte. (MOD-17476) - RediSearch/RediSearch#10112 Suffix-trie wildcard queries on TEXT fields are now case-insensitive. (MOD-16259)
- RediSearch/RediSearch#11450 Matching literal
*no longer hangs on the indexed string. - RediSearch/RediSearch#11267 Duplicate vector results are no longer returned during tiered indexing. (MOD-17795)
- RediSearch/RediSearch#10731
FT.SEARCHon cluster now returns an error for invalidLIMITarguments, matching standalone behavior. (MOD-12465) - RediSearch/RediSearch#10251
FT.SEARCHunderWORKERS>0no longer returns a nil field-array for documents re-indexed mid-query. (MOD-16507) - RediSearch/RediSearch#10921 Sort keys with embedded NUL bytes are no longer truncated in replies.
- RediSearch/RediSearch#9963 Trie
RangeIternow preserves the excluded-empty lower bound. (MOD-15897) - RediSearch/RediSearch#10085
RETURN_STRICTsafe-loader no longer deadlocks the GIL on client timeout. (MOD-16267) - RediSearch/RediSearch#11449 Index reference leak after queued search cancellation no longer occurs. (MOD-18682)
- RediSearch/RediSearch#11369 Memory leaks after coordinator
SEARCHcancellation no longer occur. (MOD-18548) - RediSearch/RediSearch#10110
FT.HYBRIDcursor setup now has a bounded channel timeout. (MOD-16145) - RediSearch/RediSearch#10211, RediSearch/RediSearch#10745
RETURN_STRICTcursors are now depleted on timeout; strict-timed-out hybrid cursor cycles drop their cursors at cycle end. (MOD-16091, MOD-16991) - RediSearch/RediSearch#10947 Coordinator cursor memory is now capped via
INDEX_CURSOR_LIMIT. (MOD-17479) - RediSearch/RediSearch#10766, RediSearch/RediSearch#10763 Cursor reads no longer time out against a deadline belonging to an earlier read, and now correctly reports a timeout that expires while iterators are revalidated. (MOD-17489, MOD-17488)
- RediSearch/RediSearch#10993 RDB and replication payloads no longer leak a stray heap byte. (MOD-17800)
- RediSearch/RediSearch#10074
FT.HYBRIDnow returns a stable RRF result order across cluster shards. (MOD-12438) - RediSearch/RediSearch#11027 Cluster TLS connections now use Redis node metadata, aligning with topology changes. (MOD-15869)
- RediSearch/RediSearch#10380, RediSearch/RediSearch#10430 Cluster topology is now refreshed on topology-change events rather than by polling. (MOD-15868, MOD-15870)
- RediSearch/RediSearch#10835 Coordinator fanout now preserves binary argument lengths.
- RediSearch/RediSearch#11095 Replica stalls during
FT.DROPINDEX DDare reduced. - RediSearch/RediSearch#10255 Blocked search clients no longer trigger eager query dumps. (MOD-16518)
- RediSearch/RediSearch#10083 Internal query arguments missing during rolling upgrade are now tolerated. (MOD-16047)
- RediSearch/RediSearch#10816 Forced GC now waits for a concurrent child process instead of skipping its cycle.
- RediSearch/RediSearch#10958 Async disk read pool no longer spins when saturated; it blocks instead.
- RediSearch/RediSearch#10646, RediSearch/RediSearch#10392 VectorSimilarity dependency refreshed to address unaligned metadata access on ARM/SVE paths. (MOD-15303, MOD-16696)
- RediSearch/RediSearch#10352
FT.PROFILE ON_TIMEOUT FAILnow reports a pre-execution timeout as a warning rather than an error. (MOD-16660) - RediSearch/RediSearch#10870 Crash reports now include in-flight coordinator aggregate, hybrid, and cursor-read queries. (MOD-16992)
- RediSearch/RediSearch#11089 Debug aggregate request synchronization no longer crashes. (MOD-17616)
- RediSearch/RediSearch#10063
COLLECT LIMITnow honors the configurablesearch-max-aggregate-results - RedisJSON/RedisJSON#1636 Fixed array-index normalization overflow for extreme negative indexes, including i64::MIN, affecting commands such as
JSON.ARRTRIM - RedisJSON/RedisJSON#1648 Corrected
JSON.MGETkey-spec metadata to identify all key arguments and exclude the trailing JSONPath argument. - RedisJSON/RedisJSON#1670 Fixed downstream compilation when using redis_json_module_create! with the as-library feature and the new RDB depth configuration
- RedisBloom/RedisBloom#1035 TDIGEST.QUANTILE, TDIGEST.CDF, and TDIGEST.TRIMMED_MEAN could return NaN for a sketch containing exactly one observation
- RedisBloom/RedisBloom#1053 RDB loading and RESTORE did not consistently reject invalid numeric values, allocation sizes, serialized counts, or inconsistent metadata in Bloom filters, Count-Min Sketches, Top-K sketches, and t-digests; Bloom filter growth also lacked overflow checks
- RedisBloom/RedisBloom#1053 Top-K sketches containing nonempty items with zero counts or empty-string items with nonzero counts could be restored incorrectly
- RedisBloom/RedisBloom#1067 Bloom filters with excessive hash-function counts could be accepted during loading and restoration, including through BF.LOADCHUNK
- RedisBloom/RedisBloom#1062 CMS.MERGE key metadata did not correctly identify the destination and all source keys, affecting cluster slot validation
- RedisBloom/RedisBloom#1071 CF.COMPACT command metadata was missing its argument count and key specification
- #15618 Batch updates to hashes using shared templates now run more efficiently
- #15018 Supported x86 systems now use the processor-based monotonic clock by default, with runtime calibration to reduce timing overhead
- #15782 RDB and AOF loading now provides sequential-read hints to the operating system to improve loading efficiency
- RediSearch/RediSearch#10169 Searches on indexes using field-level expiration (
HEXPIRE) are faster. (MOD-16350) - RediSearch/RediSearch#10981, RediSearch/RediSearch#11065 Coordinator field lookup and row-reply serialization overhead is reduced. (MOD-17924)
- RediSearch/RediSearch#11055, RediSearch/RediSearch#11056, RediSearch/RediSearch#11057 Cluster reply conversion, result destruction, and
GROUPBYcleanup have reduced overhead. (MOD-17908, MOD-17909, MOD-17910) - RediSearch/RediSearch#11507, RediSearch/RediSearch#11506 Query replies now format integral numeric values without
snprintfand declare reply collection lengths up front. (MOD-18800, MOD-18799) - RediSearch/RediSearch#11509 Hash field loading for
RETURNandLOADno longer requires per-field allocations. (MOD-18811) - RediSearch/RediSearch#10246 Concurrent writes are now allowed during vector range queries. (MOD-16437)
- RediSearch/RediSearch#10515 Coordinator requests are now allocated on the main thread, removing
CoordRequestCtx. (MOD-16990) - RediSearch/RediSearch#11018 Query usage is now separated from administrative index operations. (MOD-17536)
- RediSearch/RediSearch#10066 Shard response barrier removed in favor of async iterator depletion callback for
FT.AGGREGATE WITHCOUNT. (MOD-16210) - RedisJSON/RedisJSON#1645 More accurate memory usage reporting for shared strings: Memory usage now accounts for each reference’s proportional share of a shared string’s allocation, including its header and padding, instead of charging the full allocation to every reference
- J1660 Reduced object memory consumption: JSON parsing now uses compact object allocation to reduce the actual memory needed to store JSON objects
- RedisJSON/RedisJSON#1661 Improved JSONPath parsing and evaluation by reducing parser backtracking, temporary allocations, and repeated traversal. Optimizations include caching root-path operands across filter candidates, stopping existence checks at the first match, and reducing overhead in regex matching and string comparisons
- RedisJSON/RedisJSON#1631 Improved typed-array element access through direct indexing, avoiding repeated iteration and quadratic work during full indexed scans
- RedisBloom/RedisBloom#1049 Improved t-digest compression performance for inputs containing many duplicate values. Sorting is now bounded to O(n log n), avoiding quadratic behavior on pathological inputs
- Redis-roaring:
bitmap-default-roaring- to enable the new roaring bitmaps type, disabled by default - RedisJSON/RedisJSON#1657 Configurable RDB depth validation: Added
json-legacy-rdb-depth-limit, disabled by default, to enforce a maximum nesting depth of 128 when loading JSON from RDB or through RESTORE - RedisJSON/RedisJSON#1640 Added
json-auto-create-deep-pathsand is disabled by default and can only be configured at load time. Use the same value on every node of a shard and when replaying AOF files, because differing values can cause data divergence
- #15374
INFOkeysizes histograms now include streams, providing visibility into stream key sizes - #15682 Streams observability – Added
INFO STREAMSwith per-database histograms of consumer groups per stream, pending entries per group, and consumers per group. Enable with stream-stats yes (disabled by default) - RediSearch/RediSearch#10097
FT.INFOnow exposes the defaultEF_RUNTIME. (MOD-16147) - RediSearch/RediSearch#10107 Disk GC
bytes_collectedand cycle stats are now reported inFT.INFO. (MOD-14621) - RediSearch/RediSearch#10464
FT.INFOon coordinator now aggregates per-field disk metrics via the reducer. (MOD-14859) - RediSearch/RediSearch#10204 Redis
INFOnow breaks down query timeout metrics by pipeline stage. (MOD-13192) - RediSearch/RediSearch#11521 Index metrics are no longer collected for unrelated
INFOsections. (MOD-18033) - RediSearch/RediSearch#10536
FT.PROFILEloader-field timing resolution is improved. (MOD-17132)
- RediSearch/RediSearch#10109
FT.CREATErejectsRERANKon HNSW vector fields in RAM mode. (MOD-16015) - RediSearch/RediSearch#10200 Disk indexes reject
DIALECT 4andWITHOUTCOUNT. (MOD-15997) - RediSearch/RediSearch#10082
COLLECTrequires an@prefix for field names. (MOD-16233) - RediSearch/RediSearch#11106 JSON
HIGHLIGHT/SUMMARIZEfields with multi-value JSONPath are now rejected. (MOD-16530) - RediSearch/RediSearch#10208 Non-cacheable commands are now marked with
dont_cache. (MOD-16175) - RediSearch/RediSearch#10699 Numeric command arguments are now strictly parsed. (MOD-17409)
- RediSearch/RediSearch#11335 Search module now requires Redis 8.9.241 or newer to load. (MOD-15868)
- RedisBloom/RedisBloom#1063 Rejected
CMS.INCRBYitem updates now leave counters and the total count unchanged instead of saturating counters on overflow. Multi-item commands can still partially succeed. RedisBloom/RedisBloom#1063 CMS.MERGEnow requires matching cell sizes across the destination and all sources.
- #15517 Modules can now retrieve a cluster node’s TLS port using the new REDISMODULE_NODE_PORT_TLS flag in RM_GetClusterNodeInfo()
- RedisJSON/RedisJSON#1623 Added
getWithPathin shared API V9 to evaluate a precompiled JSONPath, allowing callers to compile a path once and reuse it across documents. - RedisJSON/RedisJSON#1666 Added
pathParseNoErrorMsgin shared API V10 to compile JSONPaths without a Redis context or an allocated error message. Returns a compiled handle on success or NULL on failure. - RedisJSON/RedisJSON#1653 Made pre-command hooks optional and allowed hook errors to abort JSON commands before execution. Hooks now return
RedisResult<()>; shared C API calls continue to ignore hook errors. - RedisJSON/RedisJSON#1640 Extended the Rust Manager interface with clone_value and create_object to support construction of missing paths. Custom implementations must implement these methods and satisfy the new
Borrow<Self::V>requirement for owned values.
3.3.0(Oct 29th, 2026)
Nacos 3.3.0 is a feature iteration release for the Nacos 3.x series. It brings protocol-neutral Agent management and discovery, shared AI resource search, and unified MCP lifecycle management to the stable release.
This release focuses on:
- AI Registry capabilities across Agent, AgentSpec, Skill, Prompt, and MCP resources.
- DNS service discovery and distributed locks.
- Dynamic plugin management and authentication enabled by default.
- Spring Boot 4 and Jackson 3 compatibility, with improved client and server reliability.
The main feature updates include:
- Agent registration, version management, runtime endpoints, RAD discovery, transport negotiation, and Watch/Push through Java SDKs and Console workflows.
- Shared AI resource search with hybrid keyword and vector retrieval, artifact access, and optional relevance filtering.
- MCP draft, review, publish, online/offline, and visibility management, with migration support for historical resources.
- Optional DNS discovery with A, AAAA, and SRV records over UDP and TCP.
- Distributed reentrant and non-reentrant locks with watchdog renewal and Raft consistency.
The stable release also improves Skill metadata consistency across version transitions, extends visibility plugin capabilities, and strengthens Config SDK usability, Console compatibility, and recovery after Naming reconnects and cluster restarts.
These notes are cumulative and include the changes delivered in 3.3.0-BETA and 3.3.0-RC.
Detailed changes in this release:
- #50 Add optional DNS service discovery over UDP and TCP, with A, AAAA, and SRV records, metrics, and configurable external DNS forwarding.
- #14466 Add a neutral JSON adapter with Jackson 2 and Jackson 3 runtime support.
- #14804 Add protocol-neutral Agent lifecycle management, Console workflows, RAD discovery, runtime endpoints, transport negotiation, Watch/Push, and Java SDKs.
- #15279 Add distributed reentrant and non-reentrant locks with watchdog renewal, FIFO waiting, gRPC notifications, Raft consistency, and a Java Lock SDK.
- #15471 Support SkillSpector as an AI publish pipeline.
- #15475 Add unified dynamic plugin configuration, lifecycle management, runtime updates, deterministic discovery, and Console configuration workflows.
- #15476#15604 Add plugin-owned visibility grant and revoke APIs and Console management for Skill and AgentSpec resources.
- #15541 Add Agentic Resource Discovery with search, exploration, artifact retrieval, visibility filtering, persistent indexes, and hybrid keyword and vector retrieval.
- #15640 Add Linux RISC-V64 compatibility for RocksDB JNI loading and startup.
- #15761 Add shared MCP lifecycle management with drafts, review, publish, online/offline operations, visibility, Java SDKs, and historical reconciliation while preserving existing Config/Naming serving data.
- #8354 Replace the mandatory Prometheus client dependency with a pluggable client metrics SPI and a no-op default.
- #12064 Support configuring the gRPC port offset through individual client properties.
- #12734 Add request/result-based Config SDK methods, encrypted Config CAS publishing, and conditional queries with local cache reuse.
- #13690 Log the resolved client logging configuration and include namespace IDs in subscription logs.
- #14804 Improve Agent Console workflows, expose SDK discovery capabilities and A2A conversion helpers, and trace discovery request origins.
- #14817 Disable selected deprecated Pipeline and MCP import APIs by default and provide a shared temporary compatibility switch.
- #14932 Reduce read-path contention and improve index consistency in the legacy MCP cache.
- #14980 Support deregistering persistent Naming instances from Console v3.
- #15315#15561 Improve Skill upload precheck, conflict handling, and server-side ZIP validation.
- #15322 Remove obsolete Config migration compatibility code and retain only the current Config storage model.
- #15345 Return cached Skill frontmatter in list and metadata-detail responses.
- #15346 Manage the reserved
latestlabel for AI resources on the server. - #15357 Enable Client API authentication by default and validate standard integration scenarios with authentication enabled.
- #15432#15440#15441 Remove reviewed unused Java code while preserving required compatibility contracts.
- #15448 Improve English translations in Console UI Next.
- #15486 Include the Skill owner in upload permission-denied messages.
- #15606 Return a stable per-item result for every Skill batch upload candidate.
- #15661 Restrict distributed embedded database query results to supported scalar types and registered row mappers.
- #15678 Decouple the visibility plugin SPI from server runtime modules.
- #15686#15692 Align authorization method resolution with Spring MVC routing and expand controller-level authorization regression coverage.
- #15687 Authenticate native JRaft gRPC requests with server identity and a rolling-upgrade enforcement transition.
- #15695 Improve Config detail, edit, and history page layouts with larger content areas and full-screen reading.
- #15720 Automatically publish the first uploaded Skill version.
- #15746 Add operator-controlled outbound access policies for MCP tool imports.
- #15837 Add opt-in initialization for multiple Spring AOT contexts and improve GraalVM runtime metadata.
- #15838 Clarify that rolling back the first inserted Config history record deletes the configuration.
- #15854 Remove untagged legacy Raft request parsing and preserve explicit errors for malformed log entries.
- #15868 Support disabling local Config snapshots through the
configSnapshotEnabledstartup property. - #15896 Migrate Copilot streaming to typed AgentScope events while preserving the existing SSE response contract.
- #15900 Correlate Java SDK HTTP requests with server request context through
Nacos-Request-Id. - #15903 Add a runnable Parallel Search MCP example for registration, endpoint discovery, web search, and page fetching.
- #15921 Add optional Jev relevance filtering for ARD Search, with stable result ordering and fallback to basic search.
- #15929 Add Russian localization and a language selector to Console UI Next.
- #15956 Allow visibility plugins to declare additional AI resource scopes and extend Agent validation through an optional SPI, while preserving default PUBLIC/PRIVATE behavior.
- #11122 Accept
healthCheckEnabledas a health-check switch entry while retaining the legacycheckalias. - #11780 Preserve Config and service list filters and pagination when returning from detail pages.
- #11890 Avoid removing metadata for instances that still exist after restart.
- #12557 Retry Config dump write-lock acquisition to prevent stale MD5 cache data.
- #14008 Fix native-image metadata required to establish gRPC client connections.
- #14804 Keep AI search available with partial results while indexes are being backfilled.
- #14804 Preserve Agent SDK Watches across transient failures and deliver initial and updated state through a consistent Listener path.
- #14981#15468 Fix concurrent Config publish duplicate-key handling through the datasource dialect SPI, including PostgreSQL
unique_violation. - #15410 Fix trailing separators when joining collections containing null elements.
- #15415 Prevent malformed config-plugin property names from discarding valid plugin configuration.
- #15420 Fix Skill ZIP uploads with invalid or unavailable version candidates.
- #15425 Prevent out-of-range batch indexes from causing
IndexOutOfBoundsException. - #15446 Fix page count calculation for empty and exactly divisible result sets.
- #15447 Prevent
NamingUtils.getServiceNamefrom failing on a trailing service separator. - #15466 Correct
@Sinceannotations for Skill upload APIs. - #15470 Prevent Naming connection cleanup from waiting for unrelated distributed-lock Raft writes.
- #15475 Fix standalone Console auth plugin initialization and forward the caller identity to downstream Server requests.
- #15476 Enforce Prompt visibility on list, detail, version, download, and Client read APIs.
- #15477 Wait for persistent service metadata before starting health checks.
- #15490 Fix Chinese text corruption in Skill Scanner pipeline reports on Windows.
- #15494 Restore complete MCP tool advanced-template support in Console UI Next.
- #15510 Reject explicitly supplied invalid Bearer tokens instead of falling back to anonymous access.
- #15534 Generate deterministic, ASCII-safe physical Config keys for AI resources.
- #15543 Restore case-sensitive collation for newly initialized MySQL Config schemas.
- #15557 Fix startup failures when plugin state snapshots are restored before unified plugin discovery.
- #15560 Preserve MCP tool passthrough authentication when editing and publishing runtime templates.
- #15603 Fix visibility query conversion when explicitly authorized resources are present.
- #15618 Try lower-priority explicit Skill upload versions before generating a version.
- #15620 Allow AI resource versions to be resubmitted after completed or stale review results.
- #15625 Fix gray Config cache null access and cross-thread visibility in Config disk services and client connections.
- #15634 Fix API authorization metadata, custom resource parser precedence, AgentSpec authorization, and Prometheus security path matching.
- #15642 Make AI resource deletion cleanup-first and retryable across all stored versions.
- #15658 Keep AI resource reads, updates, and deletion bound to the persisted storage provider.
- #15660 Fix standalone Console startup when the Config clone source-permission checker is unavailable.
- #15663 Preserve case-sensitive AI resource identities in MySQL search and task tables.
- #15675 Preserve nullable MCP tool output schemas during editing, display, and OpenAPI import.
- #15682 Prevent login responses from disclosing whether a username exists.
- #15689 Preserve string serialization of Config storage IDs with Jackson 3 to avoid numeric precision loss.
- #15701 Fix Config history next-record queries on Derby and preserve gray-version filtering.
- #15703 Migrate the legacy skills.sh importer state key without overriding canonical configuration.
- #15705 Clean removed Skill and AgentSpec draft files while retaining retry metadata after storage failures.
- #15710 Declare the required SQL LIKE escape clause for Derby, Oracle, and other affected dialects.
- #15712#15827 Reject unsafe instance addresses, HTTP targets, headers, and MySQL connection options in active health checks.
- #15714 Handle encoded context paths consistently in the legacy controller-method resolver.
- #15718 Escape all LIKE predicates when searching embedded roles with username filters.
- #15724 Forward the namespace when querying Config listeners by IP across cluster members.
- #15744 Align bootstrap and distribution configuration defaults.
- #15763 Reject invalid IPv6 mixed addresses with too many explicit address blocks.
- #15788 Allow the Java client to run with Jackson 3 after excluding Jackson 2 core/databind, including authentication paths.
- #15803 Reject unsafe AgentSpec and Skill ZIP layouts and enforce entry-count and decompression limits.
- #15804 Reject unsafe filesystem paths before Config, archive, and local rule-storage operations.
- #15821 Increase the embedded Derby connection timeout to prevent initialization failures on slow storage.
- #15836 Fix plugin availability RPC serialization so remote cluster members are reported correctly.
- #15844 Use the correct default gRPC protocol negotiator type.
- #15847 Restore public defaults for newly created Agent and MCP resources and preserve existing visibility scopes.
- #15850#15851 Select the default JDBC driver from the datasource dialect and clarify non-MySQL configuration examples.
- #15853 Return schema metadata in current, historical, and previous-version Config details.
- #15857 Prevent stale Distro snapshots from overwriting redo registrations and losing service instances after cluster restarts.
- #15864 Resolve HEAD requests through their GET mapping in the legacy controller-method cache.
- #15866 Remove server-list event subscriptions on client shutdown and prevent callbacks from accessing a closed server-list provider.
- #15872 Display subscriber addresses, client versions, and application names correctly in Console UI Next.
- #15876 Ignore registration responses from obsolete connections so ephemeral instances are re-registered after reconnect storms.
- #15883 Fix unexpected HTTP 403 responses from identity-only APIs when Console is deployed independently.
- #15899 Fix Console UI Next loading failures on Chromium 90 by transpiling unsupported JavaScript syntax.
- #15930 Prevent uncaught errors from permanently cancelling Naming redo tasks and blocking registration or subscription recovery.
- #15945#15947 Parse multiline YAML Skill descriptions correctly and prevent spurious frontmatter fields.
- #15946 Preserve empty and whitespace-only Skill resource files when reading versions and downloading packages.
- #15949 Keep Skill descriptions consistent with the displayed version across draft edits and lifecycle transitions, and retain the correct description when the last online version goes offline.
- #15953 Keep Publish and Cancel actions visible on Config creation and edit pages, and eliminate nested scrolling on Config and history detail pages in Console UI Next.
- #14944 Upgrade Spring Boot from 3.5.14 to 4.0.6.
- #15470 Upgrade SOFA JRaft to 1.4.1 while preserving callback cache behavior and JRaft authentication.
- #15584 Upgrade Maven Compiler Plugin from 3.5.1 to 3.15.0 for JDK 25 build compatibility.
- #15645#15834#15944 Update legacy and next Console dependencies, refresh packaged assets, and upgrade the bundled DOMPurify sanitizer to 3.4.17.
- #15707 Upgrade Log4j API from 2.25.4 to 2.25.5.
- #15767 Upgrade gRPC to 1.81.0 to address CVE-2026-33871.
- #15796 Upgrade Apache Derby from 10.14.2.0 to 10.16.1.1, align split artifacts, and retain the Java 17 baseline.
- #15878 Upgrade AgentScope Java from 1.0.7 to 2.0.3 in Copilot.
Nacos 3.3.0 changes authentication defaults, disables selected deprecated APIs, and introduces migration requirements. Applications using the new Agent SDK from BETA or RC also need to review the finalized subscription contract.
Affected users:
- Applications relying on Client APIs without credentials or on deprecated Pipeline and MCP import endpoints.
- Deployments with legacy Config data, historical AI storage keys, untagged Raft logs, or A2A/MCP resources requiring migration.
- Applications relying on built-in Prometheus client metrics or implicit AI resource visibility defaults.
- BETA/RC adopters using RAD subscriptions or remotely accessing the optional DNS server.
Recommended upgrade path:
- Prepare Client API credentials. An absent
nacos.core.auth.enablednow meanstrue. Existing explicitfalsesettings remain effective. If necessary, keep authentication explicitly disabled during credential provisioning, then enable it consistently across the cluster after verifying client access. Admin and Console authentication defaults are unchanged. - Migrate deprecated AI API calls. Selected legacy Pipeline and Console MCP import endpoints return HTTP
410withAPI_DEPRECATEDby default. Use the Pipeline/listand/detailendpoints and unified/v3/console/ai/import/validateand/executeendpoints.nacos.core.api.compatibility.enabled=truetemporarily reopens the selected endpoints;nacos.ai.resource.import.legacy-mcp-api-enabledis no longer recognized. - Complete legacy Config migrations. Upgrade pre-3.0 deployments through an earlier Nacos 3.x version. Migrate default-namespace data from the empty tenant to
public, and legacy beta/tag data toconfig_info_gray. For thenacos_configAI storage provider, explicitly migrate affected historical non-ASCII or overlength Config coordinates to the deterministic ASCII-safe mapping. - Check persisted Raft logs. Nacos 3.3 no longer replays untagged entries, including entries originally written by Nacos 2.0.x and retained through intermediate upgrades. Recover and migrate those logs or snapshots with a compatible version before upgrading; changing the running version alone does not convert persisted logs.
- Plan historical A2A and MCP migration. The default
nacos.ai.a2a.compatibility.mode=CANONICALdoes not scan historical A2A data. Follow the A2A upgrade runbook forAUTOmigration and early-3.3 preflight. After permanent canonical cutover, legacy-only servers must not rejoin. Preserve MCP reconciliation state and its existing Config/Naming serving data during the one-way lifecycle transition. - Keep cluster server identities consistent. Native JRaft authentication becomes enforced after all members advertise support, and enforcement persists across restarts. Rolling downgrades to members without JRaft credential support are not guaranteed to remain available.
- Update BETA/RC Agent SDK consumers. The new RAD
subscribeAgentmethods now returnvoid. Receive both initial state and subsequent updates through the Listener, prepare Listener state before subscribing, and recompile dependent applications. Legacy A2A signatures and HTTP/gRPC wire contracts remain unchanged. - Configure client metrics explicitly.
nacos-clientno longer includes a mandatory Prometheus client dependency. Install an implementation ofNacosClientMetricsProviderwhen metrics are required; without one, recording is a no-op even whenenableClientMetricsis enabled. - Review MCP import and visibility settings. Private or local MCP import targets require
nacos.console.ai.mcp.import.allowed-private-addresses, and redirects are not followed. The built-in visibility plugin defaults newly created Agent and MCP resources toPUBLIC; explicitly choose a private scope where required. Existing stored scopes and Prompt/Skill defaults are unchanged. - Review DNS listener configuration. DNS remains optional and disabled by default. When enabled,
nacos.naming.dns.bind-addressdefaults to127.0.0.1; configure the intended listening address for remote clients. External forwarding requires separate explicit configuration. - Refresh affected Skill metadata. Historical Skill descriptors without parsed frontmatter retain their existing metadata; this release does not automatically read their packages or backfill missing metadata. Update the content or re-upload affected Skills to regenerate frontmatter and correct previously stored multiline descriptions.
- Back up and rehearse the upgrade. Back up the database and persisted server data, then verify authentication, data migration, discovery, and client behavior in staging. Embedded Derby is upgraded to 10.16.1.1, so include persisted-data reads, subsequent writes, and restart recovery in upgrade validation.
Deployments without the affected historical data do not require those data migrations. The authentication defaults and any applicable API or SDK changes still need review.
| Module | Java Required |
|---|---|
| Nacos-Server / Nacos-Console | Java 17 |
| Nacos-Client | Java 8 |
| Nacos-Maintainer-Client | Java 8 |
- @lzcGeek made their first contribution in https://github.com/alibaba/nacos/pull/15874
- @FOWEPJF255 made their first contribution in https://github.com/alibaba/nacos/pull/15916
- @bespaltovyj made their first contribution in https://github.com/alibaba/nacos/pull/15938
- @soeben made their first contribution in https://github.com/alibaba/nacos/pull/15940
- @Lyin-OTTF made their first contribution in https://github.com/alibaba/nacos/pull/15941
- @AsyncKurisu made their first contribution in https://github.com/alibaba/nacos/pull/15919
- @georgeatparallel made their first contribution in https://github.com/alibaba/nacos/pull/15926
Full Changelog: https://github.com/alibaba/nacos/compare/3.3.0-RC...3.3.0
2.5.5 (Oct 29th, 2026)
Nacos 2.5.5 is mainly a bugfix and experience-improvement release for the 2.x series.
This release focuses on:
- Hardening server disk paths and active HTTP health checks.
- Preventing service instance loss during full cluster restarts.
- Fixing gRPC frame corruption while preserving Java 8 compatibility.
- Improving HTTP request handling and cluster member consistency.
Detailed changes in this release:
- #15809 Harden server disk path validation for Config storage, local TPS rules, and ZIP extraction to prevent access outside intended directories.
- #15828 Harden active HTTP health checks by validating request targets and custom headers and restricting checks to the registered instance target.
- #15857 Fix permanent service instance loss during full cluster restarts by excluding connection-based clients from Distro snapshots that can overwrite new registrations.
- #15865 Fix controller method lookup for HTTP HEAD requests by resolving them to the corresponding GET mappings.
- #15951 Fix inconsistent cluster member hashing by aligning
hashCode()with the address-based comparison used byequals().
- #15936 Upgrade gRPC to 1.78.0 to fix frame corruption causing false message-size and mid-frame end-of-stream errors, while retaining Guava 33.3.1-android for Java 8 compatibility.
This release strengthens validation for disk paths and active HTTP health checks. Before upgrading, review the following configurations:
- Config identity fields must not be exactly
.or... Local TPS rule names must be valid file names without path separators or directory traversal components. - HTTP health-check targets must use relative URI references, such as
/healthwith optional query parameters, without a scheme, authority, or fragment. Custom headers must be valid and must not includeContent-LengthorTransfer-Encoding.
Existing HTTP health checks that fail the new validation are skipped without sending requests or changing instance health status. Update affected configurations to restore health checking.
Deployments using valid identifiers and health-check configurations require no changes for these validation updates.
Nacos 2.5.5 retains the Java 8 baseline used by the 2.x series.
| Module | Java Required |
|---|---|
| Nacos-Server / Nacos-Console | Java 8 |
| Nacos-Client | Java 8 |
Full Changelog: https://github.com/alibaba/nacos/compare/2.5.4...2.5.5
2026-10-28, Version 24.22.2 'Krypton' (LTS), @aduh95
- [
f8bdcd54ed] - deps: V8: backport 786c1c2d88d4 (Eliau Elkouby) #66249 - [
3b93fd6b2b] - deps: V8: backport 1a0089053443 (Jakob Linke) #65764 - [
5aaf62faaa] - deps: V8: backport c9c0abfa51f0 (Jakob Linke) #65764 - [
3b8eb1a920] - deps: V8: backport ebd15783b7ba (Marja Hölttä) #65764 - [
ab70b5d681] - deps: V8: cherry-pick 853553fe755c (Victor Gomes) #66241 - [
17ec999f24] - stream: keep async context of parked writes (Matteo Collina) #66907
3.16.0-rc.2 / 2026-10-27
- [CHANGE] API: The experimental search endpoints now clamp
batch_sizeto 1000. (#19731, @roidelapluie) - [CHANGE] Configuration: Default --web.external-url to https when --web.config.file enables TLS. (#19241, @hexonal)
- [CHANGE] PromQL: Subquery samples are now included in the query TotalSamples and TotalSamplesPerStep statistics, and SamplesRead now counts reads from subqueries with an @ modifier in range queries. (#19165, @DanCech)
- [CHANGE] Remote write: Stop exposing the deprecated
prometheus_remote_storage_metadata_total,prometheus_remote_storage_metadata_failed_total,prometheus_remote_storage_metadata_retried_total, andprometheus_remote_storage_metadata_bytes_totalmetrics for Remote Write 2.0 queues. (#20080, @shilohlee98) - [CHANGE] Remote write receiver: Count Remote Write 2.x samples and histograms ingested without metadata in
prometheus_api_remote_write_without_metadata_appended_samples_totaleven whenmetadata-wal-recordsis disabled. (#19812, @bwplotka) - [CHANGE] TSDB: Reject exemplars whose label names are not unique, instead of storing them and serving a duplicate JSON key from
/api/v1/query_exemplars. (#19896, @Ramya-9353) - [FEATURE] API: Allow overriding PromQL Start Timestamp processing on a per-query basis using the
X-Prometheus-Use-Start-TimestampsHTTP header. (#19066, @69iqqq) - [FEATURE] Agent: Support metadata-wal-records in Prometheus Agent mode. (#19684, @bwplotka)
- [FEATURE] PromQL: Add experimental
integral()function for computing integral-over-time of range vectors behind the--enable-feature=promql-experimental-functionsflag. (#14440, @jjo) - [FEATURE] PromQL: Add experimental query cost estimation, actual cost reporting, and configurable execution limits, enabled with
--enable-feature=query-cost. (#20028, @roidelapluie) - [FEATURE] PromQL: Smoothed and Anchored vector selectors are now stable and always-on. (#19697, @roidelapluie)
- [FEATURE] PromQL: Use start timestamps to detect counter resets when float timeseries are queried using extended range selector modifiers (
anchored,smoothed). This feature is hidden behinduse-start-timestampsfeature flag. (#18966, @vpranckaitis) - [FEATURE] Promtool: print test filename during promtool tests (#18271, @dnwe)
- [FEATURE] PromQL: Allow unquoted Unicode letters and dots behind a feature flag (#20162, @roidelapluie)
- [ENHANCEMENT] Search API: Warn when participating remote-read storage does not support search. (#19992, @aknuds1)
- [ENHANCEMENT] Remote Read: Add native histogram prometheus_remote_read_handler_gate_wait_duration_seconds to measure concurrency-gate wait duration, including requests canceled while waiting. (#18355, @ogulcanaydogan)
- [ENHANCEMENT] Remote Write: Add experimental flag
convert_nhcb_to_classicto convert NHCB to classic histograms for external systems that dont support NHCBs. (#17205, @Naman-B-Parlecha) - [ENHANCEMENT] promtool: Add
--allow-incompatible-block-durationso users can specify any max-block-duration instead of being restricted to the default Prometheus block durations. (#19363, @sarthaksarthak9) - [PERF] Remote write: Cache repeated OTLP histogram metric names. (#19717, @perfloop-agent)
- [PERF] OpenMetrics 2.0 parser: Reuse classic histogram and summary expansion buffers across scrapes. (#19907, @bwplotka)
- [PERF] PromQL: Decode only histogram sum/count (not buckets) for timestamp(), start_timestamp() and absent(). (#19738, @linasm)
- [PERF] PromQL: Only select the fixed window for subqueries with an
@modifier. (#19863, @roidelapluie) - [PERF] Remote write / TSDB: Deduplicate per-series metadata structs in memory with
unique.Handle. (#20040, @bwplotka) - [PERF] Scrape: Avoid some copies of scrape response bodies. (#19394, @shubhgupta2104)
- [PERF] TSDB: Improve XOR2 compression and append performance by selecting value windows based on encoding cost. (#19962, @roidelapluie)
- [PERF] TSDB: Reduce memory used writing and reading checkpoint metadata records. (#19712, @kgeckhart)
- [PERF] Scrape: Convert classic histograms to NHCB directly in the OpenMetrics 2.0 parser without wrapping in
NHCBParser. (#19880, @bwplotka) - [PERF] Scrape: Reduce OpenMetrics 2.0 parser allocations and CPU overhead by lazily constructing composite series and exemplar labels. (#19895, @bwplotka)
- [BUGFIX] Remote read: Abort failed streaming responses without writing duplicate headers or appending plain-text errors to the protobuf stream (#19749, @aknuds1)
- [BUGFIX] TSDB: Fix loss of out-of-order samples when a WAL checkpoint drops a series record that the out-of-order write-behind log still needs (#19737, @replay)
- [BUGFIX] TSDB: Fix queries that seek within a head chunk returning samples committed after the query started (#19854, @aknuds1)
- [BUGFIX] TSDB: Preserve mapped chunks when WAL replay merges multiple references for the same series, preventing missing out-of-order samples and duplicate in-order chunks after restart (#19805, @dmatth1)
- [BUGFIX] Fix auto-reload logic to reload after reverting a failed configuration change (#19838, @eholzbach)
- [BUGFIX] API: Do not match metric family metadata for doubled _total and _info suffixes in experimental search API. (#19910, @tcp13equals2)
- [BUGFIX] API: Reject
timeoutandlookback_deltavalues that overflow int64 instead of turning them into a negative duration (#19658, @youdie006) - [BUGFIX] API: Resolve metric family metadata for suffixed metric names in search results, in experimental search API. (#19824, @roidelapluie)
- [BUGFIX] AWS SD: Describe each ElastiCache cluster once instead of twice for clusters that are not replication group members. (#19434, @ekalinin)
- [BUGFIX] Build: Allow installing promtool with version-suffixed go install commands (#19754, @aknuds1)
- [BUGFIX] Discovery: Fix a panic in Azure service discovery when a VM tag has a null value. (#19755, @shoemoney)
- [BUGFIX] Federation: fix corruption of float native histograms. (#19679, @MichaHoffmann)
- [BUGFIX] Fix ts_of_last_over_time for samples before the Unix epoch. (#19828, @fallintoplace)
- [BUGFIX] Histograms: Fix ConvertNHCBToClassic inflating classic bucket counts for integer native histograms whose spans have gaps. (#19659, @youdie006)
- [BUGFIX] Logging: Preserve rule and TSDB block values in JSON logs. (#19572, @shilohlee98)
- [BUGFIX] OTLP receiver: Drop exemplars with timestamps more than 10 minutes in the future instead of storing them and blocking subsequent exemplars for that series. (#19812, @bwplotka)
- [BUGFIX] OTLP: Count only out-of-order exemplars in
prometheus_api_otlp_out_of_order_exemplars_total, not every rejected exemplar. (#20030, @aknuds1) - [BUGFIX] OTLP: Do not drop exemplars that have a
trace_idorspan_idfiltered attribute in addition to a trace or span ID. The trace context now takes precedence over the colliding attribute, as required by the OpenTelemetry specification. (#20004, @krajorama) - [BUGFIX] OTLP: Do not emit
le="+Inf"twice when a histogram's explicit bounds end at+Inf, and warn about the bound. (#19425, @serhiy-bzhezytskyy) - [BUGFIX] OTLP: Stop dropping exemplars that arrive out of timestamp order within a data point. (#20029, @aknuds1)
- [BUGFIX] OpenMetrics 2.0: Attach histogram exemplars to matching classic
_bucketseries and preserve them when scraping both native and classic histograms. (#20020, @dashpole) - [BUGFIX] PromQL: Avoid intermediate overflow in
rad()anddeg()conversions. (#19901, @fallintoplace) - [BUGFIX] PromQL: Consistently ignore and drop
__type__and__unit__labels inwithoutaggregations,absent(),info(), and binary operator fill matching. (#19986, @dashpole) - [BUGFIX] PromQL: Do not panic when printing the partial AST returned alongside a parse error. (#19797, @zenador)
- [BUGFIX] PromQL: Drop type and unit in binary operations so they are transparent to users, similar to how name is handled. (#18680, @iam-prane-eth)
- [BUGFIX] PromQL: Fix
==,!=,changes()andcount_valueson native histograms giving wrong results insidehistogram_count(),histogram_sum()andhistogram_avg(). (#20024, @linasm) - [BUGFIX] PromQL: Fix histogram_fraction returning wrong results for native histograms with custom buckets when a bucket boundary is exactly 0. (#19657, @youdie006)
- [BUGFIX] PromQL: Fix histogram_quantile and histogram_quantiles interpolating within the wrong bucket for native histograms whose sum is NaN. (#19973, @bhabishnu)
- [BUGFIX] PromQL: Fix lexing of subqueries whose range is a duration keyword expression, e.g.
foo[range():1s]. (#19729, @roidelapluie) - [BUGFIX] PromQL: Fix warning and error locations for duration expressions
min_ofandmax_of. (#19742, @roidelapluie) - [BUGFIX] PromQL: Ignore NaN classic histogram bucket boundaries in
histogram_quantile,histogram_quantilesandhistogram_fractionand return correct value instead of NaN if there are normal buckets. (#20057, @fallintoplace) - [BUGFIX] PromQL: Preserve infinite values at exact quantile ranks. (#19899, @fallintoplace)
- [BUGFIX] PromQL: Preserve original operand sides for experimental fill modifiers with group_right matching. (#19939, @inanna-malick)
- [BUGFIX] PromQL: Preserve subquery step expressions when printing queries after preprocessing. (#19743, @roidelapluie)
- [BUGFIX] PromQL: Range vector functions no longer raise a spurious "vector cannot contain metrics with the same labelset" error when series have different metric names but the same remaining labels, as long as their timestamps do not overlap within the evaluated range window (#18631, @kasharkzy)
- [BUGFIX] PromQL: do not count subquery materialized samples in total samples statistics (#19873, @roidelapluie)
- [BUGFIX] Remote write: Prevent future-dated exemplars from scaling shards down to the minimum. (#19866, @thampiotr)
- [BUGFIX] Agent: Prevent future sent timestamps from advancing WAL truncation beyond the minimum retention window. (#19866, @thampiotr)
- [BUGFIX] Rules: Restore firing alerts with for durations shorter than --rules.alert.for-grace-period after a restart. (#19882, @ajaykr0905)
- [BUGFIX] Scrape: fix failing scrape when float histogram is emitted over protobuf with count, zero count and buckets all zero, for example a result of recording
rate(x[1m])over constant histogram. (#19682, @MichaHoffmann) - [BUGFIX] Search API: Return the lexically smallest label values when
limitis set on/api/v1/search/label_values, instead of an arbitrary subset (#19694, @tcp13equals2) - [BUGFIX] TSDB: Fix WAL watcher permanently skipping checkpoint series garbage collection when lagging behind head truncation. (#20041, @bwplotka)
- [BUGFIX] Search API: Avoid panics when the requested time range has no participating storage. (#19992, @aknuds1)
- [BUGFIX] TSDB: Fix a race in selected-series and stale-series compaction where a sample committed after the block was written but before the series was evicted from the head could be silently lost. The fix no longer depends on isolation being enabled. (#19666, @duricanikolic)
- [BUGFIX] TSDB: Fix a rare case where a sample could be lost during selected-series or stale-series compaction if an unrelated write to the same series ran cleanup that erased the evidence needed to protect it. (#19672, @duricanikolic)
- [BUGFIX] TSDB: Fix spurious "unknown series references" warnings during WAL replay after a restart, when the only blocks on disk were produced by selected-series or stale-series compaction. (#19734, @duricanikolic)
- [BUGFIX] TSDB: Increment
prometheus_tsdb_wal_corruptions_totalwhen WAL corruption is detected during checkpoint creation, so the metric reflects corruption found at compaction time rather than only after a restart-triggered repair. (#19858, @mstinsky) - [BUGFIX] TSDB: Preserve series identities needed to recover exemplars after compaction and restart. (#19940, @duricanikolic)
- [BUGFIX] TSDB: Reject native histograms whose span offsets overflow the int32 bucket index instead of storing them with corrupted buckets. (#20034, @Ramya-9353)
- [BUGFIX] TSDB: fix no passing metadata-wal-records to TSDB from main feature flag. (#19678, @krajorama)
- [BUGFIX] Templates: Preserve IPv6 addresses with dotted zone identifiers in
stripDomain. (#19908, @ItsRoy69) - [BUGFIX] UI: Don't automatically open an autocomplete dropdown after closing a function call body or aggregation operator with a closing parenthesis. (#19825, @juliusv)
- [BUGFIX] Web: Fix HTTP/2 negotiation silently falling back to HTTP/1.1 under Go 1.27+ when TLS is enabled with
http2: true. The server now correctly advertisesh2via ALPN and multiplexes concurrent requests over a single connection. (#19848, @dongjiang1989) - [BUGFIX] mixin: Fix double-counting of failed samples in the
PrometheusRemoteStorageFailuresalert denominator. (#19877, @nikhilsaxena04) - [BUGFIX] promtool: Honor
--enable-featurewhen evaluating rules intest rules. (#20046, @dennisme) - [BUGFIX] Scrape: Ensure UTF-8 works with the experimental OpenMetrics 2.0 (#19902, @bwplotka)
- [BUGFIX] Scrape: Reject sum-only classic histograms during NHCB conversion (#19315, @shubhgupta2104)
v0.9.0-pre.2
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.9.0-pre.2/turso_cli-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.9.0-pre.2/turso_cli-installer.ps1 | iex"
| File | Platform | Checksum |
|---|---|---|
| turso_cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| turso_cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| turso_cli-aarch64-pc-windows-msvc.zip | ARM64 Windows | checksum |
| turso_cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| turso_cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| turso_cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo tursodatabase/turso
You can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
2026-10-28, Version 26.13.0 'Lithium' (LTS), @richardlau
This release marks the transition of Node.js 26.x into Long Term Support (LTS) with the codename 'Lithium'. It will continue to receive updates through to the end of April 2029.
Other than updating metadata, such as the process.release object, to reflect that the release is LTS, no further changes from Node.js 26.12.1 are included.
If you are updating from an earlier Long Term Support release (e.g. Node.js 24 or 22 or earlier) please note that since Node.js 25 the official binaries for Linux are linked against libatomic, which may need to be installed separately depending on your Linux distribution.
13.2.5
Download page What's new highlights
- Security: Fix CVE-2026-100105
- Security: Fix CVE-2026-103506
- Security: Fix CVE-2026-88858
- Security: Fix CVE-2026-88967
- Git Sync: Ignore hidden paths in repository scans and diffs #135028, @ferruvich
- Provisioning: Default save from a branch preview to the previewed branch #135174, @Clarity-89
- Provisioning: Never replace the repository root folder during incremental sync #135463, @ferruvich
- Plugins: Don't report loaded plugins as not registered when a request times out #135665, @leventebalogh
- Provisioning: Fix PR dashboard previews when served from a sub-path #135559, @gustaff-weldon
13.0.12
Download page What's new highlights
- Security: Fix CVE-2026-100105
- Security: Fix CVE-2026-88858
- Security: Fix CVE-2026-88967
- Provisioning: Default save from a branch preview to the previewed branch #135173, @Clarity-89
13.1.9
Download page What's new highlights
- Security: Fix CVE-2026-100105
- Security: Fix CVE-2026-88858
- Security: Fix CVE-2026-88967
- Provisioning: Default save from a branch preview to the previewed branch #135175, @Clarity-89