Skip to main content
Every baton connector uses a type-safe configuration system. Configuration flows through three layers:
  1. CLI flags (--domain example.com)
  2. Environment variables (BATON_DOMAIN=example.com)
  3. Config files (YAML)
CLI flags take precedence over environment variables, which take precedence over config files.

Standard flags (all connectors)

Every connector automatically has these flags via the SDK.

Output and logging

Daemon mode (service)

Provisioning operations

Account management

Targeted sync

Opentelemetry (operators)

Environment variables

All flags map to environment variables with the BATON_ prefix:
Rules:
  • Prefix: BATON_
  • Dashes become underscores: --base-dn -> BATON_BASE_DN
  • Case insensitive: BATON_DOMAIN = baton_domain
Example:

Config file format

Connectors can read YAML config files:
Config file locations (checked in order):
  1. Path specified via --config flag
  2. ./baton.yaml
  3. ~/.baton/config.yaml

Field types

When building a connector, you define fields using these types:

StringField

CLI: --domain example.okta.com Env: BATON_DOMAIN=example.okta.com

BoolField

CLI: --ldaps or --ldaps=true Env: BATON_LDAPS=true

IntField

CLI: --port 636 Env: BATON_PORT=636

StringSliceField

CLI: --skip-groups "Group1" --skip-groups "Group2" Env: BATON_SKIP_GROUPS="Group1,Group2"

SelectField (enum)

CLI: --auth-type oauth

Field options

Required fields

Error if missing: required flag "api-key" not set

Secret fields

Secrets are:
  • Not printed in debug logs
  • Masked as *** in GUI
  • Stored securely in config

Default values

Hidden fields

Shorthand flags

Validation rules

String validation

Integer validation

Field relationships

Required together

Both must be provided or neither:

Mutually exclusive

Only one can be provided:

At least one required

Dependent fields

Configuration precedence

When the same setting is specified multiple ways:

Quick reference

Common patterns

Check connector-specific flags