Diom

Open source

Components for robust services

Cache, key-value storage, idempotency, rate limiting, msgs, and more. The building blocks your service needs available from the Diom components platform.

One binary for the primitives you keep rebuilding

Every backend primitive you need, without the infrastructure sprawl. One binary, self-hosted, and open-source.

The common components you need

Cache, rate limiting, idempotency, queues, streams, key-value, and more. All in a single service, one SDK, and a consistent API. Patterns are well established, there's no reason why to build them from scratch.

Replaces Redis, Kafka, custom code, and more…

Avoid infrastructure sprawl. Diom can replace Redis, Kafka, RabbitMQ, and a lot of custom code for many use-cases. Less to run, less to learn, less to maintain. Just one open-source binary.

Highly-available and easy to operate

Self-contained, manages its own storage, and can be run as a single node or a highly-available cluster. Focusing on easy operations for 95% of products, instead of benchmarking against FAANG scale.

Robust by default

Use pre-built idiomatic components rather than building fragile versions on top of Postgres and Redis, or running a zoo of specialized services that each need their own backups, monitoring, and maintenance.

Idiomatic building blocks

The building blocks you need for building robust backends.

Cache

Fast, distributed caching with TTL support. Keep hot data close to your application and reduce load on your primary data store.

Diom caching uses a hybrid of memory and disk storage with configurable backing (ramfs, ephemeral SSDs, persistent disk) for large cache sizes and fast access.

Set and get cache values with a TTL

client.cache().set(
    "my-key".to_string(),
    b"cached value".to_vec(),
    CacheSetIn::new(Duration::from_secs(10))
)
.await?;

let out = client.cache()
    .get("my-key".to_string(), CacheGetIn::new())
    .await?;

match out.value {
    Some(bytes) => println!("Got: {}", String::from_utf8_lossy(&bytes)),
    None => println!("Key not found"),
}

Built for your backend needs

Works with most common deployment environments and frameworks.

High availability

Supports deploying as a Raft-powered cluster to stay up when a node fails and have zero-downtime upgrades.

Stateless HTTP API

Works in every environment and with the wider ecosystem. No proprietary protocols or special drivers required.

Fine-grained authorization

Per-tenant and per-user data isolation at the data layer, enabling secure multi-tenancy and least-privilege setups out of the box.

Low latency

Having the implementation and the storage layer on the same node enables low latency operations (e.g. 100μs hot reads).

Developer experience

SDKs for the most popular languages (with more planned), so you can integrate Diom into your stack with minimal friction.

Easy to operate

Easy setup, monitor, and operate. Self-healing clusters, built-in backups, and more. Built with operations in mind.

Open source

Diom is free and open source software with the source code available on GitHub. Contributions and suggestions are welcome!

Built with 100% safe Rust

Written entirely in safe, async Rust for memory safety, fearless concurrency, and high performance.

Diom Playground

Try Diom live in a playground environment. Use the CLI from the browser or from your own terminal.

diom — sandbox

Connected to sandbox.diom.dev:8443

Type Diom CLI commands below (same as diom …). Try: kv get <key>, help, or --help

————————————————————————————————————————————————

diom> kv set greeting "Hello, world!"

OK

diom> kv get greeting

"Hello, world!"

diom> cache set user:42 '{"name":"Ada"}' --ttl 3600

OK

diom>Enter command…