stack/docs-mintlify/docs/concepts/custom-user-data.mdx
Madison 13fccd32b6
Some checks failed
all-good: Did all the other checks pass? / all-good (push) Has been cancelled
Ensure Prisma migrations are in sync with the schema / check_prisma_migrations (22.x) (push) Has been cancelled
DB migration compat / Check if migrations changed (push) Has been cancelled
Docker Server Build and Push / Docker Build and Push Server (push) Has been cancelled
Docker Server Build and Run / docker (push) Has been cancelled
Runs E2E API Tests (Local Emulator) / E2E Tests (Local Emulator, Node ${{ matrix.node-version }}) (22.x) (push) Has been cancelled
Runs E2E API Tests / E2E Tests (Node ${{ matrix.node-version }}, Freestyle ${{ matrix.freestyle-mode }}) (mock, 22.x) (push) Has been cancelled
Runs E2E API Tests / E2E Tests (Node ${{ matrix.node-version }}, Freestyle ${{ matrix.freestyle-mode }}) (prod, 22.x) (push) Has been cancelled
Runs E2E API Tests with custom port prefix / build (22.x) (push) Has been cancelled
Lint & build / lint_and_build (latest) (push) Has been cancelled
Dev Environment Test With Custom Base Port / restart-dev-and-test-with-custom-base-port (push) Has been cancelled
Dev Environment Test / restart-dev-and-test (push) Has been cancelled
Run setup tests with custom base port / setup-tests-with-custom-base-port (push) Has been cancelled
Run setup tests / setup-tests (push) Has been cancelled
TOC Generator / TOC Generator (push) Has been cancelled
DB migration compat / Back-compat — Current branch migrations with ${{ needs.check-migrations-changed.outputs.base_branch }} branch code (push) Has been cancelled
DB migration compat / Forward-compat — Current branch code with ${{ needs.check-migrations-changed.outputs.base_branch }} branch migrations (push) Has been cancelled
DB migration compat / No migration changes (skipped) (push) Has been cancelled
Add docs-mintlify to root
2026-04-01 14:58:41 -05:00

62 lines
1.6 KiB
Plaintext

---
title: "Custom User Data"
description: "How to store custom user metadata in Stack Auth"
---
Stack Auth allows storing additional user information through three types of metadata fields:
1. **clientMetadata**: Readable and writable from a [client](../concepts/stack-app#client-vs-server).
2. **serverMetadata**: Readable and writable only from a [server](../concepts/stack-app#client-vs-server).
3. **clientReadOnlyMetadata**: Readable from a client, writable only from a server.
## Client metadata
You can use the `clientMetadata` field to store non-sensitive information that both the client and server can read and write.
```tsx
await user.update({
clientMetadata: {
mailingAddress: "123 Main St",
},
});
// On the client:
const user = useUser();
console.log(user.clientMetadata);
```
## Server-side metadata
For sensitive information, use the `serverMetadata` field. This ensures the data is only accessible and modifiable by the server.
```tsx
const user = await stackServerApp.getUser();
await user.update({
serverMetadata: {
secretInfo: "This is a secret",
},
});
// To read:
const user = await stackServerApp.getUser();
console.log(user.serverMetadata);
```
## Client read-only metadata
Use `clientReadOnlyMetadata` for data that clients need to read but never modify, such as subscription status.
```tsx
// On the server:
const user = await stackServerApp.getUser();
await user.update({
clientReadOnlyMetadata: {
subscriptionPlan: "premium",
},
});
// On the client:
const user = useUser();
console.log(user.clientReadOnlyMetadata);
```