Signet Sign in Sign up free

Logins for people and AI agents.Unlimited users and unlimited enterprise SSO for $299 a month, flat. Hobby is free, no card needed.

I built Signet for the day a big customer asks for SSO. You add their identity provider in settings and your bill stays the same. Every user, session and API key is a row in a database that’s yours.

Already on better-auth? Keep your client and change one URL.

auth-client.ts
  baseURL: "https://old-vendor.example.com",  baseURL: "https://auth.acme.com",

Herman Geldenhuys, GeldenTech Inc., Montreal. Signet’s own console signs in through Signet.

Signet Passport · Passeport No. SG0 000 001
TypeP
Issuer / ÉmetteurSGN
Issues papers toPeople · Services · Agents
Stored inPrivate database
Class / CatégorieTeam · $299 flat
Issued / Délivré
Expires / ExpireNever

Type your app’s name. The passport is drawn from it, so no two come out the same.

Who signs in

People, services and agents. Three kinds of access. One way to cancel any of them.

Boarding pass · Carte d’embarquement
PassengerOkonkwo / Ada
FromPasskey
ToACME
ClassOrg admin
Sessionses_8f2c41a9
Boarded09:41
Valid until
Session
Sessionses_8f2c
PassengerOkonkwo/Ada
Valid7 days
People

People get a session. End it and they are signed out.

A person signs in with a passkey, an email code or, on Team, their company’s SSO. Tear the session and its row is deleted outright. The audit log keeps who did it and when.

Signs Ada out on that device.
Services

Services get an API key. It works until you revoke it.

Your billing worker and your webhook relay carry API keys. They last until you give them an end date or revoke them, and revoking is one call.

Its next request is refused.
Service badge · Badge de service
Namebilling-worker
HoldsAPI key
Minted2026-04-11
Keysig_ak_3d91
ExpiryNone
VisaAgent · MandataireAGT 5K9 2QX
Namesupport-copilot
Acting forOkonkwo, Ada
Entry byMCP auth
Scopetickets:read · tickets:write
Issued
Expires in05:00
AI agents

Agents get a token that runs out within the hour.

An agent acts for one person, inside a scope you set, through MCP. Its token expires on its own even if nobody remembers to cancel it. A renewal is a new token, so you can cancel that one too.

This one is set to five minutes, the shortest Signet allows. It starts when you scroll to it.
RegistryWhat your database saw
  1. Nothing cancelled yet. Tear the boarding pass, void the badge, or wait out the visa.

In a real instance, all three are rows in your own database.

What ships today.

  • Email + password
  • Passkeys
  • Magic links
  • Email codes
  • Two-factor with backup codes
  • Social sign-in
  • Organisations + invitations
  • API keys
  • Device codes
  • MCP auth for AI agents
  • Agent tokens that run out within the hour
  • Session + token revocation
  • SAML + OIDC single sign-on
  • SSO certificate rotation in one call
  • SCIM with Microsoft Entra
  • Audit log that refuses edits

All of this works today. The product page marks the few features my tests don’t fully cover yet.

The sign-in page

What your users see.

Every Signet instance serves its own sign-in page at /login, with sign-up and password reset beside it. Send people there, or keep your own screens and call the same API with the better-auth client.

Signet’s sign-in page: email and password fields, a Sign in button, and links to create an account or reset a password.
A real instance’s /login page.
Enterprise SSO

The certificate changes. The connection stays. Your customer’s identity provider replaces its signing certificate. You make one call.

Identity providers replace their SAML signing certificates every few years. In better-auth’s SSO plugin there is no stock way to do that once people have signed in. You delete the connection and register it again. That unlinks everyone who signed in through it. With domain checks on, sign-in stays blocked until your customer publishes a new DNS record (issue 11471, open on 10 Oct 2026).

In Signet you send the new certificate in one call. The callback URL stays the same. The connection and its members stay, and nothing changes in DNS. The change goes into the audit log. Signet checks that the new certificate is in date before it accepts it.

Signet swaps the certificate. It never trusts the old one and the new one at the same time. So sign-ins through that connection fail between your customer’s switch and your call. Make the call right after they switch.

A real recording: Signet with a live Microsoft Entra tenant, 10 October 2026. Entra switches certificates, sign-in breaks, and one call fixes it. 1 min 52 s, narrated, with captions.

What I’ve checked, and when.

  • SAML sign-in and certificate rotation, driven against a live Microsoft Entra tenant on 10 Oct 2026.
  • A SAML round trip with Okta on 16 Aug 2026.
  • OIDC sign-in with multi-factor, driven against a live Microsoft Entra tenant.
  • Signet refuses an identity provider’s expired certificate by default.
  • SSO adds new members to an organisation only after the organisation proves its domain in DNS.
  • SCIM provisioning and deprovisioning with Microsoft Entra.
  • The audit log refuses edits, and you export it as NDJSON through the admin API.
Migrate

Move from better-auth. Your users keep their passwords and their sessions.

Keep the better-auth client you already ship and change one URL. User rows, password hashes and live sessions copy across, so nobody resets a password. If you roll back, every session issued before the cutover is still valid.

auth-client.ts
import { createAuthClient } from "better-auth/client" export const auth = createAuthClient({  baseURL: "https://old-vendor.example.com",  baseURL: "https://auth.acme.com",})

It’s the stock client: bun add better-auth. Tested against better-auth 1.6.23 on 22 July 2026.

Arrival cardNo. 0001
Travelling withbetter-auth client, the one you already ship
Coming fromold-vendor.example.com
PassengersAll your users
Passwords resetNone
If you roll backPre-cutover sessions stay valid
Pricing

One flat price. Add users and SSO connections. The price stays put.

Every enterprise customer brings its own SSO connection. Your fifteenth costs what your first did, which is nothing extra.

Enterprise customers, each with its own SSO
5
$a month eachat this many, a month
Signet Team$299a month, every month

WorkOS lists SSO at $125 per connection a month for the first 15 connections (workos.com/pricing, checked 4 Oct 2026).

Prices effective 2026-08-07. Team runs on a PostgreSQL database dedicated to you. Hobby is free and keeps your data in encrypted SQLite.

Schedule of dutiesTeam
  • Per user$0
  • Per SSO connection$0
  • Overage$0
  • Renewal true-up$0
  • Flat, monthly$299
Hobby$0
Team$299/mo
Business$999/mo
Scale · your metal$15,000/yr

Those lines stay at $0 because Signet doesn’t count active users at all.

Agreements

Ask for an NDA before sign-in. Keep a record of exactly what they accepted.

Attach an NDA, a licence or a pledge on personal data to an app that signs people in through Signet as its OAuth provider. Signet shows people the full text and lets them in only after they accept.

Signet’s agreement page: the heading Before you sign in to ACME Partner Portal, the agreement’s title, version and full text, the email address the person is signed in with, and two buttons, Accept and continue, and Decline.
What they see: a real instance’s agreement page. The record is what you keep.
Record of acceptance
Accepted bylou@acme.worker.email
AgreementACME partner NDA
Version1
SHA-256 of the text shownaa7ef4b7 00557c4f 8d3dcb31 af737cef
13b0b8fa 60b8d396 81226ae7 ed1d4c60
When, by the server’s clock13 Oct 2026, 11:30 UTC

Also kept: the app, the IP address and the browser.

  • Declining records nothing, and the person is not signed in. They can come back any time.
  • Publish a new version and Signet asks again at the next sign-in or token refresh. So does a renewal date, if you set one. The page says why.
  • Signet checks it wherever it issues a token for the app: browser sign-in, code exchange, device sign-in, refresh and signed assertions. Not only the login page.
  • List every record, or export it as CSV. A record stays even if you delete the person’s account.
  • Acceptance stays apart from OAuth consent. Consent is what the app may read. The agreement is the person’s own word. Revoking consent removes no acceptance.

It is a record, not legal advice: I can’t tell you whether a click is enough for your agreement.

Security

Anything to declare? Yes. Four things I don’t have yet.

Your security reviewer would find these anyway, so here they are up front.

If one of them rules Signet out, you should know now and not six weeks into a review. The vendor pack has the rest on one page: legal entity, subprocessors and how to leave.

Every instance, yours included, publishes its own test results at /certification. The security page tracks what’s still missing.

DeclarationForm SGN-1

Do you have anything to declare?

Yes No

We declare:

  • No compliance report or certification, and no third-party penetration test yet.
  • No uptime SLA outside a signed contract.
  • You can’t yet make SSO the only way in for a domain. A person with a password can still sign in with it.
  • The OAuth provider does not claim full OpenID Connect conformance.
Declared byHerman Geldenhuys · Montreal
Date2026-10-10
Leaving

Leaving takes one command. On PostgreSQL, one pg_dump exports every user, session and secret.

Hosted, you ask and I hand you the file. On your own servers you run it yourself. Hobby uses encrypted SQLite, which takes one more step: the export guide.

  • Nothing phones home, and licences are checked offline.
  • No sign-in ever calls our servers.
The whole exit, on PostgreSQL
pg_dump --no-owner "$SIGNET_DATABASE_URL" > signet.sql

Start free on Hobby.

Sign up and your instance is running in a few minutes, no call needed. Want Signet on your own servers? That’s an enterprise licence, and you’ll talk to me directly.