Why can't I just use localStorage?
localStorage lives in one browser on one device. It disappears when the user clears site data, it never reaches their phone, and your app cannot tell whose data it is. It is fine for a theme preference; it is not a place to keep notes, orders or saved work.
What do you normally have to build instead?
Storing data per user usually means a server, a database, a users table, login and sessions, email verification, password reset, and a CRUD API that checks on every request that the caller owns the row. That is days of work before your first real feature.
How does Neuctra Authix do it without a server?
Your frontend talks to the Neuctra Authix API with an API key. The server resolves who is signed in from an HttpOnly session cookie and pins every data request to that user, so it is safe to call from a browser or a mobile app.
- Private records per user: notes, settings, drafts, carts, saved items.
- Shared app data for everyone: products, posts, announcements (server key).
- Categories instead of tables, and search by text or JSON field.
- Optimistic versioning so two tabs can't silently overwrite each other.
How do you get started with Neuctra Authix?
- 1
Create an app
Sign up for a free Neuctra Authix account and create an app in the dashboard to get an app ID and an API key.
- 2
Install the SDK
Install the JavaScript, Python, or Dart SDK on your backend and create a server-side client with your app ID and account API key.
- 3
Sign users up and in
Call signupUser and loginUser. Sessions are handled with an HttpOnly cookie, and email verification and password reset are built in.
- 4
Store data for each user
Verify the visitor in your backend, derive their user ID from that session, and use it for Authix user data operations.
import "server-only";
import { NeuctraAuthix } from "@neuctra/authix";
const authix = new NeuctraAuthix({
appId: process.env.AUTHIX_APP_ID,
apiKey: process.env.AUTHIX_API_KEY,
});
// In a backend route, first authenticate the visitor with your app's session.
const userId = await requireAuthenticatedUserId(request);
// Then pass only that verified id to Authix.
await authix.addUserData({
userId,
dataCategory: "notes",
data: { title: "First note", pinned: true },
});When do you still need your own backend?
Add a server when you handle payments, call AI models with private keys, run background jobs or need app-wide writes. Neuctra Authix fits in there too: keep the API key on your server and call the same SDK from Node.js or Python.
Frequently asked questions
Can I add authentication and a database to a React app without a backend?
Yes. Install @neuctra/authix, create a client with your API key, and use loginUser and addUserData from your React code, or drop in the pre-built login and sign-up components. No server code is needed for accounts or per-user data.
Is it secure to call the API from the browser?
Yes, with the API key. It can only reach the signed-in user's own records, and sessions use an HttpOnly cookie that JavaScript cannot read. Never put the API key in frontend code.
What kind of data can I store?
Any JSON object. You group records into categories you name, such as notes or orders, and can nest records under a parent, like line items under an order. The Free plan allows 500 KB of data per user.
Does it work with Flutter and Python?
Yes. There are official SDKs for Dart and Flutter and for Python, with the same sign-in and data methods as the JavaScript SDK.
