📐 Configuration Schema

At its heart, App Config.json uses a strict JSON schema to define, validate, and enforce configuration structure across your application. Every config file is validated against a schema before deployment, preventing runtime errors caused by malformed or missing keys.

schema.json
{ "$schema": "https://appconfig.json/schemas/v3", "type": "object", "required": ["app", "features"], "properties": { "app": { "type": "object", "properties": { "name": { "type": "string" }, "port": { "type": "integer", "minimum": 1024 } } } } }
â„šī¸ Schema Enforcement

Invalid configurations are rejected at the API gateway level. Your application will never receive a malformed payload.

🌍 Environment Overrides

App Config.json supports layered configuration. Define a base configuration, then apply environment-specific overrides without duplicating entire files. This follows the 12-factor app methodology for environment separation.

config.json
{ "database": { "host": "localhost", "port": 5432, "pool_size": 5 }, // Environment overrides are merged at runtime "environments": { "production": { "database": { "host": "db.prod.internal", "pool_size": 25 } } } }
💡 Pro Tip

Use .env variables inside config values with {{ENV_VAR}} syntax. They are resolved server-side before delivery.

⚡ Real-Time Sync

Configuration updates propagate to all connected instances via WebSocket channels with fallback to long-polling. Your application receives delta updates, not full payloads, minimizing bandwidth and latency.

When a config is published:

  • Server validates & encrypts the payload
  • Diff is calculated against the active version
  • Updates are broadcast to subscribed clients
  • Clients acknowledge receipt within ~50ms
âš ī¸ Network Resilience

If a client drops connection, it will automatically fetch the latest config on reconnection. No state is lost.

🔄 Versioning & Rollback

Every configuration change creates an immutable, timestamped version. You can inspect diffs, audit changes, and instantly rollback to any previous state without redeploying your application.

Terminal
$ appconfig versions list ✅ v12.4.1 (active) published 2h ago by @dev_ops đŸ“Ļ v12.4.0 published 1d ago by @sarah_k đŸ“Ļ v12.3.9 published 3d ago by @ci_pipeline $ appconfig rollback v12.4.0 🔙 Rolling back to v12.4.0... ✅ All 42 instances updated successfully.

🔐 Secrets Management

Sensitive values (API keys, database passwords, JWT secrets) are stored separately from configuration and never logged or cached in plaintext. They are encrypted at rest using AES-256-GCM and transmitted via TLS 1.3.

Access is controlled via role-based policies. You can define who can view, edit, or inject secrets into specific environments.

đŸ“Ļ SDK Integration

Our first-party SDKs handle connection management, retry logic, and hot-reloading automatically. Supported runtimes include Node.js, Python, Go, Java, and Rust.

app.js (Node.js)
import { ConfigClient } from '@appconfig/sdk'; const client = new ConfigClient({ project: 'my-app', environment: process.env.'NODE_ENV', apiKey: process.env.'AC_JWT' }); await client.connect(); client.on('change', (config) => { console.log('Config updated:', config.features); app.reloadMiddleware(config); });