Repository navigation
Be sure to check out the NuGet Packages 📦
New 🎉
- Linux ARM64 build (KitKey.linux.arm64.zip) alongside x64.
- Linux builds are now self-contained, so .NET no longer needs to be installed on the server.
- Store names are validated up front, rejecting names that aren’t safe as directory names.
Changes 😎
- Creating a store is now all-or-nothing. A failed create no longer leaves a half-built store behind.
- Deleting or stopping a store waits for in-flight operations, and later operations get a clear “store has been stopped” error.
- Statistics counters are thread-safe and only count operations that succeeded.
- The web UI now returns enums as strings, with or without the web API enabled.
- The web API returns 400 with the message for invalid requests, and now logs the full exception on failures.
- ConnectAsync now reports connection failures through OnException instead of swallowing them.
- KkClient and KkServer constructors were consolidated, so every constructor behaves the same.
- Updated Linux installation instructions.
Fixed 🐛
- Clients created with a configuration never raised connect or disconnect events and never auto-reconnected.
- PushFirst and PushLast with list items had their directions swapped, so first pushed to the end and last to the front.
- TryGetLast returned the first item instead of the last.
- GetFirst, GetLast and GetList returned a broken empty item for a missing list, and the TryGet… methods always reported success. They - now return null and false.
- Removing an item from a list that didn’t exist created an empty list.
- Deleting an ephemeral store could try to delete a directory relative to the working directory.
- Cache hits and misses were miscounted for lists, because database misses were counted as hits.
- A missing store’s page showed zeros instead of returning 404.
- The store page printed the literal text Model.Store.PersistenceScheme instead of the value.
Full Changelog: 2.1.6...2.2.0