dfx.json Schema
This is the schema reference for dfx.json in JSON Schema format.
To download the schema, save this file.
To generate the schema to a file yourself, use dfx schema --outfile path/to/outfile.json as described in the dfx schema reference.
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "dfx.json",
  "type": "object",
  "properties": {
    "canisters": {
      "description": "Mapping between canisters and their settings.",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": {
        "$ref": "#/definitions/ConfigCanistersCanister"
      }
    },
    "defaults": {
      "description": "Defaults for dfx start.",
      "anyOf": [
        {
          "$ref": "#/definitions/ConfigDefaults"
        },
        {
          "type": "null"
        }
      ]
    },
    "dfx": {
      "title": "dfx version",
      "description": "Pins the dfx version for this project.",
      "type": [
        "string",
        "null"
      ]
    },
    "networks": {
      "description": "Mapping between network names and their configurations. Networks 'ic' and 'local' are implicitly defined.",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": {
        "$ref": "#/definitions/ConfigNetwork"
      }
    },
    "profile": {
      "anyOf": [
        {
          "$ref": "#/definitions/Profile"
        },
        {
          "type": "null"
        }
      ]
    },
    "version": {
      "description": "Used to keep track of dfx.json versions.",
      "type": [
        "integer",
        "null"
      ],
      "format": "uint32",
      "minimum": 0.0
    }
  },
  "definitions": {
    "BitcoinAdapterLogLevel": {
      "description": "Represents the log level of the bitcoin adapter.",
      "type": "string",
      "enum": [
        "critical",
        "error",
        "warning",
        "info",
        "debug",
        "trace"
      ]
    },
    "CanisterDeclarationsConfig": {
      "title": "Declarations Configuration",
      "description": "Configurations about which canister interface declarations to generate, and where to generate them.",
      "type": "object",
      "properties": {
        "bindings": {
          "title": "Languages to generate",
          "description": "A list of languages to generate type declarations. Supported options are 'js', 'ts', 'did', 'mo'. Default is ['js', 'ts', 'did'].",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          }
        },
        "env_override": {
          "title": "Canister ID ENV Override",
          "description": "A string that will replace process.env.{canister_name_uppercase}_CANISTER_ID in the 'src/dfx/assets/language_bindings/canister.js' template.",
          "type": [
            "string",
            "null"
          ]
        },
        "node_compatibility": {
          "title": "Node compatibility flag",
          "description": "Flag to pre-populate generated declarations with better defaults for various types of projects Default is false",
          "default": false,
          "type": "boolean"
        },
        "output": {
          "title": "Declaration Output Directory",
          "description": "Directory to place declarations for that canister. Default is 'src/declarations/<canister_name>'.",
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "ConfigCanistersCanister": {
      "title": "Canister Configuration",
      "description": "Configurations for a single canister.",
      "type": "object",
      "oneOf": [
        {
          "title": "Rust-Specific Properties",
          "type": "object",
          "required": [
            "candid",
            "package",
            "type"
          ],
          "properties": {
            "candid": {
              "title": "Candid File",
              "description": "Path of this canister's candid interface declaration.",
              "type": "string"
            },
            "package": {
              "title": "Package Name",
              "description": "Name of the rust package that compiles to this canister's WASM.",
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "rust"
              ]
            }
          }
        },
        {
          "title": "Asset-Specific Properties",
          "type": "object",
          "required": [
            "source",
            "type"
          ],
          "properties": {
            "source": {
              "title": "Asset Source Folder",
              "description": "Folders from which assets are uploaded.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "type": {
              "type": "string",
              "enum": [
                "assets"
              ]
            }
          }
        },
        {
          "title": "Custom-Specific Properties",
          "type": "object",
          "required": [
            "build",
            "candid",
            "type",
            "wasm"
          ],
          "properties": {
            "build": {
              "title": "Build Commands",
              "description": "Commands that are executed in order to produce this canister's WASM module. Expected to produce the WASM in the path specified by the 'wasm' field.",
              "allOf": [
                {
                  "$ref": "#/definitions/SerdeVec_for_String"
                }
              ]
            },
            "candid": {
              "title": "Candid File",
              "description": "Path to this canister's candid interface declaration.  A URL to a candid file is also acceptable.",
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "custom"
              ]
            },
            "wasm": {
              "title": "WASM Path",
              "description": "Path to WASM to be installed. URLs to a WASM module are also acceptable.",
              "type": "string"
            }
          }
        },
        {
          "title": "Motoko-Specific Properties",
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "motoko"
              ]
            }
          }
        }
      ],
      "properties": {
        "args": {
          "title": "Canister Argument",
          "description": "This field defines a static argument to use when deploying the canister.",
          "type": [
            "string",
            "null"
          ]
        },
        "declarations": {
          "title": "Declarations Configuration",
          "description": "Defines which canister interface declarations to generate, and where to generate them.",
          "default": {
            "bindings": null,
            "env_override": null,
            "node_compatibility": false,
            "output": null
          },
          "allOf": [
            {
              "$ref": "#/definitions/CanisterDeclarationsConfig"
            }
          ]
        },
        "dependencies": {
          "title": "Dependencies",
          "description": "Defines on which canisters this canister depends on.",
          "default": [],
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "frontend": {
          "title": "Force Frontend URL",
          "description": "Mostly unused. If this value is not null, a frontend URL is displayed after deployment even if the canister type is not 'asset'.",
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": "string"
          }
        },
        "initialization_values": {
          "title": "Resource Allocation Settings",
          "description": "Defines initial values for resource allocation settings.",
          "default": {
            "compute_allocation": null,
            "freezing_threshold": null,
            "memory_allocation": null
          },
          "allOf": [
            {
              "$ref": "#/definitions/InitializationValues"
            }
          ]
        },
        "main": {
          "title": "Path to Canister Entry Point",
          "description": "Entry point for e.g. Motoko Compiler.",
          "type": [
            "string",
            "null"
          ]
        },
        "post_install": {
          "title": "Post-Install Commands",
          "description": "One or more commands to run post canister installation.",
          "default": [],
          "allOf": [
            {
              "$ref": "#/definitions/SerdeVec_for_String"
            }
          ]
        },
        "remote": {
          "title": "Remote Configuration",
          "description": "Used to mark the canister as 'remote' on certain networks.",
          "default": null,
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigCanistersCanisterRemote"
            },
            {
              "type": "null"
            }
          ]
        },
        "shrink": {
          "title": "Shrink Canister WASM",
          "description": "Whether run `ic-wasm shrink` after building the Canister. Default is true.",
          "default": true,
          "type": "boolean"
        }
      }
    },
    "ConfigCanistersCanisterRemote": {
      "title": "Remote Canister Configuration",
      "description": "This field allows canisters to be marked 'remote' for certain networks. On networks where this canister contains a remote ID, the canister is not deployed. Instead it is assumed to exist already under control of a different project.",
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "candid": {
          "title": "Remote Candid File",
          "description": "On networks where this canister is marked 'remote', this candid file is used instead of the one declared in the canister settings.",
          "type": [
            "string",
            "null"
          ]
        },
        "id": {
          "title": "Network to Remote ID Mapping",
          "description": "This field contains mappings from network names to remote canister IDs (Principals). For all networks listed here, this canister is considered 'remote'.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "ConfigDefaults": {
      "description": "Defaults to use on dfx start.",
      "type": "object",
      "properties": {
        "bitcoin": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigDefaultsBitcoin"
            },
            {
              "type": "null"
            }
          ]
        },
        "bootstrap": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigDefaultsBootstrap"
            },
            {
              "type": "null"
            }
          ]
        },
        "build": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigDefaultsBuild"
            },
            {
              "type": "null"
            }
          ]
        },
        "canister_http": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigDefaultsCanisterHttp"
            },
            {
              "type": "null"
            }
          ]
        },
        "replica": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigDefaultsReplica"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "ConfigDefaultsBitcoin": {
      "title": "Bitcoin Adapter Configuration",
      "type": "object",
      "properties": {
        "enabled": {
          "title": "Enable Bitcoin Adapter",
          "default": false,
          "type": "boolean"
        },
        "log_level": {
          "title": "Logging Level",
          "description": "The logging level of the adapter.",
          "default": "info",
          "allOf": [
            {
              "$ref": "#/definitions/BitcoinAdapterLogLevel"
            }
          ]
        },
        "nodes": {
          "title": "Available Nodes",
          "description": "Addresses of nodes to connect to (in case discovery from seeds is not possible/sufficient).",
          "default": null,
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ConfigDefaultsBootstrap": {
      "title": "Bootstrap Server Configuration",
      "type": "object",
      "properties": {
        "ip": {
          "description": "Specifies the IP address that the bootstrap server listens on. Defaults to 127.0.0.1.",
          "default": "127.0.0.1",
          "type": "string",
          "format": "ip"
        },
        "port": {
          "description": "Specifies the port number that the bootstrap server listens on. Defaults to 8081.",
          "default": 8081,
          "type": "integer",
          "format": "uint16",
          "minimum": 0.0
        },
        "timeout": {
          "description": "Specifies the maximum number of seconds that the bootstrap server will wait for upstream requests to complete. Defaults to 30.",
          "default": 30,
          "type": "integer",
          "format": "uint64",
          "minimum": 0.0
        }
      }
    },
    "ConfigDefaultsBuild": {
      "title": "Build Process Configuration",
      "type": "object",
      "properties": {
        "args": {
          "description": "Arguments for packtool.",
          "type": [
            "string",
            "null"
          ]
        },
        "packtool": {
          "description": "Main command to run the packtool.",
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "ConfigDefaultsCanisterHttp": {
      "title": "HTTP Adapter Configuration",
      "type": "object",
      "properties": {
        "enabled": {
          "title": "Enable HTTP Adapter",
          "default": true,
          "type": "boolean"
        },
        "log_level": {
          "title": "Logging Level",
          "description": "The logging level of the adapter.",
          "default": "error",
          "allOf": [
            {
              "$ref": "#/definitions/HttpAdapterLogLevel"
            }
          ]
        }
      }
    },
    "ConfigDefaultsReplica": {
      "title": "Local Replica Configuration",
      "type": "object",
      "properties": {
        "log_level": {
          "description": "Run replica with the provided log level. Default is 'error'. Debug prints still get displayed",
          "anyOf": [
            {
              "$ref": "#/definitions/ReplicaLogLevel"
            },
            {
              "type": "null"
            }
          ]
        },
        "port": {
          "description": "Port the replica listens on.",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint16",
          "minimum": 0.0
        },
        "subnet_type": {
          "title": "Subnet Type",
          "description": "Determines the subnet type the replica will run as. Affects things like cycles accounting, message size limits, cycle limits. Defaults to 'application'.",
          "anyOf": [
            {
              "$ref": "#/definitions/ReplicaSubnetType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "ConfigLocalProvider": {
      "title": "Local Replica Configuration",
      "type": "object",
      "properties": {
        "bind": {
          "description": "Bind address for the webserver. For the shared local network, the default is 127.0.0.1:4943. For project-specific local networks, the default is 127.0.0.1:8000.",
          "type": [
            "string",
            "null"
          ]
        },
        "bitcoin": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigDefaultsBitcoin"
            },
            {
              "type": "null"
            }
          ]
        },
        "bootstrap": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigDefaultsBootstrap"
            },
            {
              "type": "null"
            }
          ]
        },
        "canister_http": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigDefaultsCanisterHttp"
            },
            {
              "type": "null"
            }
          ]
        },
        "replica": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConfigDefaultsReplica"
            },
            {
              "type": "null"
            }
          ]
        },
        "type": {
          "description": "Persistence type of this network.",
          "default": "ephemeral",
          "allOf": [
            {
              "$ref": "#/definitions/NetworkType"
            }
          ]
        }
      }
    },
    "ConfigNetwork": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConfigNetworkProvider"
        },
        {
          "$ref": "#/definitions/ConfigLocalProvider"
        }
      ]
    },
    "ConfigNetworkProvider": {
      "title": "Custom Network Configuration",
      "type": "object",
      "required": [
        "providers"
      ],
      "properties": {
        "providers": {
          "description": "The URL(s) this network can be reached at.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "type": {
          "description": "Persistence type of this network.",
          "default": "persistent",
          "allOf": [
            {
              "$ref": "#/definitions/NetworkType"
            }
          ]
        }
      }
    },
    "HttpAdapterLogLevel": {
      "description": "Represents the log level of the HTTP adapter.",
      "type": "string",
      "enum": [
        "critical",
        "error",
        "warning",
        "info",
        "debug",
        "trace"
      ]
    },
    "InitializationValues": {
      "title": "Initial Resource Allocations",
      "type": "object",
      "properties": {
        "compute_allocation": {
          "title": "Compute Allocation",
          "description": "Must be a number between 0 and 100, inclusively. It indicates how much compute power should be guaranteed to this canister, expressed as a percentage of the maximum compute power that a single canister can allocate.",
          "default": null,
          "anyOf": [
            {
              "$ref": "#/definitions/PossiblyStr_for_uint64"
            },
            {
              "type": "null"
            }
          ]
        },
        "freezing_threshold": {
          "title": "Freezing Threshold",
          "description": "Freezing threshould of the canister, measured in seconds. Valid inputs are numbers (seconds) or strings parsable by humantime (e.g. \"15days 2min 2s\").",
          "default": null,
          "type": [
            "string",
            "null"
          ]
        },
        "memory_allocation": {
          "title": "Memory Allocation",
          "description": "Maximum memory (in bytes) this canister is allowed to occupy.",
          "default": null,
          "type": [
            "integer",
            "null"
          ],
          "format": "uint64",
          "minimum": 0.0
        }
      }
    },
    "NetworkType": {
      "title": "Network Type",
      "description": "Type 'ephemeral' is used for networks that are regularly reset. Type 'persistent' is used for networks that last for a long time and where it is preferred that canister IDs get stored in source control.",
      "type": "string",
      "enum": [
        "ephemeral",
        "persistent"
      ]
    },
    "PossiblyStr_for_uint64": {
      "type": "integer",
      "format": "uint64",
      "minimum": 0.0
    },
    "Profile": {
      "type": "string",
      "enum": [
        "Debug",
        "Release"
      ]
    },
    "ReplicaLogLevel": {
      "type": "string",
      "enum": [
        "critical",
        "error",
        "warning",
        "info",
        "debug",
        "trace"
      ]
    },
    "ReplicaSubnetType": {
      "type": "string",
      "enum": [
        "system",
        "application",
        "verifiedapplication"
      ]
    },
    "SerdeVec_for_String": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    }
  }
}