Security

The secure default is already enforced.

Slow repeated sign-in attacks, isolate every tenant, hash API secrets, and seal sensitive values at rest.

tenant · A
tenant · B
5 failed attempts -> temporary lockout
RLSrow-level tenant isolation
argon2idAPI secret hashing
60 · 300 · 1,000 · 5,000Free / Starter / Pro / Scale rpm
Built all the way through

More than a sign-in method.

Attack control

Repeated failures trigger lockout

Per-identifier brute-force protection temporarily locks repeated failed sign-ins.

Isolation

Tenant boundaries live in the database

Row-level security keeps each project inside its own data boundary.

Secrets

Credentials are not stored in plain text

API secrets are hashed with argon2id, while recoverable secrets are sealed at rest.

Developer experience

The enforced defaults, in plain sight.

security.txt
# tenant data
database_rls = enforced

# credentials and stored secrets
api_secret_hash = argon2id
secret_storage = sealed_at_rest

# sign-in protection
failed_attempts = temporary_lockout
api_rate_limit = plan_derived
What you get
API request limits come directly from the active plan.
User bans and custom session policies are available from Pro.
Lockout is per identifier after repeated failed sign-ins.
Plan availability

Included on every plan - Free through Scale.

FreeStarterProScale
See pricing

Start from a boundary you can trust.

Create a project with isolation, secret protection, and attack controls already in place.