FerryDocs
ArchitectureOverview

The crates

Ferry is a Cargo workspace of ten crates whose dependencies go in one direction.

Edit on GitHub

A is a package of Rust code. The dependencies go one way. Thus you can build and test each crate alone.

CrateKindRole
ferry-coreLibraryThe shared types and the store. It depends on no other Ferry crate.
ferry-dockerLibraryControls containers through the Docker Engine API.
ferry-buildLibraryChanges source into an image.
ferry-scmLibraryThe git providers: GitHub and GitLab.
ferry-proxyLibraryThe public edge: routes, load balancing, TLS.
ferry-tlsLibraryAutomatic HTTPS certificates.
ferry-engineLibraryThe engine: deploys, reconciler, cron, datastores.
ferry-apiLibraryThe REST API and the dashboard.
ferry-cliProgram ferryThe command-line client.
ferrydProgramThe server. It connects the other crates.

Traits keep the crates apart

ferry-api never depends on ferry-engine. It holds an Arc<dyn Engine> and calls the from ferry-core. In the tests of the API, a mock that records the calls replaces the engine.

The proxy calls ferry-tls through the TlsHooks trait in the same way. Only ferryd knows the engine, the proxy, the API and ferry-tls together.

On this page