Diom (pronounced: dye-omm/daΙͺΙm) is a backend components platform for building robust, idiomatic services.
It offers high-level APIs for commonly used components such as cache, rate-limiting, idempotency, queue, and more. It has zero runtime dependencies, uses its own storage, and can be run as a single node or a highly-available cluster.
Useful links:
- Website - the Diom homepage.
- Documentation - information on how to use Diom.
- GitHub Issues - report issues and make suggestions.
- Community Forum - ask questions, and start discussions!
- Slack - come and chat with us!
To stay up-to-date with new features and improvements be sure to watch our repo!
Diom ships with client libraries for a variety of languages, as well as a CLI named diom.
| β‘οΈ Feature Breakdown β‘οΈ | |||||
|---|---|---|---|---|---|
| Language | Officially Supported | Other Notes | |||
| Go | β | ||||
| Python | β | Sync and async. | |||
| TypeScript/JavaScript | β | ||||
| Java | β | Async support planned. | |||
| Kotlin | π | ||||
| Ruby | π | ||||
| C# (dotnet) | π | ||||
| Rust | β | ||||
| PHP | π | ||||
| CLI | β | ||||
The Diom CLI is published on npm as @diomhq/diom-cli. You can run it directly with npx without installing anything:
npx @diomhq/diom-cli --helpOr install it globally:
npm install -g @diomhq/diom-cli
diom --helpDiom is designed to be run on a cluster of machines with stable network identities (e.g., a Kubernetes StatefulSet). It's recommended to run it as a three-node cluster for high-availability and easy operations, but it can also run as a single-node.
The diom-server binary is configured through a TOML file which can be passed with the --config-path command line option. Settings can also be overridden by setting environment variables; for more information, see ENVIRONMENT_VARIABLES.md
There are two main ways to configure diom-server: environment vars, and a configuration file.
Configuring the server is described in the configuration section of the docs.
Observability configuration described in the observability section of the docs.
This application is written in Rust and targets the latest stable release of Rust. You should install Rust with rustup or your favorite package manager. This application is broken up into multiple crates using Cargo workspaces.
A prek config is included and all commits are expected to pass pre-commit checks (as well as more-intensive CI checks run through Github Actions). You should install prek and then configure it to run automatically on commits to this repo with prek install.
Many helpful commands are provided in the justfile which can be invoked using Just, so you should make sure to have that installed too.
cargo build in the root should build the server by default. If you want the local CLI, you'll also need cargo build --package diom-cli
Changes should be done in branches prefixed with your username (e.g., johnsmith/my-cool-feature) and should have commit messages that describe the change. Prior to sending any PRs, commits must pass prek, just lint, and just test. Any changes that affect the client libraries / CLI will require running just codegen to rebuild all client libraries.