Meltano 4.3.0 - State Export and JSON Logging


The Meltano project published v4.3.0 on 21 September 2026. meltano state export and meltano state import move state between backends, which is the change that matters for incremental loads. The same tag adds a Google Cloud Logging JSON formatter, and meltano config list prints a shorter default.

The full release notes and downloads are on the GitHub release page. This tag is a final release, not a prerelease. The notes also add meltano cloud auth login, meltano hub list, and meltano plugin list. The rest of this post covers state, logs, installs, and two upgrade breaks.

Incremental loads go wrong when state sits in the wrong store. Issue 10020 adds meltano state export and meltano state import so a project can move state between backends without a local script. The notes do not describe a dry run, a merge, or what import does when that state ID already exists. Keep the export until a later load has read it.

Filesystem listings are quieter. Issue 10036 cuts log noise when Meltano lists state IDs from a filesystem backend. A cron job or a CI step that parses the listing should see fewer extra lines on stderr. Compare output before you trust a parser.

MELTANO_RUN_FORCE stands in for meltano run --force. Issue 10148 adds the variable for schedulers that pass an environment and do not want another argument on the command line. It is not a new run mode. Set it only on jobs that already pass --force. Help for meltano run groups options by category, including state and installation, in issue 9950. That change is help text.

Issue 10058 adds a Google Cloud Logging JSON formatter. A pipeline that ships stderr into Cloud Logging can use that formatter instead of reshaping another JSON line in a side process. The release notes do not name the setting that selects it.

Issue 10100 puts stdlib logging extra values on the JSON object when the JSON formatter is in use. Those fields were absent from the object before. Issue 10120 unifies formatter configuration between logging.yaml and the default presets, including colored and json. Diff a custom logging.yaml against the presets after you upgrade.

Meltano parses structured logs from mapper plugins in issue 9992, and Singer SDK logs keep exception notes in issue 10075. Pipelinewise plugin logs were swallowed until issue 10104 set the root logger level. Singer stdout is logged at DEBUG only when the stdlib logger is enabled for DEBUG. Issue 10013 stops that check from using the structlog logger.

Meltano honors FORCE_COLOR in issue 10139 and disables color when stderr is not a TTY in issue 10118. A redirect to a file, or a read through kubectl logs, stays free of ANSI codes. Set FORCE_COLOR if a wrapper uses a pipe and you still want color. Bytes in plugin logs that are not valid Unicode are handled in issue 9875.

Plugin installs read a .python-version file. Issue 10283 adds that. If the file names an interpreter the plugin virtualenvs were not on, the next install follows the file. Check it before you roll v4.3.0 out to hosts that only kept the file for a local tool. meltano invoke accepts --refresh-catalog in issue 10181. The notes do not say the flag replaces meltano run. Setting names can escape dots in issue 10191. The notes do not show the escape syntax.

include_paths cannot leave the project root. Issue 10182 blocks that. A path such as ../shared.yml fails, so a shared file outside the project has to move inside it.

Meltano creates new .env files with mode 0600 in issue 10167. An existing file can keep its old mode. Check it when another account can read the project. A new file is not group readable. --env-file is honored, and a custom dotenv file stays on the project, in issue 10029. Child settings inherit env_override from the parent in issue 10049.

SIGTERM reaches plugin subprocesses in issue 10155. Kubernetes sends that signal on pod delete. A parent that exited and left a tap or target running was dropping it, and the child gets it now. A job that finished only because the child outlived Meltano was relying on the bug. The early systemdb test closes its connection in issue 10319.

The under the hood section is mostly internal refactor. It does not change a pipeline run. Docs edits and the React bump do not change the CLI.

Two changes break scripts and Python imports.

meltano config list shows a subset of settings by default and sorts them by section. Issue 9994 narrows the default. Issue 9929 sorts by section. A script that scraped the full default listing, or that depended on the old order, sees fewer rows in a new order. The notes do not name a flag that prints every setting. Read the help for meltano config list before you automate against it.

The project removed meltano.__version__. Call meltano.core.utils.get_meltano_version instead. Issue 10163 is that removal. A wrapper that imported meltano.__version__ fails at import time. The CLI version output is not what breaks.