Slap
Slap provides Elixir bindings for SlateDB (an embedded key-value engine optimized for storing data in object storage), as well as services built on top of these bindings. The services run inside your application, on one node or several.
Services
- slap_streams: a Durable Streams server, with HTTP, long polling, and SSE
- slap_kv: partitioned key-value storage with conditional writes, ordered scans, and an HTTP API
-
slap_files: file storage with metadata and
conditional replacement; small files are kept in
slap_kvrecords, which saves object-store PUTs - slap_yjs: Yjs documents for collaborative editing, with replication and presence across nodes
Building blocks
- slap_slatedb: the SlateDB bindings
- slap_cluster: SlateDB databases run as shards across nodes, with placement, routing, and failover
- slap_snapshot_log: an append-only log of changes that can be condensed into snapshots
Complete distribution
- slap: all Slap libraries and a standalone HTTP server for evaluation and benchmarking
The source is on GitHub.
Benchmarks
Charts of every benchmark run on main:
- SlateDB: in-memory binding overhead and durable operations against RustFS, with and without added network latency
- Durable Streams: the official Durable Streams benchmarks against Slap and the official Caddy server, on the same runner
The benchmarks run on GitHub's shared runners; expect non-trivial variance between runs. See Benchmarks in the README to run them yourself.