EnvWizard v0 → v1 Migration

This guide covers migrating from v0 behavior to v1.

Who should migrate?

Migrate if you want:

  • explicit environment precedence

  • nested dataclass support in env loading

  • clearer aliasing rules

If your v0 config is flat and stable, there is no urgency.

Step 1: Opt into v1

class Config(EnvWizard):
    class _(EnvWizard.Meta):
        v1 = True

    token: str

Step 2: Turn on v1 debug (temporary)

class _(EnvWizard.Meta):
    v1_debug = True

Step 3: Verify precedence assumptions

v1 uses explicit precedence. Default:

Secrets → Environment → Dotenv

If your v0 behavior relied on dotenv overriding env vars, set precedence explicitly in v1.

from dataclass_wizard import EnvPrecedence

class _(EnvWizard.Meta):
    v1_env_precedence = EnvPrecedence.DOTENV_ENV_SECRETS

Step 4: Migrate aliases

v0 aliasing:

  • field_to_env_var

v1 aliasing:

  • load-only: v1_field_to_env_load

  • dump-only: v1_field_to_alias_dump

Example:

class _(EnvWizard.Meta):
    v1_field_to_env_load = {"db_url": ["DATABASE_URL", "DB_URL"]}
    v1_field_to_alias_dump = {"db_url": "databaseUrl"}

Step 5: Nested dataclasses

If you previously flattened configs due to v0 limitations, you can now model them directly.

class DB(EnvWizard):
    host: str
    port: int

class Config(EnvWizard):
    db: DB

Step 6: Remove debug

Once stable, disable debug to avoid log noise.

class _(EnvWizard.Meta):
    v1_debug = False