<#9872 feature: Sort settings meaningfully in melt...
# meltano-repo-activity
g
#9872 feature: Sort settings meaningfully in meltano config list Issue created by mahangu Feature scope CLI (options, error messages, logging, etc.) Description
meltano config list
displays settings in the order determined by plugin definition and inheritance, with no logical grouping by importance. For plugins with many settings, this produces a flat wall of text where user-configured settings are scattered among untouched defaults. Here is real output from
meltano config list tap-postgres
after configuring
host
,
user
,
database
, and `filter_schemas`:
$ meltano config list tap-postgres
— full output (~40 settings)
Copy code
batch_config.encoding.compression [env: TAP_POSTGRES_BATCH_CONFIG_ENCODING_COMPRESSION] current value: None (default)
	Batch Compression Format: Compression format to use for batch files.
batch_config.encoding.format [env: TAP_POSTGRES_BATCH_CONFIG_ENCODING_FORMAT] current value: None (default)
	Batch Encoding Format: Format to use for batch files.
batch_config.storage.prefix [env: TAP_POSTGRES_BATCH_CONFIG_STORAGE_PREFIX] current value: None (default)
	Batch Storage Prefix: Prefix to use when writing batch files.
batch_config.storage.root [env: TAP_POSTGRES_BATCH_CONFIG_STORAGE_ROOT] current value: None (default)
	Batch Storage Root: Root path to use when writing batch files.
database [env: TAP_POSTGRES_DATABASE] current value: 'mydb' (from `meltano.yml`)
	Database: Database name. Note if sqlalchemy_url is set this will be ignored.
dates_as_string [env: TAP_POSTGRES_DATES_AS_STRING] current value: False (default)
	Dates As String: Defaults to false, if true, date, and timestamp fields will be Strings.
default_replication_method [env: TAP_POSTGRES_DEFAULT_REPLICATION_METHOD] current value: 'FULL_TABLE' (default)
	Default Replication Method: Replication method to use if there is not a catalog entry to override this choice.
faker_config.locale [env: TAP_POSTGRES_FAKER_CONFIG_LOCALE] current value: None (default)
faker_config.seed [env: TAP_POSTGRES_FAKER_CONFIG_SEED] current value: None (default)
filter_schemas [env: TAP_POSTGRES_FILTER_SCHEMAS] current value: ['public'] (from `meltano.yml`)
	Filter Schemas: If an array of schema names is provided, the tap will only process the specified Postgres schemas.
flattening_enabled [env: TAP_POSTGRES_FLATTENING_ENABLED] current value: None (default)
flattening_max_depth [env: TAP_POSTGRES_FLATTENING_MAX_DEPTH] current value: None (default)
flattening_max_key_length [env: TAP_POSTGRES_FLATTENING_MAX_KEY_LENGTH] current value: None (default)
host [env: TAP_POSTGRES_HOST] current value: 'localhost' (from `meltano.yml`)
	Host: Hostname for postgres instance. Note if sqlalchemy_url is set this will be ignored.
json_as_object [env: TAP_POSTGRES_JSON_AS_OBJECT] current value: False (default)
max_record_count [env: TAP_POSTGRES_MAX_RECORD_COUNT] current value: None (default)
password [env: TAP_POSTGRES_PASSWORD] current value: None (default)
	Password: Password used to authenticate. Note if sqlalchemy_url is set this will be ignored.
port [env: TAP_POSTGRES_PORT] current value: 5432 (default)
	Port: The port on which postgres is awaiting connection.
replication_slot_name [env: TAP_POSTGRES_REPLICATION_SLOT_NAME] current value: 'tappostgres' (default)
sqlalchemy_url [env: TAP_POSTGRES_SQLALCHEMY_URL] current value: None (default)
	SQLAlchemy URL: Example postgresql://[username]:[password]@localhost:5432/[db_name]
ssh_tunnel.enable [env: TAP_POSTGRES_SSH_TUNNEL_ENABLE] current value: False (default)
ssh_tunnel.host [env: TAP_POSTGRES_SSH_TUNNEL_HOST] current value: None (default)
ssh_tunnel.port [env: TAP_POSTGRES_SSH_TUNNEL_PORT] current value: 22 (default)
ssh_tunnel.username [env: TAP_POSTGRES_SSH_TUNNEL_USERNAME] current value: None (default)
ssh_tunnel.private_key [env: TAP_POSTGRES_SSH_TUNNEL_PRIVATE_KEY] current value: None (default)
ssh_tunnel.private_key_password [env: TAP_POSTGRES_SSH_TUNNEL_PRIVATE_KEY_PASSWORD] current value: None (default)
ssl_certificate_authority [env: TAP_POSTGRES_SSL_CERTIFICATE_AUTHORITY] current value: '~/.postgresql/root.crl' (default)
ssl_client_certificate [env: TAP_POSTGRES_SSL_CLIENT_CERTIFICATE] current value: '~/.postgresql/postgresql.crt' (default)
ssl_client_certificate_enable [env: TAP_POSTGRES_SSL_CLIENT_CERTIFICATE_ENABLE] current value: False (default)
ssl_client_private_key [env: TAP_POSTGRES_SSL_CLIENT_PRIVATE_KEY] current value: (redacted) (default)
ssl_enable [env: TAP_POSTGRES_SSL_ENABLE] current value: False (default)
ssl_mode [env: TAP_POSTGRES_SSL_MODE] current value: 'verify-full' (default)
ssl_storage_directory [env: TAP_POSTGRES_SSL_STORAGE_DIRECTORY] current value: '.secrets' (default)
stream_map_config [env: TAP_POSTGRES_STREAM_MAP_CONFIG] current value: None (default)
stream_maps [env: TAP_POSTGRES_STREAM_MAPS] current value: None (default)
stream_options [env: TAP_POSTGRES_STREAM_OPTIONS] current value: None (default)
use_singer_decimal [env: TAP_POSTGRES_USE_SINGER_DECIMAL] current value: None (default)
user [env: TAP_POSTGRES_USER] current value: 'postgres' (from `meltano.yml`)
	User: User name used to authenticate. Note if sqlalchemy_url is set this will be ignored.
That's ~40 settings. The 4 the user actually configured (
database
,
filter_schemas
,
host
,
user
) are scattered at positions 5, 15, 19, and 40 — buried among 36 untouched defaults. There is no existing flag or option to control sort order (
--extras
filters to extra settings only). Settings could be sorted into logical groups with section headers: 1. Configured (alphabetical) — settings where the source is not
DEFAULT
, i.e. explicitly set via
meltano.yml
,
.env
, env vars, system database, or inherited 2. Optional (alphabetical) — everything else still at defaults 3. Custom/extras — already shown in their own section today, no change needed For plugins that define
settings_group_validation
, a Required group could appear first, ahead of Configured. All the data needed is already available in `list_settings()`: required status from the
setting_groups
dict, source from
config_metadata["source"]
(
SettingValueStore
enum), and custom/extra status from `setting_def.is_custom`/`is_extra`. Adding section headers is consistent with the existing pattern of headers like
Custom:
and
Custom extras, plugin-specific options handled by Meltano:
already printed by
list_settings
. This is a non-breaking change — same information, just reordered. No new flags needed. This issue stems from a discsussion with @edgarrmondragon in PR #9849:
(We really need to figure out the stories for sorting the settings in some meaningful way, and how to display a sensible subset by default, and this is a great UX improvement in that direction).
meltano/meltano