(Nautilus · Sign-in and users)

Sign-in and users for your SaaS Open-source Ory Kratos, run for you. Headless, so the screens stay yours.

Registration, login, password recovery, email verification and two-factor, as API calls. You draw the screens; Nautilus runs what sits behind them: sessions, ten login providers, organizations with roles, signed webhooks, an audit log and a dashboard for your users. It is the Ory Kratos you could host yourself, minus the Docker setup, the database and the upgrades.

curl -X PATCH https://api.vernesoft.com/v1/gate/identities/id_12345/metadata \
  -H "Authorization: Bearer vrn_•••" \
  -H "Content-Type: application/json" \
  -d '{"role":"admin","subscription_tier":"pro"}'

(Build it or host it)

Rolling your own sign-in is a liability. Hosting Keycloak is a job.

Email and password looks like a day of work. Then come recovery by email, verification, a second factor, Google and GitHub login, and a way to end a session you already issued. Writing all that is one cost. Hosting a general identity server such as Keycloak is another: the service, its database, the upgrades, and someone on your team who understands it when it breaks.

Build it or self-host it

  • ✕ Registering OAuth apps with ten providers and mapping each one's claims into one user record.
  • ✕ Building recovery, verification and backup-code flows, then keeping them correct.
  • ✕ Mirroring users between the identity server and your own database, and chasing the drift.
  • ✕ Checking the database on every request to see whether a session was revoked.
  • ✕ Adding organizations and roles: the tables, an invite flow, and a permission check copied into every service.
  • ✕ A cleanup script for accounts nobody opens again, and the warning email that has to go out before it runs.
  • ✕ Or hosting it: Keycloak or Ory Kratos means a service, a database, upgrades and, with Kratos, an admin screen you still have to write.

With Nautilus

  • ✓ Ten login providers, switched on or off from the dashboard or the API.
  • ✓ Recovery, verification and settings flows as API calls.
  • ✓ A JSON field on every user for your own data, changed with one PATCH.
  • ✓ Signed webhooks for sign-ups, logins and account changes, with retries and a delivery log.
  • ✓ Open-source Ory Kratos, run for you, with a dashboard and API keys from day one.
  • ✓ Organizations with roles; the user's roles ride in a signed token you verify offline, or you ask with one call.
  • ✓ Rules that delete unconfirmed and unused accounts after a warning email.

(Core Features)

Everything behind the login screen

(01)

Automatic deletion of inactive accounts

Four rules per project, each off until you switch it on. Unconfirmed accounts are deleted after the delay you set. On Pro and Advanced, so are accounts that have not signed in for 1 to 120 months, and you also get a reminder to confirm and deadlines on roles. Every deletion follows a warning email and never comes before the date in it. A preview tells you how many people a rule would touch today. People who sign in only with Telegram have no email address, so they are left alone unless you say otherwise.

Read the GDPR guide

(02)

Organizations, roles and permission checks

Group your users into organizations, define named roles with permissions in each, and give a user a different role in every organization they belong to. Nautilus keeps the data and answers one question with one call: may this user do this here? It does not enforce anything; your code does. You manage it through the API, and the dashboard has no screen for members yet. Included on every plan.

(03)

Signed tokens with the roles inside

Ask for the signed form of a session and get a token, valid for 15 minutes, that anyone can verify offline against your tenant's public keys. It lists the user's organizations, each with the role's name and its permissions, so a database policy or an API gateway can decide without calling Nautilus. It cannot be revoked: a role you remove can live on in a token already issued until it expires, and for anything that must be exact, authorize and introspection read live. A token holds the first 10 organizations and flags when the list is cut.

(04)

An audit log you read through the API

Who created or revoked a key, changed a setting, gave or took away a role, and which of your users signed in or changed a password, with the address and user agent. Nothing can edit an entry or delete it early. An action and its entry succeed or fail together; sign-ins are written a moment later, when the identity service reports them. Kept 7 days on Free, 30 on Pro, 90 on Advanced; you can shorten the window, not lengthen it. Failed sign-ins and Telegram sign-ins are not recorded.

(05)

Login with Google, GitHub and eight more

GitHub, Google, GitLab, Microsoft, Discord, Facebook, LinkedIn, Slack, Twitch and Spotify. Switch each on per account; Nautilus holds the OAuth apps, so you register nothing with the providers. Claims come back mapped to one user shape.

(06)

Two-factor and passwordless codes

Authenticator-app codes with backup codes, switched on per account. When you require them, the gateway refuses a session that skipped the second step. Or drop the password: a one-time code by email, valid for 15 minutes.

(07)

Sessions you can see and end

List a user's active sessions with the IP address and user agent of each device, when Kratos could detect them. End one session, or every session of an identity, with a single call.

(08)

A JSON field on every user

Keep a plan name, a company or an onboarding flag on the user. A PATCH merges what you send and leaves the rest alone. The user can read it, so no secrets, and Nautilus does not enforce what you put there.

(09)

Signed webhooks, retried

Sign-ups, logins, password changes, email verification, deactivation and deletion go to your endpoint, signed with the Svix scheme. Failed deliveries get up to eight attempts over about 28 hours, and every attempt is logged and can be resent from the dashboard.

(10)

Recovery and verification flows

Password recovery, email verification and settings changes run as short API flows: start one, submit the code or the new value. You render the form; Nautilus sends the email and checks the answer.

The admin UI for Ory Kratos

(One Product)

Sign-in is one part of one account

Webhooks, cron jobs and Telegram sign-in sit behind the same account and dashboard. In practice that means sign-in events reach your server through the same signed delivery as any other webhook, and each API key carries only the scopes you tick, so the key your login service holds cannot schedule jobs or send webhooks.

Your app starts a sign-upNautilus creates the userSigned webhook to your server

(Developer Experience)

One HTTP call, five ways to write it

The tabs show the same request in curl and in the Node, Python, PHP and Rust SDKs. The tenant comes from the API key, so you never pass an account id.

curl -X PATCH https://api.vernesoft.com/v1/gate/identities/id_12345 \
  -H "Authorization: Bearer $VERNE_GATE_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    { "op": "replace", "path": "/traits/locale", "value": "fr" }
  ]'

(How We Compare)

Choosing between providers?

Four pages set Nautilus next to Auth0, Clerk, Ory Network and Logto: who should pick them, who should pick us, their prices with the date we checked them, and where their data lives. The pages are in English.

(FAQ)

Frequently Asked Questions

Is this a drop-in replacement for Keycloak?

No. Keycloak is a general identity server with SAML, LDAP federation, themeable login pages and an admin console. Nautilus does one narrower job: sign-in and user accounts for the customers of a SaaS product, behind an HTTP API with no screens of its own. If you need SAML or single sign-on for enterprise customers, keep Keycloak. If what you run it for is password login, Google and GitHub, recovery, two-factor and the roles inside your customers' organizations, this is the part you can stop hosting. Organizations, roles and members are managed through the API, and the dashboard has no screen for members yet. A user's roles come back in the signed token, in token introspection and in the session check.

Do I still have to build login screens?

Yes, the screens. Nautilus returns each step as an API response and your code submits what the user typed, so the forms look like the rest of your product. What you stop building is everything behind them: password storage, recovery and verification emails, sessions, provider logins. If you want a hosted login page you can theme, Keycloak has one and this does not.

How do I verify a webhook?

Every delivery carries svix-id, svix-timestamp and svix-signature headers: an HMAC-SHA256 signature over the id, the timestamp and the raw body. Check it with the official open-source Svix library, which exists for Node, Python, Go, Rust, PHP, Java, Ruby, C# and Kotlin, rather than writing the check yourself. Failed deliveries are retried and can be resent from the dashboard.

What does it cost?

Free up to 1,000 active users a month, no card. An active user is someone who signs in at least once in a calendar month, however many times; people you create through the API who never sign in are not counted. Pro is €99 a month for 10,000 active users and Advanced €199 for 50,000. Roles and organizations come with every plan, Free included, and the audit log is kept for 7, 30 or 90 days by plan; neither is an add-on with its own price. Past your limit sign-in is never blocked: you are emailed at 80% and 100%, and you get time to move up before new registrations are refused. The current list is on the pricing page.

What is running underneath?

Ory Kratos, the open-source identity server, as one shared deployment for all accounts. The dashboard, the API keys, the webhooks, organizations and roles, the signed tokens and the check that keeps one account's users away from another's are ours, on top. The trade-off of sharing it: the user schema is fixed to an email, a locale and your JSON field, and you cannot change Kratos's own configuration. The engine is open, so if you outgrow that, the same software runs on your own servers. The layer we built on top does not come with it. To move elsewhere, ask support for an export of all your users with their password hashes, social links, metadata, organizations and roles: you get one encrypted file within 7 days, in a format our own import accepts and that maps onto Ory Kratos.

Where is identity data stored?

Identities, sessions and your custom metadata are stored in databases on our own servers in France, at OVHcloud. Outgoing email, such as sign-in and recovery codes, is delivered through Resend, a US provider, under the European Commission's Standard Contractual Clauses.

How do roles and permission checks work?

You create an organization, define roles in it (a role is a name and a list of permissions such as invoices:write), and add a user to the organization with one role. To check, call authorize with the user, the permission and the organization: you get allowed or not, with a reason and the role. Or read the roles from the signed token and let your database policy decide. Permissions are matched exactly, with no wildcards. A role that someone holds cannot be deleted until they are moved. A membership can carry a deadline and be removed by a rule when it passes. Every change to a role or membership is in the audit log.

What does it not do?

No SAML or enterprise single sign-on, no hosted login page, no prebuilt components, no passkeys, no SMS codes and no Sign in with Apple. It is not an OAuth or OpenID provider for third parties: the signed token is there to be verified, and Nautilus has no authorization endpoint. The emails we send for you come from Verne's address and are written in your user's language (six languages, from the user's locale). Official SDKs cover Node, Python, PHP and Rust.

How does it compare with Auth0, Clerk, Ory Network or Logto?

There is a page on each, with their prices from their own sites and the date we checked. In short: they are ahead on prebuilt screens, enterprise single sign-on and the number of sign-in methods. We are ahead on rules that delete unused accounts, on roles and organizations without an add-on price and, compared with Clerk, on where the data sits. Read the pages, then decide. The pages are in English.

(Get Started Today)

Keep your login screens. Drop the server behind them.

Registration, login, recovery and two-factor for your customers, from one HTTP API. Create an account and your first 1,000 active users every month are free.

What you keep

Auth is where dependence usually starts, because whoever owns the user record ends up shaping the data model around it. Nautilus does not ask for that. Who can sign in lives here; your customers' records, orders and everything else stay in the Postgres, MySQL or Mongo you already run. There is no schema of ours for your tables to fit.

Underneath is Ory Kratos, open source and unmodified. We run the server and the upgrades, and we keep that deployment deliberately boring, but the engine is one you could run yourself. We name the engine rather than hide it. To move elsewhere, ask support for an export of all your users with their password hashes, social links, metadata, organizations and roles: you get one encrypted file within 7 days, in a format our own import accepts and that maps onto Ory Kratos.

It runs on our own servers in France, which is the first question many European buyers ask. The free plan covers 1,000 active users a month with no charge per request, so an afternoon is enough to find out whether this fits the stack you already have.