Plexivo Postgres as a backend
One Plexivo Postgres gives your app a database, user sign-in, a Data API, realtime updates, GraphQL with live queries and Functions.
Build a web or mobile app without writing or running a backend server. One Plexivo Postgres database gives you everything below, in Mumbai. Your data stays in ordinary PostgreSQL tables that you can query with SQL, join, index and back up.
Security comes from the database#
Every request from your app carries the publishable key and, once someone signs in, their token. Plexivo runs the request as that user, and PostgreSQL row-level security decides which rows they may read and write. The same rules apply to the Data API, Realtime and GraphQL.
It is secure by default: a table is reachable only once row-level security is on and it has at least one policy. A view is reachable only if it runs with its caller’s rights, and a database function only when you mark it @expose.
In policies, auth.uid() is the signed-in user’s id, and auth.jwt(), auth.role() and auth.email() give you the rest. Requests run as the anon role before sign-in and as authenticated after it.
Keys#
- Publishable key
- Starts with
plx_publishable_. Safe to ship in your web or mobile app. - Secret key
- Starts with
plx_secret_. For your servers only: it bypasses row-level security and can run SQL. Never put it in a browser or app bundle.
Both are shown once, when you turn on the Data API; keep the secret key in Plexivo Secrets. Rotate either key on the database’s Authentication tab.
Auth#
Your app’s users live in your own database. Email sign-in is on from the start; turn on social sign-in and guests in Authentication → Sign-in methods.
- Email and password, with password recovery by emailed code.
- Email one-time codes, for sign-in without a password.
- Google, GitHub and Microsoft, through your own OAuth apps.
- Guests who can later add an email and keep the same account.
- Authenticator-app two-step verification, sessions on each device you can list and end, and organisations with roles and invitations.
Access tokens last one hour and are refreshed by the client libraries for you. Moving users from Supabase, or from any export with bcrypt password hashes, keeps their passwords working.
Data API#
Turn it on from the Connect tab with Turn on Data API, and give the web address your app runs on as the Allowed web origin. You get a Project URL such as https://api.plexivo.io/client/v1/data-….
- Read with filters, ordering, pagination, counts and related rows; write with insert, update, upsert and delete, and run several writes in one transaction.
- Call your own SQL functions marked
@expose. - Up to 1,000 rows per request. An update or delete must say which rows it touches.
Each plan includes a monthly number of Data API requests per database.
Realtime#
Turn on Realtime for a table on the Data API tab. Clients subscribed to it receive every insert, update and delete they are allowed to read, including changes made directly with SQL. Rooms add broadcast messages and presence, such as who is online; private rooms need sign-in.
GraphQL#
Your exposed tables and functions are also a GraphQL API at the project URL’s /graphql/v1, with queries, aggregates and mutations that run in one transaction. Live queries update as the data changes, for tables with realtime on. Try queries in the GraphQL tab’s playground.
Functions#
Plexivo Functions run your own TypeScript or JavaScript beside your data, for payments, emails and anything that needs a secret. A function can be called from your app over HTTPS, run on a schedule, or run when rows change or a user signs up. It can act as the calling user, so row-level security still applies, or with full access when it needs to. Secrets you give a function reach it as environment values.
Functions run in a Plexivo App Runner service that you create once, in your project, and that is billed as that app. The database’s Functions tab shows the Plexivo Functions image to use: create a public Plexivo App Runner service from it on port 8000, then choose it under Set up the runtime and select Connect runtime. A function runs for up to 10 seconds by default, and you can allow up to 60.
Start building#
Updated 27 October 2026