flutter_kevy 6.2.2 copy "flutter_kevy: ^6.2.2" to clipboard
flutter_kevy: ^6.2.2 copied to clipboard

kevy embedded in Flutter over dart:ffi — the real pure-Rust Redis-compatible engine in your app: TTL, hashes/lists/zsets, pub/sub, persistence. The MMKV shape, and everything MMKV lacks.

6.2.2 #

Tracks the kevy 6.2.2 engine. No API change in this door. The engine fix underneath: a persistence directory is now one engine's — a second open is refused instead of corrupting the first one's append-only log — and the replay summary survives a file that grew during replay.

6.2.1 #

Tracks the kevy 6.2.1 engine. No API change in this door, and no change in the engine either: 6.2.1 exists because two Rust client crates (kevy-client, kevy-client-async) had gone three releases without reaching crates.io, and every kevy package now carries one version and moves together. This door moves with them.

6.2.0 #

Tracks the kevy 6.2.0 engine. No API change in this door.

  • -0 and 0 are one score now, as they are in Redis. A member stored at -0 used to sort before members scored 0; it now ties with them and the member name breaks the tie, which is what Redis has always answered. ZSCORE is unchanged — it returned 0 before and returns 0 now.
  • ZADD is substantially faster when it changes nothing. Re-adding a member at a score it already has no longer removes it from the ordered index and puts it back: +52.8% at eight thousand members, +55.3% at two hundred thousand.

6.1.0 #

Tracks the kevy 6.1.0 engine. No API change in this door.

  • The engine this door ships no longer names who built it. Every prebuilt libkevy_ffi.so carried the build machine's home directory — 27 paths per Android library — because a toolchain with the rust-src component resolves std's panic locations to the local source tree. packaging/android/build-*jnilibs.sh remaps it away now, and the alignment gate refuses an artifact that names its builder.

6.0.0 #

Tracks the kevy 6.0.0 engine. No API change in this door.

  • Fourteen commands reach the server wire. SETBIT, GETBIT, BITCOUNT, BITPOS, BITOP, GETRANGE, SETRANGE, LINSERT, COPY, TOUCH, TIME, GETEX, ZREVRANGE, HINCRBYFLOAT. The engine had always implemented them and this door's embedded half had always answered them; a RESP client got unknown command. That is closed, so the two halves of this door now answer the same set.

  • A range past the end is empty. GETRANGE k 99 200 on a shorter value, and ZREVRANGE z 5 10 on a smaller set, answered the last element where Redis answers nothing. Both halves of this door shared the mistake, which is why comparing them did not find it — a three-way differential against a real valkey did.

  • MGET answers nil for a wrong-typed key rather than failing the whole call, which is what its own documentation always said.

The vendored engine is rebuilt and self-reports 6.0.0.

5.4.1, 5.4.0 #

No entries were written for these. The door shipped with the version bumped and its changelog left at 5.3.0, which is what tools/check_door_changelogs.py now refuses: dart pub publish warns about it, and a warning nobody reads is how two releases went by.

5.3.0 #

Tracks the kevy 5.3.0 engine. No API change in this door — 5.3's core deliverable is the engine's own test system (a three-tier audited suite), and its one product fix is in kevy-cli, which this door does not ship. The vendored engine is rebuilt and self-reports 5.3.0.

5.2.0 #

Tracks the kevy 5.2.0 engine. No API change in this door.

  • Lua dialect corrections. The embedded scripting engine moved to luna-core 3.0.0: each Lua dialect now serves its own table surface and error wording, and the string.rep denial-of-service fix from the 5.1 line is pinned by a dedicated gate.

5.1.0 #

Tracks the kevy 5.1.0 engine. No API change in this door — the vendored engine is what moved.

  • Fixes a corruption path. In 5.0.0 a compressed value could read back as a decode error after the value log compacted it: the encoder tagged a literal-only frame as dictionary-dependent when the dictionary carried a shared Huffman table, and its own decoder then refused it. The CRC covers the bytes that were written, so nothing catches it at write time. If you enable compression or value logging, this is the reason to move.
  • Tail latency: the reactor no longer stalls on the rewrite hand-off, and the durability queue no longer drains on every tick.
  • Replication generations are random identities rather than counters, so two nodes can no longer collide on one.

5.0.0 #

Tracks the kevy 5.0.0 engine — the tail-latency release. Element-level copy-on-write for collections, off-thread rewrite completion, and group-committed durability. Data directories from 4.x open unchanged.

4.0.0 #

  • First tracked release of the kevy Flutter door, aligned with the kevy 4.x engine.
  • KevyDb over dart:ffi: scalar get/set/getText/setText with TTL, incrBy, expire, pttlMs, keys, flushAll, and cmd() to every verb.
  • Persistence: KevyDb.open(dir) (AOF + snapshot) and in-memory stores.
  • Pub/sub: publish, subscribe/psubscribeKevySub.
  • KevySub.waitNext(timeoutMs) — blocking receive that parks in the kernel (kevy_sub_wait) instead of spinning the polled next().
0
likes
140
points
287
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

kevy embedded in Flutter over dart:ffi — the real pure-Rust Redis-compatible engine in your app: TTL, hashes/lists/zsets, pub/sub, persistence. The MMKV shape, and everything MMKV lacks.

Homepage
Repository (GitHub)
View/report issues

License

Apache-2.0, MIT (license)

Dependencies

ffi, flutter, plugin_platform_interface

More

Packages that depend on flutter_kevy

Packages that implement flutter_kevy