Crew · Open source

We write the clients for the components we operate.

Close to fifteen thousand lines of published Rust, on two components we run every day: the operating system of our clusters and the SQL engine of our data platforms.

Organisation account
github.com/nudibranches-tech
Published volume
close to 15,000 lines of Rust
Licences
MIT OR Apache-2.0 · Apache-2.0
Distribution
crates.io (talos-rust-client)
Language
Rust

Why

You only operate well what you understand.

Writing the client for a component you run is not a stylistic exercise. It is the only way to know exactly what the machine receives, what it returns, and what happens when it stops answering. An abandoned third-party client puts understanding of a critical component out of reach at the very moment it becomes necessary: during the incident.

The cost is real, and it compares. On these two components, writing the client cost less than working around the existing one indefinitely — and something public is left over, which our clients can read, fork and have audited.

Publications

The repositories, one by one.

talos-rust-client

A gRPC client for Talos Linux: mTLS by default, a typed API generated from SideroLabs' official proto files.

Talos Linux drives the operating system of our clusters, and its API is only reachable over gRPC under mTLS. The client is generated from the official protos rather than hand-written: the types follow upstream, and an API break shows up at compile time. It is published on crates.io under the MIT OR Apache-2.0 dual licence — the Rust ecosystem convention, which leaves the choice to whoever reuses it.

Size
8,316 lines of Rust · 14 files
Licence
MIT OR Apache-2.0
Our role
Written and maintained by our engineers. Published on crates.io.

github.com/nudibranches-tech/talos-rust-client

s0

An S3-compatible authorization gateway that applies an OPA/ABAC policy to every request before re-issuing it to storage under a per-tenant identity.

The native access control of object storage stops at the bucket and the key. Our clients need to decide by attribute — who, from where, on which object, at what time — and to keep one named audit trail whatever the backend. So s0 terminates the S3 protocol itself: the request is deserialized into a typed value, an OPA decision is made on that value, and the same value is re-issued to storage under a per-tenant identity. Of the 99 protocol operations, 23 are enforced and 76 refused; there is no third category, and a test fails if the operation table and the documentation drift apart.

Size
30,980 lines of Rust · 68 files
Licence
BUSL-1.1 · Apache-2.0 au 18 août 2030
Our role
This is not a byte proxy with an authorization hook bolted on: the request is deserialized into a typed value, the decision is made on that value, and the same value is re-issued to storage. Of the 99 protocol operations, 23 are enforced and forwarded, 76 refused — there is no third category. A test fails if the table and the documentation drift apart.

github.com/nudibranches-tech/s0

talos-rust-client

A gRPC client for SideroLabs Talos, with mTLS by default and a typed API generated from the official proto files.

Talos Linux drives the operating system of our clusters, and its API is only reachable over gRPC under mTLS. The client is generated from the official protos rather than hand-written: the types follow upstream, and an API break shows up at compile time. It is published on crates.io under the MIT OR Apache-2.0 dual licence — the Rust ecosystem convention, which leaves the choice to whoever reuses it.

Size
8,316 lines of Rust · 14 files
Licence
MIT OR Apache-2.0
Our role
Talos has no shell: you do not log into it, you talk to it. We needed this client to operate our clients' clusters.

github.com/nudibranches-tech/talos-rust-client

trino-rust-client

A Trino client for Rust, with authentication and the spooling protocol.

Taken over from prusto in December 2024. Presto support was removed, which allowed us to follow Trino without compromise, and the spooling protocol was added: without it, a large result set transits through the coordinator and saturates it. That is the feature that decides whether a data platform holds up under load, and it was the missing one.

Size
6,374 lines of Rust · 45 files
Licence
Apache-2.0
Our role
Written and maintained by our engineers. Used in production inside Hyperfluid.

github.com/nudibranches-tech/trino-rust-client

Ferris Key

An authentication and identity management server, written in Rust.

We are not its maintainers: we contribute to the project and sponsor it, because identity is the component every other one depends on, and we would rather it stayed free software.

Size
contribution and sponsorship
Licence
Apache-2.0
Our role
A community project we contribute to and sponsor.

github.com/ferriskey/ferriskey

Scope

Support and CVE monitoring, repository by repository.

Three answers decide a production rollout: who maintains it, under which licence, and who owes the fix.

Scope of support and CVE monitoring for each repository we publish or sponsor.
RepositoryMaintainerSecurity fixesCVE monitoring
talos-rust-clientOur engineers. The repository sits under our organisation.Published on the public repository and on crates.io. No contractual deadline outside a support contract.Provided for clients under a support contract, if the component is listed in the scope annexed to that contract.
s0Our engineers. The repository sits under our organisation.Published on the public repository. No contractual deadline outside a support contract.Provided for clients under a support contract, if the component is listed in the scope annexed to that contract.
talos-rust-clientOur engineers. The repository sits under our organisation.Published on the public repository and on crates.io. No contractual deadline outside a support contract.Provided for clients under a support contract, if the component is listed in the scope annexed to that contract.
trino-rust-clientOur engineers. The repository sits under our organisation.Published on the public repository. No contractual deadline outside a support contract.Provided for clients under a support contract, if the component is listed in the scope annexed to that contract.
Ferris KeyIndependent upstream maintainers. We contribute to the project and sponsor it.Decided upstream. We control neither their content nor their release date.Monitoring is possible under contract. The fix depends on upstream: we do not commit to it.

Outside a contract, these repositories are provided as is: that is what the licence says. Under an open source support contract, the list of covered components is annexed to the contract, with covered hours, response targets and resolution targets according to how critical the component is — and it is that annex that governs. §

See the “open source support” model

What the licence gives the client

Three guarantees a closed supplier cannot give.

The three guarantees our clients ask for most often — being able to verify, being able to leave, being able to carry on without us — cannot be given by a supplier who keeps its code closed. A reversibility clause is worth whatever the company that signed it is worth; a permissive licence, once granted, no longer depends on us.

Auditability
You read what you run. A CISO qualifying a component does not have to take our word for it, and can have the code reviewed by a third party of their choosing.
Reversibility
The licence leaves you the right to use, modify and redistribute, including after the commercial relationship ends, and including against us.
Independence from our survival
If the company disappears, the code remains and stays usable by someone else. It is the only continuity guarantee a company this size can honestly give, and it makes a source-escrow clause pointless on these components.

Go and look

The code, and the people who write it.

The repositories are public and outside contributions are read. If you are looking for a support contract covering your open source stack — Kubernetes, Talos, PostgreSQL, Trino, Ceph, Kafka, Keycloak and the rest — the engagement models page describes its scope.