Capabilities & limits reference
The complete, always-current spec of every koigrid product — versions, features and plan limits. Generated from the source of truth in code, so it never drifts from what the platform actually does.
Apps
- Sources
- container image OR git repo (Dockerfile or nixpacks buildpacks)
- Build
- sandboxed (rootless BuildKit / kaniko in gVisor); ~280s timeout. Heavy builds (e.g. next build ~4GB) may need NODE_OPTIONS=--max-old-space-size; OOM reports build_oom
- Deploys
- zero-downtime (new container promoted only if healthy) + rollback to exact image
- Custom domains
- CNAME/ALIAS + automatic TLS (Let’s Encrypt)
- Env vars
- encrypted at rest (envelope, AES-256-GCM), injected on redeploy
- Volumes
- persistent block storage per app (survives redeploys)
- Isolation
- gVisor syscall sandbox (untrusted code cannot escape)
- Runtime
- RAM/CPU limits, health checks, per-app logs; multi-runner with auto-failover
Databases
- PostgreSQL versions
- 15, 16, 17 (default 17)
- pgvector
- pre-installed (embeddings / vector search, AI-native)
- Extensions
- pg_trgm, unaccent, uuid-ossp, pgcrypto, citext, hstore, pg_stat_statements — CREATE EXTENSION, or POST /databases/:id/extensions {name, schema?} to install into a specific schema (e.g. "extensions" for ex-Supabase apps)
- High availability
- leader + standby, automatic failover (Patroni + etcd)
- Connection pooling
- PgBouncer (incluido)
- Logical replication / CDC
- enabled — CREATE SUBSCRIPTION (in) + publications (out)
- Roles
- manage Postgres roles per database (least-privilege create/list/drop/reset-password) — POST /databases/:id/roles. Never superuser; passwords never hit argv/logs. Use for GRANT + SET ROLE (scoped access) + object ownership.
- Data API
- auto REST over your tables (PostgREST/Supabase-style) — GET/POST /databases/:id/data/:table with select/filter/order/limit. Read/write data over HTTP without a Postgres driver. Identifiers validated, values parameterized (injection-safe). AI-first.
- Backups
- automatic daily + on-demand, point-in-time restore (wal-g)
- Read replicas
- hot-scaling, separate read endpoint (readUri) on HA
- Branching
- branch the production database (full-copy clone at "now" or a PITR point) to test migrations safely — POST /databases/:id/branches. Reset a branch back to production’s current state (POST .../reset, connection unchanged), ephemeral TTL + delete protection. A branch is a real cluster (counts vs plan).
- Password rotation
- automatic scheduled password rotation (AWS Secrets Manager rotation substitute), ZERO-DOWNTIME. Alternating dual-role over a reloadable pooler → the old credential stays valid until the next rotation (overlap), so live apps never break. Enable: POST /databases/:id/rotation/migrate ONCE (switch the pooler to reloadable file mode), then PUT /databases/:id/rotation {intervalDays} (or POST .../rotation/rotate to rotate now). Apps wiring ${{db.x.DATABASE_URL}} auto-redeploy with the fresh credential.
- TLS
- verificado (sslmode=verify-ca con CA propia — sin rejectUnauthorized:false)
Cron jobs
- Schedule
- 5-field cron with timezone/DST (cron-parser)
- Types
- container (docker run per job in gVisor) OR http (koigrid hits a URL on schedule — headers encrypted)
- Runtime
- RAM/CPU limits + timeout; captured logs + exit code
- Output
- captured logs + exit code; manual trigger available
- Env vars
- encrypted at rest, injected per run
Cache / Redis
- Redis version
- 7
- High availability
- master + replica(s) + 3 Sentinels + master-aware HAProxy, auto-failover
- Eviction policies
- noeviction, allkeys-lru/lfu/random, volatile-lru
- Persistence
- RDB + AOF
- Backups
- RDB snapshots → S3, daily + on-demand, restore to a new cluster
- Security
- TLS (rediss://) + password (requirepass/masterauth)
Storage
- S3-compatible
- MinIO — PutObject, GetObject, ListObjectsV2, HeadObject, DeleteObject, presigned URLs
- Clients (zero code change)
- the standard AWS SDK works as-is (virtual-hosted bucket.s3.koigrid.com supported) — set AWS_ENDPOINT_URL_S3 + keys. Also aws-cli, rclone; path-style works too
- Endpoint
- https://s3.koigrid.com
- Access keys
- per-org scoped keys (secret shown once)
- Bandwidth
- included per plan, flat rate (no egress surprise)
Observability
- Events
- timeline of every action, per org (GET /events)
- Metrics
- daily consumption series + cost (GET /metrics)
- Alarms
- threshold alarms → emit alarm.triggered (GET/POST /alarms)
- Anomaly detection
- statistical spike detection (>Nσ from baseline, no fixed threshold) on cost/usage (GET/POST /anomalies)
- Scope
- observability:read / observability:write
- Model
- bring-your-own SMTP (Resend/SES/Postmark/Postfix…) — koigrid relays only
- Config
- SMTP per org, encrypted at rest, verified on save
- Sending
- POST /email/send with rate limit per plan + delivery ledger
- Cost
- zero email cost/reputation for koigrid; no per-domain limits
Checks
- Check types
- URL / heartbeat + API check with assertions (v2: browser via Playwright)
- Assertions
- HTTP status (200/2xx/list), latency < X ms, body contains/regex/JSON path, header equals/contains
- Scheduling
- interval per plan (Free ≥5 min, paid ≥1 min) + run-once (test now)
- Reliability
- anti-flaky retries + per-check timeout; status up/down/degraded
- Auth
- encrypted custom headers (Authorization, x-api-key) for protected endpoints
- Alerts
- email + webhook (Slack/PagerDuty/Discord) on down and recovery — only on state change
- History
- per-run status + latency; uptime %, average + p95 latency
- Agent-native
- full CRUD + run-once by API/CLI — monitoring-as-code
Share
API: /api/v1/ · docs /docs · /share · full endpoints + scopes in /llms.txt and OpenAPI.
Links
API: /api/v1/ · docs /docs · /links · full endpoints + scopes in /llms.txt and OpenAPI.
Feature Flags
API: /api/v1/flags · docs /docs · /flags · full endpoints + scopes in /llms.txt and OpenAPI.
Status Pages
API: /api/v1/status-pages · docs /docs · /status-pages · full endpoints + scopes in /llms.txt and OpenAPI.
Heartbeats
API: /api/v1/heartbeats · docs /docs · /heartbeats · full endpoints + scopes in /llms.txt and OpenAPI.
Config & Secrets
API: /api/v1/config · docs /docs · /config · full endpoints + scopes in /llms.txt and OpenAPI.
Web Analytics
API: /api/v1/analytics/sites · docs /docs · /analytics · full endpoints + scopes in /llms.txt and OpenAPI.
Error Tracking
API: /api/v1/errors · docs /docs · /errors · full endpoints + scopes in /llms.txt and OpenAPI.
Speed Insights
API: /api/v1/speed-insights · docs /docs · /speed-insights · full endpoints + scopes in /llms.txt and OpenAPI.
Sandboxes
API: /api/v1/sandboxes · docs /docs · /sandboxes · full endpoints + scopes in /llms.txt and OpenAPI.
Image Optimization
API: /api/v1/images/config · docs /docs · /images · full endpoints + scopes in /llms.txt and OpenAPI.
Firewall
API: /api/v1/waf/rules · docs /docs · /firewall · full endpoints + scopes in /llms.txt and OpenAPI.
Webhooks
API: /api/v1/webhooks · docs /docs · /webhooks · full endpoints + scopes in /llms.txt and OpenAPI.
Log Drains
API: /api/v1/log-drains · docs /docs · /log-drains · full endpoints + scopes in /llms.txt and OpenAPI.
Spend Management
API: /api/v1/spend · docs /docs · /spend-management · full endpoints + scopes in /llms.txt and OpenAPI.
Bot Management
API: /api/v1/bots/policy · docs /docs · /bot-management · full endpoints + scopes in /llms.txt and OpenAPI.
OpenTelemetry
API: /api/v1/otel · docs /docs · /opentelemetry · full endpoints + scopes in /llms.txt and OpenAPI.
DNS
API: /api/v1/dns/zones · docs /docs · /dns · full endpoints + scopes in /llms.txt and OpenAPI.
Queues
- Model
- durable message queue on Postgres (SQS-like) — send / receive / ack
- Delivery
- at-least-once with a visibility timeout (received messages hidden until ack or timeout)
- No double delivery
- concurrent consumers claim different messages (FOR UPDATE SKIP LOCKED)
- Dead-letter
- built in — a message past maxReceives is dead-lettered (no separate DLQ/redrive policy)
- Send options
- delaySeconds (up to 15 min) + dedupeId (idempotent sends)
- Limits
- body up to 256 KB, receive up to 10 at a time (SQS-parity)
- Lock-in
- none — portable Postgres model, not the AWS-specific SQS API
Workflows
- Model
- durable execution — ordered steps with journaled outputs (Step-Functions-like activities / Inngest steps)
- Durability
- a run survives crashes and redeploys — completed steps are never re-run (journal in Postgres)
- Durable sleep
- pause a run from seconds to 90 days; it wakes and continues
- Retries
- per-step exponential backoff up to maxAttempts, then the run fails
- At-least-once steps
- a claimed step has a lease — if the worker dies, another re-claims it
- Worker model
- any worker/agent drives it: POST /next → run → complete/fail/sleep. No SDK lock-in
- Lock-in
- none — open API + Postgres, not Amazon States Language
Container Registry
- Protocol
- standard OCI Distribution API (/v2) — docker, crane, skopeo, buildkit all work
- Auth
- HTTP Basic — password = a koigrid token with registry:read / registry:write
- Login
- docker login koigrid.com -u token -p <koigrid-token>
- Storage
- blobs + manifests on koigrid Storage (S3/MinIO), content-addressed by digest
- Isolation
- images scoped per org (no cross-tenant access)
- Deploy from it
- push an image, then deploy it as a koigrid App — one platform
- Lock-in
- none — standard protocol + portable object storage
Audit Log
- What
- immutable record of who did what — every security/config change, per org (CloudTrail-like)
- Actor
- user (web/API) or agent (API token) — resolved to email/token name, with source IP
- Coverage
- curated from the platform event log — members, tokens, resources, deploys, DNS, firewall, billing, integrations
- Filters
- by category, action type, actor, resource type and date range
- Export
- CSV download (RFC-4180, formula-injection-safe) for compliance/SIEM
- Access
- owners and admins only (scope audit:read); reads never expose secrets
- Lock-in
- none — open API + CSV; portable, not a proprietary trail
Managed WordPress
API: /api/v1/wordpress/accounts · docs /docs · /wordpress · full endpoints + scopes in /llms.txt and OpenAPI.
Plan limits
| Plan | $/mo | Apps | Databases | Redis | Cron jobs | Storage | DB disk | Bandwidth |
|---|---|---|---|---|---|---|---|---|
| free | 0 | 1 | 1 | 1 | 2 | 1 GB | 1 GB | 100 GB |
| starter | 12 | 3 | 1 | 1 | 10 | 25 GB | 10 GB | 500 GB |
| pro | 35 | 8 | 3 | 3 | 50 | 100 GB | 50 GB | 2048 GB |
| scale | 89 | 20 | 10 | 10 | 200 | 500 GB | 200 GB | 5120 GB |