Modules
FerrisKey is a collection of modules. Each one owns a piece of identity management and can be read, configured, and extended on its own.
Trident
Multi-factor authentication: TOTP, WebAuthn passkeys, magic links, and recovery codes.
SeaWatch
Audit and security events: every critical action across your realms, queryable.
Compass
Authentication flow recording: which step broke, and how long each one took.
Abyss
Identity provider federation: Google, GitHub, Discord, and custom OIDC providers.
Aegis
Scopes and protocol mappers, deciding exactly what goes into a token.
Webhooks
Event-driven integrations: subscribe to lifecycle events and push them outward.
Organizations
B2B tenancy: organizations, groups, membership, roles, and custom attributes.
SAML
FerrisKey as a SAML 2.0 identity provider, for applications that speak nothing else.
How a module is built
A module lives either as a domain module under core/src/domain/, close to the core, or as its own crate under libs/ when it is worth testing and versioning separately. Several are in the middle of moving from the first to the second.
Either way the shape is the same, and it follows the hexagonal architecture: the business logic is pure, its dependencies arrive through ports, and the infrastructure sits at the boundary. ferriskey-api-* crates carry the HTTP layer for the modules that have been extracted.