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.
Account
Self-service: what a user changes about themselves, with no administrator and no permission.
Portal
Themes and layouts for the public authentication pages a realm renders.
Maintenance
Close a client to everyone but a whitelist, without touching its configuration.
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.