/ Docs

Creating config

Developing a DipDup indexer begins with creating a YAML config file of a specific format. DipDup expects it to be located in the project root and named dipdup.yaml. However, you can provide any path with a -c CLI option.


Config consists of multiple top-level mappings. In the table below they are grouped by sections for convenience, but in the config file, they can be in any order. The only required section is Header.

See Config reference guide for the full list of available options.

Headerspec_version*DipDup project specification; currently "2.0"
package*Python package name
InventorydatabaseDatabase configuration
contractsContracts that need to be indexed
datasourcesDatasources to gather information from
IndexesindexesIndex definitions
templatesAlso index definitions, but with placeholders that make them reusable
HookshooksCallbacks to run manually or by schedule
jobsSchedules for hooks
IntegrationshasuraHasura GraphQL Engine configuration
sentrySentry configuration
prometheusPrometheus configuration
MiscellaneousadvancedTunables that affect framework behavior
customMapping of user-defined values; neither typed nor validated
loggingConfigure logging verbosity

Merging multiple files

DipDup allows you to customize the configuration for a specific environment or workflow. It works similarly to docker-compose anchors but only for top-level sections. If you want to override a nested property, you need to recreate a whole top-level section. To merge several DipDup config files, provide the -c command-line option multiple times:

dipdup -c dipdup.yaml -c configs/dipdup.sqlite.yaml run

Use config export and config env commands to check the resulting config used by DipDup.

Environment variables

DipDup supports compose-style variable expansion with an optional default value. Use this feature to store sensitive data outside of the configuration file and make your app fully declarative. If a required variable is not set, DipDup will fail with an error. You can use these placeholders anywhere throughout the configuration file.

  kind: postgres
  host: ${POSTGRES_HOST:-localhost}
  password: ${POSTGRES_PASSWORD}

There are multiple ways to pass environment variables to DipDup:

  • Export them in the shell before running DipDup
  • Create the env file and pass it to DipDup with the -e CLI option

For every config file in the deploy project directory, DipDup will create a corresponding .env.default file with all the variables used in the config. Copy it, remove the .default suffix and fill in the values.


You can use dipdup -e .env config export --unsafe command to ensure that env variables resolve as expected, but avoid sharing the output with third parties.

Contract typenames

typename is an alias for the particular contract script, meaning that two contracts sharing the same code can have the same type name. If this field is not set, a contract alias will be used instead.

    kind: tezos
    address: KT1CiSKXR68qYSxnbzjwvfeMCRburaSDonT2
    typename: quipu_fa12
    kind: tezos
    address: KT1N1wwNPqT5jGhM91GQ2ae5uY8UzFaXHMJS
    typename: quipu_fa12

If multiple contracts you index have the same interface but different code, see F.A.Q. to learn how to avoid conflicts.

Help and tips -> Join our Discord
Ideas or suggestions -> Issue Tracker