Skip to content
All features
platformpackages/platform

platform surface

Core platform services, data, config, health, and tenancy

Open docs
Stability
Stable
Scope
Global
Boundary
packages/platform
platformpackages/platform
Foundational layer
Runtime stack5 layers
  • edge
  • gateway
  • services
  • platformyou are here
  • storage
Uptime
99.88%
Resolved configplatform.config

Uptime

99.88%

+0.04%

p99 latency

32 ms

-3%

Active connections

3,490

Active tenants

368

+1%
packages/platformplatform · Lowest shared layer · zero-app coupling
Usageplatform.ts
typescript
platform.ts
1import { prisma } from "@nebutra/db";
2import { getCurrentTenant } from "@nebutra/tenant";
3
4const tenant = getCurrentTenant();
5
6const posts = await prisma.post.findMany({
7  where: { tenantId: tenant.tenantId, published: true },
8  orderBy: { publishedAt: "desc" },
9  take: 10,
10});
Active rules3
error.rate > 5%
FIRING→ Slack #ops
p95.latency > 800ms
WARNING→ PagerDuty
disk.usage > 80%
OK→ Email
evaluated every 30swebhook delivery
alertingPackage

alerting

Alert rules + delivery on top of @nebutra/metering. Threshold/anomaly detection, route to PagerDuty, Discord, or in-product banners.

Explore
analyticsPackage

analytics

First-party product analytics on ClickHouse — event ingest, funnel queries, no third-party loader on the marketing site.

Explore
SDK · 8 moduleskit
  • config
  • db
  • queue
  • vault
  • events
  • ai
  • tenant
  • schedule

pnpm nebutra capability scaffold

capability-kitPackage

capability-kit

Composable capability primitives — pricing tier ↔ feature flag ↔ quota ↔ UI gating wired into one declarative manifest.

Explore
config.schema.ts4
  • config.database.urlstring· required
  • config.ai.defaultModelstring· default "claude-sonnet-4-6"
  • config.ai.maxTokensnumber· default 4096
  • config.cache.ttlnumber· default 60

validated at startup

configPackage

config

Typed environment + runtime config — Zod schemas at boot, no scattered process.env reads, fail-fast on missing keys.

Explore
dbPackage

db

Typed Prisma client wrapper — extension-aware, RLS-friendly, with per-tenant connection pinning when the deployment splits writes from reads.

Explore
Recent errors3
2m agoERRORBILLING_PROVIDER_TIMEOUT
1 occurrence
9m agoWARNQUEUE_RETRY_LIMIT
3 occurrences
21m agoINFOAUTH_TOKEN_REFRESHED
12 occurrences
at packages/commerce/billing/src/charge.ts:42at @nebutra/queue: retryHandler
Sentry · structured logs
errorsPackage

errors

Typed application error taxonomy — UserError, AuthError, RateLimitError. Maps cleanly to HTTP, to logs, to Sentry, to the in-product toast.

Explore
feature-flagsPackage

feature-flags

Server + client flag evaluator with GrowthBook / Statsig / custom. Per-tenant overrides, sticky bucketing, exported as React hooks.

Explore
gateway-corePackage

gateway-core

BFF primitives shared by backends/gateway and edge handlers — middleware chains, route matchers, header normalization, request-id propagation.

Explore
user:alice
owns
org:acme
member
user:bob
ReBACtyped relations
graph-modelPackage

graph-model

Property-graph model layer for knowledge / org / asset graphs. Edges/nodes typed by Zod, persisted via Prisma or Neo4j adapter.

Explore
GET /healthz200 OK · 4ms
· database2ms
· redis1ms
· queue1ms
· s3degraded
composed via @nebutra/health
healthPackage

health

Liveness + readiness probes for every backend service. Aggregates downstream deps (db, queue, search) into one /healthz response.

Explore
i18n·7 locales2,401 keys
auth.welcome
en·Welcome back, {name}!
zh·欢迎回来,{name}!
ja·{name}さん、おかえり!
es·¡Bienvenido, {name}!
next-intl · ICU MessageFormat99.2% coverage
i18nPackage

i18n

next-intl bridge — runtime locale, ICU plural, currency/date formatters, sided JSON bundles per route. Build-time guarantees on key drift.

Explore
Sentry connected
logs.stream
[INFO]user.signupuserId=usr_8c41 tenantId=org_abc
[WARN]cache.misskey=user:abc 3ms
[ERROR]payment.failedorderId=ord_5a18 code=card_declined
[DEBUG]tenant.resolvetenantId=org_xyz 1ms
trace-id propagated · 4 sinks
loggerPackage

logger

Structured logging with pino + Sentry transport. One log object per request, breadcrumbs forwarded, PII-stripper plugged into the standard sink.

Explore
provider.billing
Stripe
PolarLemonSqueezyChinaPay
Detected via BILLING_PROVIDER env
falls back to Stripe
provider-factoryPackage

provider-factory

Auto-detecting provider factory pattern — env vars choose between queue / search / notifications backends with a single getX() call.

Explore
rate · 100 req/s · token bucket
  • /api/posts200 ok87 left
  • /api/users429 throttledretry-after 12s
per-tenant · 8ms p99
rate-limitPackage

rate-limit

Token-bucket rate limiter — Upstash Redis or in-memory. Per-route + per-tenant policy, 429 with retry-after, decision logged for audit.

Explore
repositoriesPackage

repositories

Repository-pattern primitives — findAll, findById, create, update, delete behind one Repository<T>. Swap Prisma for any backend without changing callers.

Explore
Nebutra Status
All systems operational
99.97% uptime · 90 days
statusPackage

status

Public status page primitives — incident timeline, component graph, subscriber emails. Renders both /status pages and embeddable widgets.

Explore
postgres · RLS
tenant scope
SET LOCAL app.tenant_id = 'org_abc123';
SELECT * FROM posts;
-- → 12 rows (tenant_abc only)
tenant_abc · 12 rowstenant_xyz · hidden
withTenant()AsyncLocalStorage scope
tenant-storePackage

tenant-store

Tenant-bound key/value cache for lookups too hot for the database. Auto-invalidates on tenant settings change.

Explore
trace-storePackage

trace-store

OpenTelemetry-compatible span store and query layer. Lets agents trace a tool call across iam, billing, and webhooks.

Explore