Skip to main content
Back to Blog

Using JSON for Configuration: Best Practices & Patterns

2026-04-30 6 min read

JSON is ideal for application configuration because it's human-readable, language-agnostic, and easily parsed. A well-structured configuration file can significantly simplify deployment, environment management, and feature flags.

Configuration File Structure

config.json example
{
  "app": {
    "name": "My API",
    "version": "1.0.0",
    "port": 3000,
    "debug": false
  },
  "database": {
    "host": "localhost",
    "port": 5432,
    "name": "mydb",
    "pool": {
      "min": 2,
      "max": 10
    }
  },
  "features": {
    "analyticsEnabled": true,
    "cachingEnabled": false
  }
}

Environment-Specific Config

  • config.development.json — local dev settings (localhost, verbose logging)
  • config.staging.json — staging environment (test DB, some monitoring)
  • config.production.json — production settings (encrypted secrets, strict limits)

Secrets Management

Never commit secrets to version control. Store sensitive values (API keys, database passwords) in environment variables, and reference them from your JSON config.

Safe config with env var reference
{
  "database": {
    "password": "{{DB_PASSWORD}}",
    "username": "{{DB_USER}}"
  }
}

Validation best practice

On app startup, parse and validate your config with a schema (Zod, Pydantic, etc.). Fail fast if config is invalid or missing required fields.

Design your configuration

Use our formatter to structure and validate your JSON config files.