onemessagebus
A typed NDJSON message bus for anything that speaks in events. One envelope, one filter grammar, payload bounds and redaction, a schema registry with version read-sets, and an emitter and reader over streams, generic over the vocabulary a consumer declares.
Two artifacts:
onemessagebus— the core library. It knows the shape of an envelope and none of the words: which sources exist, which label keys are reserved and which top-level dimensions an envelope carries are aVocabulary's to declare.Openreserves nothing; a vocabulary of your own — declared in the program that owns it, never in the bus — is proven through the same conformance table.onemessagebus, the binary —schema list|check|gen|registerover the registry,schemaswithschemas clear|fetchover the cache of schema bundles a configuration links by URL,events merge|emitover streams with--profile open(the default) — the one vocabulary it links —deliverandinbox carriedover the inbox — a typed channel into a running process whose sender learns what the receiver did with each message — andsend,next,reply,subscribeandstatusover durable queues kept on a transport a configuration names — under a layout a linked schema bundle declares as data, or one a program links — withtransportslisting the kinds a transport can be,askraising a question and waiting for the one reply that echoes its correlation,validatejudging a record by a queue's validators before anything is sent, andserveanswering a a configured member protocol's frames. The local transport keeps each queue as plain files in one directory, and a distributed one is a plugin rather than a consumer change.
Install the command line
pip install onemessagebus-cli # PyPI wheel, no toolchain needed
npm install -g onemessagebus-cli # npm launcher, no toolchain needed
cargo install --git https://github.com/nickderobertis/onemessagebus onemessagebus-cli --locked
$ echo '{"note":"hello"}' | onemessagebus events emit run.ndjson --kind note-left --stream s-1 --source billing --label tenant=acme
{"v":1,"ts":"2026-09-13T06:16:27.838Z","stream":"s-1","seq":1,"source":"billing","kind":"note-left","labels":{"tenant":"acme"},"payload":{"note":"hello"},"artifacts":[]}
$ onemessagebus events merge run.ndjson other.ndjson --filter '{"include":[{"source":"billing"}]}' --format text
$ onemessagebus schema check onemessagebus.transport-hello@1 --file hello.json
docs/cli.md is the whole command line; docs/wire.md
is the wire; docs/contract.md is the approved contract the
consumers restate from.
Use the library
use onemessagebus::{Emitter, Filter, Labels, Matcher, Open, Source};
use serde_json::Map;
let emitter = Emitter::<Open>::new("billing-1", Source::from("billing"), Box::new(std::io::stdout()))
.with_labels(Labels::new().with("tenant", "acme"))
.with_filter(Filter {
include: Vec::new(),
exclude: vec![Matcher::new().kind("heartbeat")],
});
let envelope = emitter.emit("invoice-issued", Map::new());
assert_eq!(envelope.seq, 1);
Every wire value is a Rust type with serde and schemars derivations, and
the public API is stated in docs/contract.md.
Use the SDKs
pip install onemessagebus # Python: import onemessagebus
npm install @onemessagebus/sdk # TypeScript
Both are typed clients over the binary — one method per verb, message types
declared as a Pydantic model or with Zod's defineMessage, subscriptions over a
resident core — so a message defined in Python is validated by the Rust core and
read typed in TypeScript. docs/sdk.md is the whole story.
Develop
just bootstrap # from a clean clone
just check # the deterministic gate: format, lint, tests incl. the binary journeys, docs, coverage
just gate # check plus the diff-scoped LLM-judge tier; the bar before a push
AGENTS.md is the instruction layer; just --list is the command surface.
Metadata
Release files for onemessagebus-cli 0.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| onemessagebus_cli-0.9.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| onemessagebus_cli-0.9.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| onemessagebus_cli-0.9.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| onemessagebus_cli-0.9.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| onemessagebus_cli-0.9.0-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 20.1 MB
Release files / onemessagebus_cli-0.9.0-py3-none-win_amd64.whl
| Download URL | onemessagebus_cli-0.9.0-py3-none-win_amd64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2183d4291d3b9f50bba5b408683310634ea7370727bdd040b9a0d3794a712391
|
|
BLAKE2b-256 checksum How to use checksums |
d1dc7132051671bcda5427ddae05af15e61d1c4513eb713cc70061a17722c990
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / onemessagebus_cli-0.9.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | onemessagebus_cli-0.9.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
9778887a6bc4f6248cc672871ce7511f44baa9316311a4f211b6af76f0640398
|
|
BLAKE2b-256 checksum How to use checksums |
91b82174485915dcffacb62307b931ac7a1675c9818942718c88dca63725ac6c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / onemessagebus_cli-0.9.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | onemessagebus_cli-0.9.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.9 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
8de2cb85bf5224d8e19ef5a7ea427ac5fdc76799f9363a09be05f876d52bcef2
|
|
BLAKE2b-256 checksum How to use checksums |
511954afe8b69b347afadcecdaa8b36fd4b21add05a6b978010af5c961fbe65d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / onemessagebus_cli-0.9.0-py3-none-macosx_11_0_arm64.whl
| Download URL | onemessagebus_cli-0.9.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
aadc47ac39deba483ca72ffb70a6f712dc0a3798fe510d6dc2ecd480193102c5
|
|
BLAKE2b-256 checksum How to use checksums |
757fa6fafe2addf90de5bc2b6adfdc7fd784cd604d3241a658edb93167ee122b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / onemessagebus_cli-0.9.0-py3-none-macosx_10_12_x86_64.whl
| Download URL | onemessagebus_cli-0.9.0-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
54a46e4e17026175834abe9edcb453143ae38c2e31ee96b9cafa336af7bf9d89
|
|
BLAKE2b-256 checksum How to use checksums |
b1c01eb3a63361cbf2e3e5cb757732234a3dcae789a2f434117bf6813dbbb076
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|