Meltano 4.0 Migration Guide
The following guide covers breaking changes and migration steps for Meltano version 4.0.0.
Breaking Changes
Python 3.9 support dropped
Meltano 4.0 requires Python 3.10 or later. If you are still using Python 3.9, upgrade to Python 3.10, 3.11, 3.12, 3.13, or 3.14 before upgrading Meltano.
Docker image changes
The psycopg2 extra has been removed from Meltano's Docker images to reduce image size. If you need PostgreSQL support in Docker, install it explicitly:
FROM meltano/meltano:latest
RUN uv pip install psycopg2-binary
Alternatively, use the postgres extra and the postgresql+psycopg URI scheme with psycopg3.
Removed Deprecated Features
Deprecated CLI flags and arguments
The following deprecated CLI options have been removed:
meltano lock --allflag (usemeltano lockwithout flags, as it locks all plugins by default)meltano install - <plugin_name>syntax (usemeltano install <plugin_name>)- Plugin type positional argument in various commands (use
--plugin-typeoption instead)
Update your scripts and workflows to use the new syntax before upgrading.
Console output changes
The default console logger now displays fewer keys to reduce visual clutter. If you rely on specific keys being displayed, you can customize the output format using custom logging configuration.
Config command argument order
The order of positional arguments for meltano config subcommands has changed. The plugin name now comes before the setting name:
# Old
meltano config set <setting> <plugin_name> <value>
# New
meltano config set <plugin_name> <setting> <value>
This change makes the command more intuitive and consistent with other Meltano commands.
Plugin logger naming
Plugin subprocess loggers have been renamed from meltano.runner.<plugin_name> to meltano.plugins.<stream>.<type>.<name>, where <stream> is either stdout or stderr. This separates standard output and error streams into distinct loggers.
If you have custom logging configurations that filter on logger names, update them to use the new naming scheme:
# Old
loggers:
meltano.runner.tap-github:
level: INFO
# New
loggers:
meltano.plugins.stdout.extractor.tap-github:
level: INFO
Schedule start_date removed
The start_date attribute has been removed from schedule definitions in meltano.yml. This attribute was unused by Meltano and should be removed from your schedule configurations.
Platform-dependent log location
Meltano now stores logs in a platform-appropriate location following OS conventions. On macOS, logs are stored in ~/Library/Logs/Meltano. On Linux, they're in ~/.local/state/meltano/logs. Use the meltano logs command to view job logs easily.
Auto-lock plugin definitions
Plugin definitions are now automatically locked when you add or update plugins, ensuring reproducible deployments without manual meltano lock invocations.
Migration Checklist
- Verify you're running Python 3.10 or later
- Update any custom logging configurations to use new logger names
- Remove
start_datefrom schedule definitions inmeltano.yml - Update scripts using deprecated CLI syntax:
- Replace
meltano lock --allwithmeltano lock - Replace
meltano install - <plugin>withmeltano install <plugin> - Replace positional plugin type arguments with
--plugin-type
- Replace
- Update
meltano configcommands to use new argument order - If using Docker with PostgreSQL, add explicit
psycopg2-binaryinstallation - Test your pipelines in a development environment before upgrading production
For a complete list of changes, see the v4.0.0 changelog.