Skip to content

JSON Patch

Flavors use JSON Patch (RFC 6902) to modify configurations. This page explains the available operations.

Each patch operation has:

  • op - The operation type
  • path - JSON Pointer to the target location
  • value - The new value (for add/replace)

Changes an existing value:

patches:
- op: replace
path: /env/NODE_ENV
value: production

Before:

env:
NODE_ENV: development

After:

env:
NODE_ENV: production

Note: The path must exist. Replacing a non-existent path is an error.

Adds a new property:

patches:
- op: add
path: /env/NEW_VAR
value: "hello"

Before:

env:
NODE_ENV: development

After:

env:
NODE_ENV: development
NEW_VAR: hello

You can also add to nested paths:

patches:
- op: add
path: /defaults/docker/buildArgs/VERSION
value: "1.0.0"

Removes a property:

patches:
- op: remove
path: /env/DEBUG

Before:

env:
NODE_ENV: development
DEBUG: "true"

After:

env:
NODE_ENV: development

Paths use JSON Pointer format:

PathTarget
/env/NODE_ENVconfig.env.NODE_ENV
/defaults/docker/targetconfig.defaults.docker.target
/components/api/resources/image/params/targetDeeply nested value

Special characters in keys must be escaped:

  • ~0 for ~
  • ~1 for /

Patches are applied in order:

flavors:
production:
patches:
# First, change the environment
- op: replace
path: /env/NODE_ENV
value: production
# Then, adjust logging
- op: replace
path: /env/LOG_LEVEL
value: warn
# Finally, change the Docker target
- op: replace
path: /defaults/docker/target
value: production
- op: replace
path: /defaults/docker/target
value: production

Build for a specific architecture (useful for CI/CD targeting production servers):

- op: add
path: /defaults/docker/platform
value: linux/amd64

Common platform values: linux/amd64, linux/arm64, linux/arm/v7.

- op: add
path: /defaults/docker/buildArgs
value:
VERSION: "1.0.0"
BUILD_DATE: "2024-01-01"
- op: replace
path: /env/FEATURE_FLAG
value: "false"

Continue to Using Flavors to see how to use flavors in practice.