Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Client Libraries Overview

API Reference — This section is for developers consuming Akāmu’s HTTP APIs or using the Rust client libraries. It covers the Admin REST API, ACME protocol wire formats, and the akamu-jose / akamu-client / akamu-cli SDK. If you are deploying or operating the server, see the Operator Guide. If you are contributing to Akāmu itself, see the Implementation Guide.

The Akāmu repository ships three standalone crates in addition to the server binary. They were extracted from the server so that external Rust applications can speak ACME without pulling in the full server stack.

CrateWhat it provides
akamu-joseRFC 7517/7515 JWK/JWS primitives, key thumbprints, ML-DSA signatures
akamu-clientFull RFC 8555 ACME client lifecycle (async, tokio + hyper)
akamu-cliEnd-user CLI wrapping akamu-client

Crate dependency graph

graph LR
    CLI["akamu-cli"]
    CLIENT["akamu-client"]
    JOSE["akamu-jose"]
    SYNTA["synta-certificate"]

    CLI --> CLIENT
    CLIENT --> JOSE
    JOSE --> SYNTA

The server binary (akamu) also depends on akamu-jose directly; its src/jose/ module is a thin re-export layer.

When to use which crate

Use akamu-jose when you need only cryptographic primitives: JWK parsing, JWS signing/verification, thumbprint computation, or algorithm support. It has no HTTP or database dependencies and compiles quickly.

Use akamu-client when you want to drive the full ACME protocol from Rust code — account registration, ordering, challenge solving, finalization, and certificate download. It brings in tokio and hyper but nothing database-related.

Use akamu-cli when you want a command-line tool and do not want to write Rust. It wraps akamu-client and exposes register, issue, and deregister subcommands.

Getting started

Add crates to your Cargo.toml

[dependencies]
# ACME client + JWK/JWS:
akamu-client = { path = "/path/to/akamu/crates/akamu-client" }

# Or just the crypto primitives:
akamu-jose = { path = "/path/to/akamu/crates/akamu-jose" }

Verify the build

cargo build -p akamu-jose
cargo build -p akamu-client

Further reading