-
-
Notifications
You must be signed in to change notification settings - Fork 2
API
Version: v0.9.6 Status: Production Ready Last Updated: January 30, 2026
Complete API reference for nself services, including GraphQL, Authentication, Storage, Real-time, and Custom Service APIs.
- Overview
- GraphQL API (Hasura)
- Authentication API
- Storage API (MinIO)
- Real-Time API (WebSocket)
- Functions API
- Custom Service APIs
- Multi-Tenancy API
- Billing API
- Security & Authentication
- Rate Limiting
- Error Handling
- API Versioning
- Testing & Debugging
nself provides a comprehensive suite of APIs built on modern standards:
┌──────────────────────────────────────────────────────────┐
│ Client Applications │
│ (Web, Mobile, Desktop, IoT) │
└────────────────────┬─────────────────────────────────────┘
│
│ HTTPS / WSS
▼
┌──────────────────────────────────────────────────────────┐
│ Nginx Reverse Proxy │
│ (SSL Termination, Routing) │
└─┬────────┬──────────┬─────────┬───────────┬─────────────┘
│ │ │ │ │
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌────┐ ┌──────┐ ┌─────────┐ ┌────────┐ ┌────────────┐
│ GQL│ │ Auth │ │ Storage │ │Realtime│ │ Custom │
│API │ │ API │ │ API │ │ API │ │ Services │
└─┬──┘ └──┬───┘ └────┬────┘ └───┬────┘ └──────┬─────┘
│ │ │ │ │
└───────┴──────────┴───────────┴─────────────┘
│
▼
┌──────────────────┐
│ PostgreSQL DB │
│ + Extensions │
└──────────────────┘
| API | Endpoint | Protocol | Purpose |
|---|---|---|---|
| GraphQL | https://api.{domain}/v1/graphql |
HTTPS, WSS | Database operations, real-time subscriptions |
| Authentication | https://auth.{domain} |
HTTPS | User authentication, OAuth, JWT management |
| Storage | https://storage.{domain} |
HTTPS | File upload, download, management |
| Real-Time | wss://realtime.{domain} |
WebSocket | Live messaging, presence, broadcasts |
| Functions | https://functions.{domain} |
HTTPS | Serverless function execution |
| Custom Services | https://{service}.{domain} |
HTTPS/gRPC | User-defined APIs |
# Default local development endpoints
https://api.local.nself.org # GraphQL API
https://auth.local.nself.org # Authentication
https://storage.local.nself.org # Storage/MinIO
wss://realtime.local.nself.org # WebSocket
https://functions.local.nself.org # Functions
# View all service URLs
nself urlsHasura provides an instant, auto-generated GraphQL API over PostgreSQL with real-time subscriptions, role-based access control, and powerful query capabilities.
Version: v2.44.0
Endpoint: https://api.{domain}/v1/graphql
Console: https://api.{domain}/console (dev only)
- Auto-generated CRUD operations
- Real-time subscriptions via WebSocket
- Role-based permissions (RLS)
- Remote schemas integration
- Actions for custom business logic
- Event triggers for workflows
- RESTified endpoints
Include JWT token in all requests:
const headers = {
'Authorization': `Bearer ${jwt_token}`,
'Content-Type': 'application/json'
}query GetUsers {
users {
id
email
name
created_at
}
}query GetActiveUsers {
users(
where: { is_active: { _eq: true } }
order_by: { created_at: desc }
limit: 10
) {
id
email
name
}
}query GetUsersWithPosts {
users {
id
name
posts {
id
title
content
created_at
}
}
}query GetUserStats {
users_aggregate {
aggregate {
count
avg {
age
}
}
}
}mutation CreateUser($email: String!, $name: String!) {
insert_users_one(object: {
email: $email
name: $name
}) {
id
email
name
created_at
}
}mutation CreateMultipleUsers($users: [users_insert_input!]!) {
insert_users(objects: $users) {
returning {
id
email
name
}
}
}mutation UpdateUser($id: uuid!, $name: String!) {
update_users_by_pk(
pk_columns: { id: $id }
_set: { name: $name }
) {
id
name
updated_at
}
}mutation DeleteUser($id: uuid!) {
delete_users_by_pk(id: $id) {
id
email
}
}mutation UpsertUser($email: String!, $name: String!) {
insert_users_one(
object: { email: $email, name: $name }
on_conflict: {
constraint: users_email_key
update_columns: [name]
}
) {
id
email
name
}
}subscription OnNewUsers {
users(
order_by: { created_at: desc }
limit: 1
) {
id
email
name
created_at
}
}subscription OnUserStatusChange($userId: uuid!) {
users_by_pk(id: $userId) {
id
status
last_seen
}
}subscription OnUserCountChange {
users_aggregate {
aggregate {
count
}
}
}Define custom business logic:
mutation ProcessPayment($amount: Float!, $userId: uuid!) {
processPayment(amount: $amount, userId: $userId) {
success
transactionId
message
}
}Integrate external GraphQL APIs:
query GetWeather($city: String!) {
weather(city: $city) {
temperature
conditions
forecast {
day
high
low
}
}
}import { ApolloClient, InMemoryCache, gql } from '@apollo/client';
const client = new ApolloClient({
uri: 'https://api.local.nself.org/v1/graphql',
cache: new InMemoryCache(),
headers: {
'Authorization': `Bearer ${token}`
}
});
// Query
const { data } = await client.query({
query: gql`
query GetUsers {
users {
id
email
name
}
}
`
});
// Mutation
const { data } = await client.mutate({
mutation: gql`
mutation CreateUser($email: String!, $name: String!) {
insert_users_one(object: { email: $email, name: $name }) {
id
}
}
`,
variables: { email: 'user@example.com', name: 'John' }
});import { request, gql } from 'graphql-request';
const endpoint = 'https://api.local.nself.org/v1/graphql';
const headers = {
'Authorization': `Bearer ${token}`
};
const query = gql`
query GetUsers {
users {
id
email
name
}
}
`;
const data = await request(endpoint, query, {}, headers);from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport
transport = RequestsHTTPTransport(
url='https://api.local.nself.org/v1/graphql',
headers={'Authorization': f'Bearer {token}'}
)
client = Client(transport=transport, fetch_schema_from_transport=True)
query = gql("""
query GetUsers {
users {
id
email
name
}
}
""")
result = client.execute(query)Hasura uses row-level security for fine-grained access control:
# Example permission for 'user' role
table: users
role: user
permission:
filter:
id: { _eq: X-Hasura-User-Id }
columns:
- id
- email
- name
check:
id: { _eq: X-Hasura-User-Id }# Use limit and offset for pagination
query GetUsersPaginated($limit: Int = 20, $offset: Int = 0) {
users(limit: $limit, offset: $offset) {
id
name
}
}
# Select only needed fields
query GetUserEmails {
users {
email # Don't fetch unnecessary fields
}
}
# Use indexes for filtering
query GetUsersByStatus($status: String!) {
users(where: { status: { _eq: $status } }) {
id
name
}
}nHost Auth provides complete authentication and authorization with JWT tokens, OAuth, MFA, and user management.
Version: 0.36.0
Endpoint: https://auth.{domain}
Database: Uses auth schema in PostgreSQL
POST /signup/email-password
Content-Type: application/json
{
"email": "user@example.com",
"password": "SecurePassword123!",
"displayName": "John Doe",
"metadata": {
"role": "user"
}
}
# Response
{
"session": {
"accessToken": "eyJhbGci...",
"accessTokenExpiresIn": 900,
"refreshToken": "v4.public...",
"user": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "user@example.com",
"displayName": "John Doe",
"emailVerified": false,
"defaultRole": "user",
"roles": ["user"]
}
}
}POST /signup/email-password
Content-Type: application/json
{
"email": "user@example.com",
"password": "SecurePassword123!",
"options": {
"allowedRoles": ["user"],
"defaultRole": "user",
"redirectTo": "https://app.example.com/verify"
}
}
# User receives verification email
# Click link to verify: /verify?token=xyzPOST /signin/email-password
Content-Type: application/json
{
"email": "user@example.com",
"password": "SecurePassword123!"
}
# Response
{
"session": {
"accessToken": "eyJhbGci...",
"accessTokenExpiresIn": 900,
"refreshToken": "v4.public...",
"user": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "user@example.com",
"displayName": "John Doe",
"defaultRole": "user"
}
}
}POST /signin/passwordless/email
Content-Type: application/json
{
"email": "user@example.com",
"options": {
"redirectTo": "https://app.example.com/auth/callback"
}
}
# User receives email with magic link
# Click link to authenticate automatically# Google
GET /signin/provider/google
# GitHub
GET /signin/provider/github
# Other providers (must be configured)
GET /signin/provider/{provider}
# Callback after OAuth
GET /signin/provider/{provider}/callback?code=xyz&state=abcPOST /token
Content-Type: application/json
{
"refreshToken": "v4.public.eyJ..."
}
# Response
{
"session": {
"accessToken": "eyJhbGci...",
"accessTokenExpiresIn": 900
}
}POST /token/revoke
Authorization: Bearer {accessToken}
Content-Type: application/json
{
"refreshToken": "v4.public.eyJ..."
}GET /user
Authorization: Bearer {accessToken}
# Response
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "user@example.com",
"displayName": "John Doe",
"emailVerified": true,
"defaultRole": "user",
"roles": ["user"],
"metadata": {},
"createdAt": "2026-01-29T10:00:00Z"
}POST /user
Authorization: Bearer {accessToken}
Content-Type: application/json
{
"displayName": "Jane Doe",
"metadata": {
"avatar": "https://..."
}
}POST /user/password
Authorization: Bearer {accessToken}
Content-Type: application/json
{
"newPassword": "NewSecurePassword456!"
}# Request password reset
POST /user/password/reset
Content-Type: application/json
{
"email": "user@example.com",
"options": {
"redirectTo": "https://app.example.com/reset-password"
}
}
# User receives reset email with token
# Submit new password
POST /user/password/reset/confirm
Content-Type: application/json
{
"ticket": "reset-token-from-email",
"newPassword": "NewSecurePassword456!"
}POST /signout
Authorization: Bearer {accessToken}
# Invalidates current session
# Client should discard tokensPOST /mfa/totp/generate
Authorization: Bearer {accessToken}
# Response
{
"imageUrl": "data:image/png;base64,...",
"totpSecret": "JBSWY3DPEHPK3PXP"
}POST /mfa/totp/activate
Authorization: Bearer {accessToken}
Content-Type: application/json
{
"code": "123456"
}POST /signin/mfa/totp
Content-Type: application/json
{
"ticket": "mfa-ticket-from-initial-login",
"code": "123456"
}Configure OAuth providers via environment variables:
# Google OAuth
AUTH_PROVIDER_GOOGLE_ENABLED=true
AUTH_PROVIDER_GOOGLE_CLIENT_ID=your-client-id
AUTH_PROVIDER_GOOGLE_CLIENT_SECRET=your-client-secret
# GitHub OAuth
AUTH_PROVIDER_GITHUB_ENABLED=true
AUTH_PROVIDER_GITHUB_CLIENT_ID=your-client-id
AUTH_PROVIDER_GITHUB_CLIENT_SECRET=your-client-secret
# Manage via CLI
nself auth oauth enable google
nself auth oauth config googleJWT tokens include custom Hasura claims:
{
"sub": "123e4567-e89b-12d3-a456-426614174000",
"iat": 1706529600,
"exp": 1706530500,
"https://hasura.io/jwt/claims": {
"x-hasura-allowed-roles": ["user", "admin"],
"x-hasura-default-role": "user",
"x-hasura-user-id": "123e4567-e89b-12d3-a456-426614174000",
"x-hasura-tenant-id": "tenant-abc123"
}
}import { NhostClient } from '@nhost/nhost-js';
const nhost = new NhostClient({
subdomain: 'local.nself.org',
region: ''
});
// Sign up
const { session, error } = await nhost.auth.signUp({
email: 'user@example.com',
password: 'SecurePassword123!'
});
// Sign in
const { session, error } = await nhost.auth.signIn({
email: 'user@example.com',
password: 'SecurePassword123!'
});
// Get access token
const token = nhost.auth.getAccessToken();
// Sign out
await nhost.auth.signOut();MinIO provides S3-compatible object storage for files, images, videos, and documents.
Endpoint: https://storage.{domain}
Console: https://minio.{domain} (admin UI)
Protocol: S3-compatible API
# Enable in .env
MINIO_ENABLED=true
# Initialize storage
nself service storage initimport AWS from 'aws-sdk';
const s3 = new AWS.S3({
endpoint: 'https://storage.local.nself.org',
accessKeyId: process.env.MINIO_ROOT_USER,
secretAccessKey: process.env.MINIO_ROOT_PASSWORD,
s3ForcePathStyle: true,
signatureVersion: 'v4'
});
// Upload file
const result = await s3.upload({
Bucket: 'uploads',
Key: 'documents/file.pdf',
Body: fileBuffer,
ContentType: 'application/pdf'
}).promise();
console.log('File URL:', result.Location);// Use presigned URL for secure uploads
const mutation = gql`
mutation GetUploadUrl($fileName: String!, $contentType: String!) {
getUploadUrl(fileName: $fileName, contentType: $contentType) {
url
fileId
}
}
`;
const { data } = await client.mutate({
mutation,
variables: {
fileName: 'document.pdf',
contentType: 'application/pdf'
}
});
// Upload file to presigned URL
await fetch(data.getUploadUrl.url, {
method: 'PUT',
body: fileBuffer,
headers: {
'Content-Type': 'application/pdf'
}
});// Get file
const file = await s3.getObject({
Bucket: 'uploads',
Key: 'documents/file.pdf'
}).promise();
console.log('File content:', file.Body);// List all files in bucket
const files = await s3.listObjectsV2({
Bucket: 'uploads',
Prefix: 'documents/'
}).promise();
files.Contents.forEach(file => {
console.log('File:', file.Key, 'Size:', file.Size);
});// Delete file
await s3.deleteObject({
Bucket: 'uploads',
Key: 'documents/file.pdf'
}).promise();Generate temporary URLs for secure access:
// Generate presigned URL (valid for 1 hour)
const url = s3.getSignedUrl('getObject', {
Bucket: 'uploads',
Key: 'documents/file.pdf',
Expires: 3600
});
console.log('Download URL:', url);# .env
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
MINIO_CONSOLE_PORT=9001
MINIO_BROWSER=on
MINIO_DEFAULT_BUCKETS=uploads,public,privateWebSocket server for real-time messaging, presence tracking, and live collaboration.
Endpoint: wss://realtime.{domain}
Protocol: Socket.IO over WebSocket
Database: Uses realtime schema in PostgreSQL
# Initialize real-time system
nself service realtime init
# Start WebSocket server
nself service realtime start
# Check status
nself service realtime statusimport { io } from 'socket.io-client';
const socket = io('wss://realtime.local.nself.org', {
auth: {
token: 'your-jwt-token'
},
transports: ['websocket', 'polling']
});
socket.on('connect', () => {
console.log('Connected:', socket.id);
});
socket.on('disconnect', (reason) => {
console.log('Disconnected:', reason);
});// Subscribe to public channel
socket.emit('subscribe', { channel: 'general' });
// Listen for subscription confirmation
socket.on('subscribed', (data) => {
console.log('Subscribed to:', data.channel);
});socket.emit('message:send', {
channel: 'general',
content: 'Hello, world!',
messageType: 'text'
});
// Listen for message confirmation
socket.on('message:sent', (data) => {
console.log('Message sent:', data.id);
});socket.on('message:new', (data) => {
console.log('New message:', data);
// {
// id: '...',
// channelId: '...',
// userId: '...',
// content: 'Hello, world!',
// messageType: 'text',
// sentAt: '2026-01-30T10:00:00Z'
// }
});socket.emit('presence:update', {
channel: 'general',
status: 'online',
metadata: {
displayName: 'Alice',
avatar: 'https://...'
}
});socket.emit('presence:get', { channel: 'general' });
socket.on('presence:list', (data) => {
console.log('Online users:', data.users);
// [
// { userId: '...', status: 'online', metadata: {...} },
// { userId: '...', status: 'away', metadata: {...} }
// ]
});Send ephemeral events (typing indicators, cursor movement):
// Broadcast typing indicator
socket.emit('broadcast', {
channel: 'general',
eventType: 'typing_start',
payload: { displayName: 'Alice' }
});
// Listen for broadcasts
socket.on('broadcast', (data) => {
console.log('Broadcast:', data.eventType, data.payload);
});Subscribe to real-time database notifications:
// Subscribe to table notifications
socket.emit('subscribe', { channel: 'table_users' });
// Listen for database changes
socket.on('db:notification', (data) => {
console.log('Operation:', data.operation); // INSERT, UPDATE, DELETE
console.log('Record:', data.record);
});Serverless functions runtime for custom business logic.
Endpoint: https://functions.{domain}
Runtime: Node.js, Python, Go (configurable)
# Enable in .env
FUNCTIONS_ENABLED=true
# Deploy function
nself service functions deploy my-function// functions/my-function/index.js
export default async function handler(req, res) {
const { body, query, headers } = req;
// Your business logic
const result = await processData(body);
res.status(200).json({ success: true, data: result });
}# HTTP request
curl -X POST https://functions.local.nself.org/my-function \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"key": "value"}'Create custom REST, GraphQL, or gRPC APIs using service templates.
# .env
CS_1=my-api:express-ts:8001:api
CS_2=graphql-api:graphql-yoga:8002:graphql
CS_3=grpc-api:grpc:8003# REST API
https://my-api.local.nself.org
# GraphQL API
https://graphql-api.local.nself.org/graphql
# gRPC (internal)
grpc-api:8003// services/my-api/src/index.ts
import express from 'express';
import { Pool } from 'pg';
const app = express();
const db = new Pool({
host: 'postgres',
port: 5432,
database: process.env.POSTGRES_DB
});
app.get('/users', async (req, res) => {
const result = await db.query('SELECT * FROM users');
res.json(result.rows);
});
app.post('/users', async (req, res) => {
const { email, name } = req.body;
const result = await db.query(
'INSERT INTO users (email, name) VALUES ($1, $2) RETURNING *',
[email, name]
);
res.json(result.rows[0]);
});
app.listen(8001, () => {
console.log('API running on port 8001');
});Built-in multi-tenancy support with tenant isolation, member management, and billing integration.
# Create tenant
nself tenant create myapp --plan pro
# List tenants
nself tenant list
# Add member
nself tenant member add tenant-123 user@example.com admin
# Billing
nself tenant billing subscribe tenant-123 proAll tables support automatic tenant isolation via JWT claims:
# Query tenant-specific data
query GetTenantUsers {
users {
id
email
name
}
}
# Automatically filtered by x-hasura-tenant-id from JWTStripe-integrated billing system for SaaS applications.
query GetPlans {
billing_plans {
id
name
price
interval
features
}
}mutation SubscribeToPlan($tenantId: uuid!, $planId: uuid!) {
insert_billing_subscriptions_one(object: {
tenant_id: $tenantId
plan_id: $planId
}) {
id
status
}
}query GetUsage($tenantId: uuid!) {
billing_usage(
where: { tenant_id: { _eq: $tenantId } }
order_by: { created_at: desc }
) {
metric
quantity
created_at
}
}All APIs require valid JWT tokens in the Authorization header:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...PostgreSQL RLS policies enforce data access control:
-- Users can only see their own data
CREATE POLICY users_own_data ON users
FOR SELECT
USING (id = current_user_id());For server-to-server communication:
# Generate API key
nself auth api-key create --name "Integration Key"
# Use in requests
X-API-Key: nself_sk_live_abc123xyz# .env
RATE_LIMIT_ENABLED=true
RATE_LIMIT_MAX_REQUESTS=100
RATE_LIMIT_WINDOW_MS=60000Rate limit info returned in response headers:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1706530500
# Configure rate limits
nself auth rate-limit config --max 100 --window 60s
# Check status
nself auth rate-limit status{
"error": {
"code": "VALIDATION_ERROR",
"message": "Email is required",
"details": {
"field": "email",
"constraint": "not_null"
}
}
}| Code | Meaning | Usage |
|---|---|---|
| 200 | OK | Successful request |
| 201 | Created | Resource created successfully |
| 400 | Bad Request | Invalid input |
| 401 | Unauthorized | Missing or invalid authentication |
| 403 | Forbidden | Insufficient permissions |
| 404 | Not Found | Resource does not exist |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server-side error |
{
"errors": [
{
"message": "Field 'name' is required",
"extensions": {
"path": "$.selectionSet.users.args.name",
"code": "validation-failed"
}
}
]
}/v1/graphql # Current stable version
/v2/graphql # Future version (when available)
/v1/users # Version 1
/v2/users # Version 2
Implement versioning in your custom services:
app.use('/v1', v1Router);
app.use('/v2', v2Router);Access Hasura Console for interactive testing:
https://api.local.nself.org/console
# Using curl
curl -X POST https://api.local.nself.org/v1/graphql \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"query": "{ users { id email } }"}'
# Using httpie
http POST https://api.local.nself.org/v1/graphql \
Authorization:"Bearer ${TOKEN}" \
query='{ users { id email } }'# Benchmark API
nself perf bench api --endpoint /v1/graphql --duration 60s
# Load testing
nself perf bench --rps 100 --duration 5m# View Hasura logs
nself logs hasura -f
# View Auth logs
nself logs auth -f
# View all service logs
nself logs -f- Command Reference - Complete CLI command tree
- Database Workflow - Schema to API workflow
- Service Communication - Internal API patterns
- Real-Time Features - WebSocket API details
- Security Guide - API security best practices
- Multi-Tenancy - Tenant isolation architecture
ɳSelf CLI v1.0.9. MIT licensed. Docs CC BY 4.0.
GitHub · Issues · Discussions · nself.org · docs.nself.org
Getting Started
Commands
- Commands, Overview
- Lifecycle: cmd-init · cmd-build · cmd-start · cmd-stop · cmd-restart · cmd-dev
- Monitoring: cmd-status · cmd-logs · cmd-health · cmd-urls · cmd-doctor · cmd-monitor · cmd-alerts · cmd-watchdog · cmd-dogfood
- Data: cmd-db · cmd-backup · cmd-dr · cmd-queue · cmd-webhooks
- Config: cmd-config · cmd-service · cmd-env · cmd-promote
- Networking: cmd-ssl · cmd-trust · cmd-dns-setup
- Security: cmd-security · cmd-secrets · cmd-waf
- Tenancy: cmd-tenant · cmd-billing
- Plugins: cmd-plugin · cmd-license
- AI: cmd-ai · cmd-claw
- Utilities: cmd-exec · cmd-clean · cmd-reset · cmd-update · cmd-upgrade · cmd-version · cmd-admin · cmd-migrate · cmd-completion
Features
- Features, Overview
- Feature-Auth
- Feature-Storage
- Feature-Search
- Feature-Functions
- Feature-Email
- Feature-Monitoring
- Feature-Plugins
- Feature-ɳClaw, AI Assistant
- Feature-ɳChat, Messaging
- Feature-ɳTV, Media Player
- Feature-ɳFamily, Family Social
- Feature-ɳCloud, Managed Hosting
- Feature-Memory-Rooms, Knowledge Organization
- Feature-Agent-Dashboard, Agent Metrics
- Feature-Image-Generation, AI Image Generation
Configuration
- Configuration, Overview
- Config-Env-Vars
- Config-Postgres
- Config-Hasura
- Config-Auth
- Config-Nginx
- Config-Optional-Services
- Config-Custom-Services
- Config-System
Plugins (87 + 10 monitoring)
Free (25)
- plugin-backup
- plugin-content-acquisition
- plugin-content-progress
- plugin-cron
- plugin-donorbox
- plugin-feature-flags
- plugin-github
- plugin-github-runner
- plugin-invitations
- plugin-jobs
- plugin-link-preview
- plugin-mdns
- plugin-mlflow
- plugin-monitoring
- plugin-notifications
- plugin-notify
- plugin-paypal
- plugin-search
- plugin-shopify
- plugin-stripe
- plugin-subtitle-manager
- plugin-tokens
- plugin-torrent-manager
- plugin-vpn
- plugin-webhooks
Pro (62)
- plugin-access-controls
- plugin-activity-feed
- plugin-admin-api
- plugin-ai
- plugin-analytics
- plugin-auth
- plugin-backup-pro
- plugin-bots
- plugin-browser
- plugin-calendar
- plugin-cdn
- plugin-chat
- plugin-claw
- plugin-claw-budget
- plugin-claw-news
- plugin-claw-web
- plugin-cloudflare
- plugin-cms
- plugin-compliance
- plugin-cron-pro
- plugin-ddns
- plugin-devices
- plugin-documents
- plugin-donorbox-pro
- plugin-entitlements
- plugin-epg
- plugin-file-processing
- plugin-game-metadata
- plugin-geocoding
- plugin-geolocation
- plugin-google
- plugin-home
- plugin-idme
- plugin-knowledge-base
- plugin-linkedin
- plugin-livekit
- plugin-media-processing
- plugin-meetings
- plugin-moderation
- plugin-mux
- plugin-notify-pro
- plugin-object-storage
- plugin-observability
- plugin-paypal-pro
- plugin-photos
- plugin-podcast
- plugin-post
- plugin-realtime
- plugin-recording
- plugin-retro-gaming
- plugin-rom-discovery
- plugin-shopify-pro
- plugin-social
- plugin-sports
- plugin-stream-gateway
- plugin-streaming
- plugin-stripe-pro
- plugin-support
- plugin-tmdb
- plugin-voice
- plugin-web3
- plugin-workflows
Planned (26)
plugin-auditplugin-blogplugin-checkoutplugin-commerceplugin-drmplugin-exportplugin-flowplugin-importplugin-ldapplugin-mailgunplugin-mediaplugin-oauth-providersplugin-pagesplugin-postmarkplugin-rate-limitplugin-reportsplugin-samlplugin-schedulerplugin-sendgridplugin-ssoplugin-subscriptionplugin-thumbplugin-transcoderplugin-twilioplugin-wafplugin-watermark
Guides
- Guide-Production-Deployment
- Guide-SSL-Setup
- Guide-Multi-Tenancy
- Guide-Security-Hardening
- Guide-Monitoring-Setup
- Guide-Backup-Restore
- Guide-Custom-Services
- Guide-Migration-from-v1
Architecture
Reference
- API-Reference
- reference-error-codes, Error Codes
Licensing
Security
Brand
Operations
- operations/release-cascade, Release Cascade
- operations/self-healing, Self-Healing Schema
- operations/redis-tuning, Redis Pool Tuning
- operations/meilisearch-warmup, MeiliSearch Warm-Up
- operations/jwt-rotation, JWT Key Rotation
- operations/windows-wsl2-setup, Windows / WSL2 Setup
- operations/gemini-oauth-reauth, Gemini OAuth Reauth
Contributing