Releases
v2.57.0
Compare
Sorry, something went wrong.
No results found
2.57.0 (2026-09-30)
Features
apiKeys: allow an api key to be deleted by the key itself or its fingerprint (#2683 ) (e172c73 )
ci: ratchet implicit any, and count as unknown as as any (34e29d9 )
cluster: retransmit lost sync messages before evicting (#2785 ) (0807880 )
h4: convert lib/core/validation/validation.js to TypeScript (787cfd7 )
h5: convert plugin.js and pluginsManager.js to TypeScript (acb958e )
h6: convert entryPoint.js and httpwsProtocol.js to TypeScript (5d0ef6d ), closes #2749
i1: convert the four lib/kuzzle leaves to TypeScript (1990a22 )
i2: convert internalIndexHandler and dumpGenerator to TypeScript (f7b9ff3 )
native addons from prebuilt binaries, no compiler at install time (4643d45 ), closes #2839
setup claude (7de8020 )
skills: add /wrapup skill for end-of-session handoff (bc49d3a )
td-43: charge for a type assertion — a sixth ratchet, casts (3f8be8c ), closes #2730
td-56: fail on a declaration that lies, adopted or not (b415d7f )
td-61: make a conversion report the strict count it leaves behind (e21fbf1 )
ts: flip strict on, and split the test code into its own program (e400320 )
use new kuzzle vault algorithm (dcea521 )
utils: distributed reentrant mutex (#2664 ) (cda3514 )
vault: use old encryption algorithm unless configured otherwise (7eeec62 )
Bug Fixes
API keys can be deleted by key or fingerprint on upgraded installs (99b87a7 )
api: declare RateLimiter's limit without a dead initialiser (0130222 )
bin: --enable-plugins skips a missing plugin with a warning (step 15, D-4) (dfec664 )
cache: copy the Redis config with cloneDeep, not structuredClone (step 15, F-07) (1702cb1 ), closes #2676
cache: keep the receiver when calling a hoisted command (b7b7234 )
changelog: resolve leftover merge-conflict markers (3ce76fc )
ci: anchor the strict-check adopted-path match (622531a )
ci: let the preflight conversion reminder see uncommitted work (a72c6b1 ), closes #2774
ci: make the implicit-any and casts ratchets fail closed (83f6601 ), closes #2731
ci: normalise the coverage reports before SonarCloud reads them (d3870be )
ci: resolve .js targets in the tests/ mirror convention (8c11613 ), closes #2771
ci: restore coverage measurement on TypeScript (TD-24, #2692 ) (b90eac9 ), closes #2658
ci: stop the local docker unit runner rewriting the host's node_modules (e8ae7af ), closes #2793 #2790
ci: wait-kuzzle's fourteenth call site, and the prune that removed its runner (ff50dda )
cluster: a joining node no longer evicts itself for a message it already has (step 15, F-12) (cceefe8 ), closes #2777 #2781
cluster: answer a joining node's handshake within its timeout (step 15, F-03) (5b4b8e9 ), closes 2777/#2781
cluster: answer the rules node.ts's rename re-scored (17ce162 )
cluster: answer the three rules the J3a rename re-scored (e78f566 )
cluster: close TD-33's cluster half — TD-65 and TD-67 (c753464 ), closes #2773 #2776
cluster: do not evict a peer for heartbeats queued behind a recovery (step 15, F-04) (212183d ), closes #2896
cluster: fork the ID card worker by the extension it actually has (690de4d )
cluster: inline SubscriberState, the last S6564 on the slice (84d9a7c )
cluster: prove the subscription is live in addNode too (f6def54 )
cluster: satisfy the TS-only rules the subscriber rename exposed (998e727 )
cluster: satisfy the two TS-only rules the rename exposed (afae7af )
cluster: shutdown before the handshake still disposes (step 15, F-11) (ef882ef ), closes #2803
cluster: the publisher's history is readonly (fdb944e )
cluster: use Object.hasOwn in isSyncTopic (0d56164 )
core: a node that exits frees the locks it holds (step 15, F-13) (6ab73f3 )
deps: depend on the stable releases of koncorde and dumpme (52cc8cc )
deps: withLock on redis-semaphore, which supports Node 20 (step 15, D-3) (6a2f9ae )
document: export accepts an array sort (step 15, F-02) (45c2966 ), closes #2666
dump: check suffix against a regexp to sanitize user input (#2665 ) (79c9adf )
dump: keep handled-error dumps valid and never unhandled (step 15, F-05) (4356506 )
errors: restore v2.56.0's client-facing text for plugin and WebSocket parsing errors (step 15, F-10) (fdd0512 ), closes #2803 #2803 #2752
export-csv: use sort args is provided in the query (422ae64 )
h5: put the plugin config NOSONAR on the line Sonar flags (525203b )
i1: clear the five minor smells the renames re-scored (e88ca2d )
i2: clear the five minor smells the renames re-scored (ec07d91 ), closes #2688
kerror: drop the "probably not a Kuzzle error" suffix from plugin errors (3b030e4 )
kerror: only an object literal given last is the options object (step 15, F-08) (3c8dbf1 ), closes #2803
kerror: survive being loaded as ESM (71b8c11 )
kuzzle: close TD-69 — the mappings-import lock race (d37b391 )
kuzzle: flush the application logger on shutdown (2730955 ), closes #2747
kuzzle: justify the deprecated Mutex on the import lock (6af2921 ), closes #2688
lint: three unused/shadowed bindings left by K4 and K5 (facf9c5 )
logstash access logs carry the request headers once (b8b05c8 )
network: enforce the multipart file-size limit and populate connection headers (47c62cf ), closes #2749
network: Protocol.init takes any falsy first argument again (step 15, F-11) (0202c89 ), closes #2737
plugin: accessors.execute takes a null callback as absent (step 15, F-06) (9a8d036 ), closes #2803
plugin: context.constructors.ESClient follows the configured major version (0a6bc72 )
plugin: strategy verify may return a then-only thenable (step 15, F-11) (d89e323 ), closes #2748
published typings compile without dev dependencies (2af8b4c )
realtime matching no longer throws after geospatial unsubscriptions (eca6292 ), closes kuzzleio/boost-geospatial-index#29 kuzzleio/koncorde#84 Koncorde#test
sonar: clear the 27 new-code violations on the network rename (b858fc2 ), closes #2688 #2722
sonar: clear the 57 new-code minors the rename re-scored (0b2ad1c )
sonar: declare Profile._hash as an overloaded method, not a static field (ffca3db )
sonar: NOSONAR the two remaining awaits of a non-Promise (TD-26) (85a22fc ), closes #2697
sonar: optional chaining in documentController + CPD-exclude the file (899f73f )
sonar: resolve new-code smells in memoryStorageController (PR C) (1ea5437 )
sonar: resolve new-code smells in serverController + documentExtractor (PR D) (1d423e5 )
sonar: resolve the new-code smells the rename re-scored (PR G1) (d96f77f )
sonar: resolve the smells the clientAdapter rename re-scored (5eee56f ), closes #2688
sonar: resolve the three smells the typing pass scored (f396617 )
sonar: return null rather than Promise.resolve(null) in load() (4c456e1 )
sonar: split the four functions the rename re-scored as too complex (0efbea0 )
sonar: the last new-code minor on accessLogger (e72a829 )
sonar: the last three new-code minors on geoShape (4be97a0 )
step-03: bin/start-kuzzle-server, whose every option was dead (7006066 )
step-14: M7 — ts-node reads the test program's options, not its include (2b6d4e5 )
storage: a missing document answers not_found again (step 15, F-01) (2ad3541 )
td-20: configure takes a result, and the core stops calling setResult (5824f88 )
td-20: name the comma-separated array form instead of deprecating it (6e17100 ), closes #2721
td-20: validation reads input.args instead of the deprecated input.resource (7ae3126 )
td-21: guard _wrapError on the controller name, not the request (65a9e09 ), closes #2687
td-26: drop the five awaits of a non-Promise (914341a ), closes #2697
td-27: normalize a controller's error where it is raised, not on the funnel (563b183 ), closes #2703
td-28: drop memoryStorageController's class-wide index signature (4687d74 ), closes #2702 #2704
td-33: gate the functional suite on cluster readiness, not on a handshake (267f9d3 ), closes #2715
td-33: keep the log dump armed through the test run (f63f997 )
td-33: make a cluster startup failure diagnose itself (ad9fe4b )
td-33: put fail-fast: false on the monkey matrix too (7ae01af )
td-34: correct Profile._hash's return type, and type its patch site (a802d4a ), closes #2712 #2712
td-35: run copy-binaries without a native binary, and gate the build payload (389c2a0 ), closes #2713
td-36,td-37: gate the artifact that is published, and derive the gate from files (6fbb0ec ), closes #2717
td-38,td-47: gate a fork's PR on the build, and stop paying for superseded runs (86e309d ), closes #2719 #2725 #2734
td-40: declare the load path nullable, where it has always been nullable (e08e9fd ), closes #2724 #2727
td-41: give Protocol.init the two overloads its union was standing in for (859d162 ), closes #1645 #2728
td-41: normalise the entry point with ?? instead of a null ternary (17e7ec1 )
td-42: hold the coverage rule per converted file, not per block (1c1bd58 ), closes #2724 #2723 #2723
td-43: keep node: on the import the autofix split in two (0affee9 )
td-43: make type-only imports explicit, repo-wide (ddf66ac )
td-44: make the strict check fail closed when tsc does not run (2059381 ), closes #2731
td-45: count extensionless Node executables in the js ratchet (f59a6a6 ), closes #2719 #2705 #2732
td-46: stop asserting an assignment to a stub the spec declared itself (100f6e2 ), closes #2739
td-48: assert that a stack trace never leaves the process (f8b3b06 )
td-48: keep the production node out of the cluster (548bc48 )
td-49: let the vitest tree load what reaches lib/api/controllers (6c19eaa )
td-50: merge coverage as istanbul, not as V8 ranges (6f095ed ), closes #2744
td-55: make waterfall ask the chain, not the value (596a0f0 )
td-56: stop bindPluginMethod declaring a type it does not return (818cb0d ), closes #2757
td-57: type vault's remembered key honestly, and test it (4603d30 )
td-58: count the messages that were actually lost (910bc9a ), closes #2715
td-58: subtract message ids with Long, not with - (a3091ec )
td-59: give the cluster the id the process logs under (191a4e7 ), closes #2757
td-59: print both node ids when joining the cluster (d7805c1 ), closes #2764
td-74: the allowed-values statics are readonly (643d70b )
td-74: users "out" and "none" no longer share a channel name (324a6c4 )
td-75: the date type's specification has a type of its own (53dec89 )
td-76: declare PluginContext.constructors as constructors (6d37959 )
td-77: remove the two invalid_openapi_schema codes nothing raises (c8cbc1d )
td-78: the plugin hook and pipe types admit every form the runtime takes (41c519e )
td-79: two config checker messages now say what they check (f3fdc72 )
td-80: give passport its next, and route every failure through one path (9443c5b )
td-81: release the dump lock on every path, and check arguments before taking it (52932f0 )
test: point cucumber's ts-node at the test program (28828af )
tests: close TD-70 — stop pinning the order of an unordered search (c50751b ), closes #2783
ts-migration: put the NOSONAR marker on the flagged line (66449cb )
ts-migration: restore the receiver on dynamic cache-script calls (f68aaf4 )
types: authController — step 12, K5 (7363d25 )
types: configuration, controllers, generic events and repositories compile as against v2.56.0 (step 15, TY-04/07) (afcb08d )
types: declare accessors.execute's callback form as v2.56.0 did (96f1fc8 )
types: deprecate Token.connectionId, which no runtime token carries (ADR-0002, TD-07) (4a04dc5 )
types: ES7 storage service is strict-clean and adopted — step 12, K3 (329692f )
types: ES8 storage service is strict-clean and adopted — step 12, K3 (9d80753 )
types: export public types missing from the types barrel (3dbb530 )
types: fix triple-l typo in adminController type filename (e733094 )
types: funnel — step 12, K5 (5a4cc05 )
types: kerror — step 12, K5 (1ee1d0a )
types: let Error stringify a non-string KuzzleError message itself (f611ac8 )
types: lib/core/network and the manifests — step 12, K5 (d8d8826 )
types: lib/kuzzle — step 12, K5 (1271750 )
types: make lib/api/request strict-clean — step 12, K2 (a1eaab0 )
types: make lib/kerror's error classes strict-clean — step 12, K1 (7ebad7d )
types: make lib/types' small files and baseModel strict-clean — step 12, K1 (1b9eea5 )
types: make lib/util's small files strict-clean — step 12, K1 (3978f0c )
types: make nine lib/core files strict-clean — step 12, K1 (cb1db7e )
types: make the last fifteen ≤ 5 files strict-clean — step 12, K1 (2bbafeb )
types: memoryStorageController and the body assertion — step 12, K5 (60a7dce )
types: plugin context, accessors.execute and errors compile as against v2.56.0 (step 15, TY-01/02/05) (0ad75fa )
types: plugin.ts, hotelClerk.ts and subscription.ts — step 12, K4 (d37aeac )
types: pluginContext, Backend and the debugger — step 12, K5 (f778842 )
types: pluginsManager — step 12, K4 (27e4c6a )
types: point Validation.validate JSDoc at KuzzleRequest (d0484ab )
types: queryTranslator and the redis adapter — step 12, K5 (94469d7 )
types: read the deprecated jwt section through one documented helper (063fb76 )
types: request getters, user and token read as against v2.56.0 (step 15, TY-03/06) (fb4f550 ), closes #2801 #2803
types: split the three configuration shapes — step 12, K0 (TD-53) (8b51997 )
types: stop NativeController.constructor inferring never[] (66e3ddc )
types: TD-62's model/security half and the repositories it moves into (c07ad0f )
types: the cluster — step 12, K5 (20ced7f )
types: the last of lib/ — step 12, K5 (aa5f4c2 )
types: the protocol stack — step 12, K4 (1058067 )
types: the remaining controllers and documentExtractor — step 12, K5 (3647a19 )
types: the remaining declarations accept what v2.56.0's did (step 15, TY residuals) (20f7a80 )
types: the token pair — step 12, K4 (e7614a3 )
types: the two base classes and validation.ts — step 12, K4 (part 1) (664d3e0 )
util: model Promback's settled value as T | undefined (5f8e751 )
validation: a truthy non-boolean collection strict is strict again (step 15, F-09b) (377c9f0 ), closes #2803
validation: let plugin types provide BaseType members as getters or prototype values (step 15, F-09a) (5eb24ba ), closes #2722
validation: use ??= in the helper the move made new code (02cfdfe )
You can’t perform that action at this time.