One rule per table decides who can read a row
The database enforces it, not your code
Your app gets its own users
Projects cannot see each other's data
Tables, documents, files and search
An admin table you can run support from
Licence keys, checkout and payouts included
Nothing to provision. Nothing to connect.
SEC.01THE RULEFOUR VALUES, ONE PER TABLE
Nothing in that query says
“belonging to me”.
It does not have to. A table whose rule is owner returns
that caller's rows and nothing else — for every route, every query, and
the endpoint somebody adds next year and forgets to filter. The rule
belongs to the table, so it applies everywhere the table is read.
APP.JS
@authsy/client
// your app's own users, your app's own rows
import { createClient } from '@authsy/client';
const authsy = createClient(host, 'lsk_…');
await authsy.auth.signUp({ email, password });
await authsy.from('notes').insert({ body: 'mine' });
const { data } = await authsy.from('notes').select();
// → only theirs. Sign in as somebody
// else and find nothing.
What that returns
Their rows, and no others
The same call, signed in as somebody else, comes back empty. Not
filtered down to empty — never read in the first place, because the
rule is checked where the row is decoded rather than in a predicate
the query had to remember to carry.
Read the client library docs
Value 01
none
Nothing reaches a client. Server-side work only — the table is not readable through the API at all.
Value 02
owner
Each caller sees the rows they own. It stays fast as the table grows, because the rest are never read.
Value 03
authenticated
Any signed-in user of this project. A signed-in stranger from another project is not one of them.
Value 04
public
Readable without signing in. Writing is still governed by the rule, so “public” never means “editable by anyone”.
Why it holds
Nothing to configure wrong
Access rules usually fail one of two ways: the rule is right but
something connects in a way that skips it, or the rule is right but a
new endpoint never goes through it. Neither can happen here. There is
one place a rule is applied, every read goes through it, and there is
no setting anywhere that turns it off.
Isolation between projects
A wall, not a convention
Two projects on one account cannot reach each other's data, even by
asking for a record by its exact id. Staging cannot read production,
a client's project cannot read another client's, and neither of those
depends on anybody remembering to keep them apart.
SEC.02ACCESS REVIEWMEASURED, NOT ASSUMED
It wears each identity
and writes down the answer.
“The rule looks right” is how access control fails. So the
access review does not read your rules back to you. It signs in as each
kind of caller in turn — nobody, a signed-in stranger, the person who
owns the row — and reports what each one was actually given. Nothing it
does is kept: the whole check is undone when it finishes.
What each kind of caller can do to a table whose rule is owner
| Caller |
Read |
Insert |
Update |
Delete |
| Case 01anonymous |
Deny0 rows |
Deny |
Deny |
Deny |
| Case 02signed-in stranger |
Deny0 rows |
Passown only |
Deny |
Deny |
| Case 03the row's owner |
Pass3 rows |
Pass |
Pass |
Pass |
Finding
rule_drifted
The rule on your canvas and the rule the live table is using are not the same. Editing a rule and not deploying it changes nothing, which is the safe direction — and still worth being told about.
Finding
not_deployed
A table exists on your canvas but has never been deployed. There is nothing live to review, and nothing live to leak.
Counted from
what is live, not what is open
Every number comes from what is actually live, not from what is open in an editor. A draft is a draft, and the review says so rather than counting it.
SEC.04AURADB ENGINETHE DATABASE, INCLUDED
The database comes
with the platform.
There is nothing to provision, nothing to connect and nothing to keep in
sync. Your projects, their users, their rows and their files all live in
one place, which is what lets a change that touches several of them
either happen completely or not at all.
What AuraDB Engine gives you
| Setup | None. No database to create, no connection string to paste, no credentials to rotate. It is running the moment your account is. |
| Durability | When a write comes back, it is saved. Not queued, not cached, not probably — saved, including through a sudden restart. |
| Access | Your access rules are applied by the database itself. Every read goes through them, so there is no path around them and no setting that disables them. |
| Isolation | Projects cannot reach each other's data. Staging cannot read production, and one client's project cannot read another's. |
| Backups | Take a copy at any time, without stopping anything and without a maintenance window. |
| Portability | Export a project whole — its structure and its data — and import it somewhere else. Nothing you store is trapped here. |
| Self-hosting | Run the whole platform yourself: one service and one directory to back up. It is MIT licensed. |
What that means day to day
Fewer moving parts to get wrong
Most of the work in standing up a backend is not the code — it is the
database you have to create, the credentials you have to store, the
pool you have to size, the migration you have to run, and the second
service you have to keep alive next to the first.
None of that exists here. You draw what you want, deploy it, and it is
there. When you need to move, the whole project exports and imports
again, so choosing us is not a door that locks behind you.
See how a project is built
SEC.05PRICINGBILLED ON PEOPLE WHO SHOWED UP
Monthly active users.
Not keys issued.
Licence keys are unlimited on every tier, including the free one, because
counting them would charge you for the ones nobody redeemed. Top up in
packs when you run out, and plans lapse back to free on their own rather
than failing closed on your users.
Tier 00
Free
$0/ month
- 2,000 monthly active users
- Unlimited licence keys
- Every row rule
- Access review
Start →
Tier 01
Indie
$9/ month
- 10,000 monthly active users
- Unlimited licence keys
- Custom domains
- Authsy Pay checkout
Choose indie →
Tier 02
Studio
$29/ month
- Higher monthly active users
- Unlimited licence keys
- Team members
- Webhooks and audit log
Choose studio →
Tier 03
Scale
$99/ month
- The largest included allowance
- Unlimited licence keys
- Payouts and earnings
- Priority support
Choose scale →
SEC.06QUESTIONSANSWERED HERE
Q/01
What happens when an endpoint forgets to filter?
Nothing, which is the point. The filter was never the mechanism — the rule on the table is. An endpoint that asks for a whole table and forgets to narrow it gets back exactly what its caller was allowed to see, which on an owner table is that caller's own rows and no more.
Q/02
How do I know the rules do what I think they do?
Run the access review. It signs in as each kind of caller in turn — nobody, a signed-in stranger, the person who owns the row — and reports what each one was actually given. It tells you what happened rather than that a rule exists, and it measures what is live rather than what is open in an editor. Nothing it does is kept.
Q/03
Do I have to set up a database?
No. It comes with the platform and is running the moment your account is. Nothing to create, nothing to connect, no credentials to store and no second service to keep alive next to the first.
Q/04
Is the licensing product separate from the platform?
Same account, same project, reached as a section rather than a second dashboard. You choose what a project is for when you create it, so a licensing project opens on licensing and a backend project never shows you a payments panel you did not ask for.
Q/05
Can I run it myself?
Yes. The whole platform is MIT licensed and self-hosting is one service and one directory to back up. You can also start hosted and move later — a project exports whole, with its structure and its data.
Empty account to working app in twenty minutes.
Ending with the part where you sign in as somebody else and find nothing.