Skip to main content
October2025

2025 Q4 Updates and Changes

Meltano

We're excited to announce the release of Meltano 4.0! This major version includes improvements to logging, state management, and developer experience.

See the v4.0.0 migration guide for detailed upgrade instructions. To upgrade to the latest version, follow the installation guide.

Distribution

Python 3.10+ Required

  • Python 3.9 reaches end of life on 2025-10, and the Python ecosystem is moving on to newer versions. To keep up with the latest features and security fixes, we've dropped support for Python 3.9.
  • Python 3.14 (released 2025-10-07) is now officially supported.

Docker images

The psycopg2 extra has been removed from Meltano's Docker images to reduce image size. This package is maintained but not receiving any new feature, so the psycopg3 package is preferred.

New "slim" Docker images are available. These images are smaller than the default images and only include the essential packages for running Meltano. See https://hub.docker.com/r/meltano/meltano/tags for the full list of tags.

Logging

Structured Logging

Meltano will now parse and render structured logs from plugins that advertise the structured_logging capability. Among other things, this means:

  • that plugin exceptions will be rendered in the console output
  • the log level as emitted by the plugin will be honored

New and up-to-date extractors and loaders based on the Singer SDK now advertise the structured_logging capability, so they're compatible with Meltano 4.0 structured logging out of the box.

/projects $ meltano init try-meltano-4
/projects $ cd try-meltano-4
/projects/try-meltano-4 $ meltano add tap-fedidb target-csv
/projects/try-meltano-4 $ meltano select tap-fedidb # select all streams and properties
/projects/try-meltano-4 $ meltano select tap-fedidb --exclude servers # but exclude the servers stream
/projects/try-meltano-4 $ meltano run tap-fedidb target-csv
2025-10-17T18:38:59.967561Z [info ] Environment 'dev' is active
2025-10-17T18:39:00.114214Z [info ] Running job with name 'dev:tap-fedidb-to-target-csv' and run ID '0199f377-d1cd-73b5-8cf3-21501d1df1b1'
2025-10-17T18:39:00.172674Z [info ] Using systemdb state backend
2025-10-17T18:39:00.387700Z [info ] tap-fedidb v0.5.0, Meltano SDK v0.50.2 name=tap-fedidb
2025-10-17T18:39:00.387986Z [info ] Skipping parse of env var settings... name=tap-fedidb
2025-10-17T18:39:00.388546Z [info ] Beginning full_table sync of 'popular_accounts' name=tap-fedidb
2025-10-17T18:39:00.404188Z [info ] target-csv v0.2.1, Meltano SDK v0.50.2 name=target-csv
2025-10-17T18:39:00.404340Z [info ] Skipping parse of env var settings... name=target-csv
2025-10-17T18:39:00.407237Z [info ] Writing to destination file '/projects/try-meltano-4/popular_accounts.csv'... name=target-csv
2025-10-17T18:39:00.655493Z [info ] METRIC metric_name=http_request_duration metric_value=0.262111 name=tap-fedidb
2025-10-17T18:39:00.687525Z [info ] METRIC metric_name=http_request_count metric_value=1 name=tap-fedidb
2025-10-17T18:39:00.687787Z [info ] METRIC metric_name=sync_duration metric_value=0.2988448143005371 name=tap-fedidb
2025-10-17T18:39:00.687899Z [info ] METRIC metric_name=record_count metric_value=136 name=tap-fedidb
2025-10-17T18:39:00.687992Z [info ] Skipping deselected stream 'servers'. name=tap-fedidb
2025-10-17T18:39:00.688076Z [info ] Beginning full_table sync of 'software' name=tap-fedidb
2025-10-17T18:39:00.697430Z [info ] Writing to destination file '/projects/try-meltano-4/software.csv'... name=target-csv
2025-10-17T18:39:00.920552Z [info ] METRIC metric_name=http_request_duration metric_value=0.229912 name=tap-fedidb
2025-10-17T18:39:00.944498Z [info ] METRIC metric_name=http_request_count metric_value=1 name=tap-fedidb
2025-10-17T18:39:00.944842Z [info ] METRIC metric_name=sync_duration metric_value=0.25652623176574707 name=tap-fedidb
2025-10-17T18:39:00.945004Z [info ] METRIC metric_name=record_count metric_value=63 name=tap-fedidb
2025-10-17T18:39:00.975334Z [info ] Reader 'target-csv' completed processing 203 lines of input (2 schemas, 199 records, 0 batch manifests, 2 state messages, 0 activate version messages). name=target-csv
2025-10-17T18:39:00.981157Z [info ] Appending 136 records to file... name=target-csv
2025-10-17T18:39:00.981449Z [info ] Appending 63 records to file... name=target-csv
2025-10-17T18:39:00.984365Z [info ] METRIC metric_name=batch_processing_time metric_value=0.0030138492584228516 name=target-csv
2025-10-17T18:39:00.984991Z [info ] METRIC metric_name=batch_processing_time metric_value=0.0040929317474365234 name=target-csv
2025-10-17T18:39:00.993061Z [info ] METRIC metric_name=record_count metric_value=136 name=target-csv
2025-10-17T18:39:00.993263Z [info ] METRIC metric_name=record_count metric_value=63 name=target-csv
2025-10-17T18:39:00.999113Z [info ] Using systemdb state backend
2025-10-17T18:39:01.002207Z [info ] Incremental state has been updated at 2025-10-17 18:39:01.002179+00:00.
2025-10-17T18:39:01.028876Z [info ] Block run completed
2025-10-17T18:39:01.029042Z [info ] Run completed

Also, plugin subprocess loggers have been renamed to meltano.plugins.<stream>.<type>.<name>, where <stream> is either stdout or stderr. This separates standard output and error streams into distinct loggers.

Subcommand

A new meltano logs command has been added to view and manage job logs:

meltano logs --help

Console Output

The default console logger now displays fewer keys to reduce visual clutter. The keys can customized using a logging configuration file. This should make it easier to read the logs and focus on the important information.

Note that the JSON formatter still includes all the keys.

Storage

Meltano now stores logs in a platform-appropriate location following OS conventions. Check the location in your platform with the meltano logs dir command.

Configuration Management

The order of positional arguments for meltano config subcommands has changed. The plugin name now comes after the subcommand:

# Old
meltano config <plugin_name> set <setting> <value>

# New
meltano config set <plugin_name> <setting> <value>

Other Improvements

  • Plugin definitions are now automatically locked if the lockfile is missing. This removes the need to run meltano lock for working on a legacy project.
  • A new meltano state edit command has been added to manually edit the state of a given state ID.
  • The meltano state get and meltano state set commands now output and accept state in a more compact format.
  • Loaders now support the meltano config test command to test the loader's configuration.
  • Support for custom .env file locations has been added: meltano --env-file <path> ....
  • A new requires_meltano key has been added to the project level of the meltano.yml file. This key can be used to require a specific version of Meltano to be installed.

Thank You

Thank you to all the contributors who made this release possible!

For the complete list of changes, see the full release notes.

MeltanoHub

Extractors

  • Added the renesteeman variant of tap-linear - Hub Link

SDK

We shipped 2 minor releases of the SDK during Q3:

These releases contain mostly improvements for downstream log consumers.