Install and enable the plugin:
pip install ckanext-editable-config
ckan.plugins = editable_config
Optional configuration settings:
Additional options to make editable (use with caution)
ckanext.editable_config.options.extra_editable = ckan.datasets_per_page ckan.auth.user_create_groups
Whitelist - only these editable options can be changed
ckanext.editable_config.options.whitelist = ckan.site_title ckan.site_description
Blacklist - disable editable flag for specified options
ckanext.editable_config.options.blacklist = ckan.site_title ckan.site_description
Minimal seconds between change detection cycles (default: 0)
ckanext.editable_config.charge_timeout = 10
Additional validators for config options (JSON dict)
ckanext.editable_config.additional_validators = {“ckan.site_title”: “less_than_100 do_not_contain_exclamation_mark”}
Remove Config tab from CKAN Admin UI (default: false)
ckanext.editable_config.disable_admin_config_tab = True
Replace Config tab with basic form for editable options (default: false)
ckanext.editable_config.replace_admin_config_tab = True
Auto-convert existing core AdminUI overrides (default: false)
ckanext.editable_config.convert_core_overrides = True
API usage examples:
Change via Python:
tk.get_action(“editable_config_update”)(
{“ignore_auth”: True},
{“change”: {“ckan.site_title”: “Updated title”}}
)
Change via CLI:
ckanapi action editable_config_update change:’{“ckan.site_title”: “Updated”}’
Change via JavaScript:
await fetch(“/api/action/editable_config_update”, {
method: “POST”,
body: JSON.stringify({change: {“ckan.site_title”: “Updated”}}),
headers: {“content-type”: “application/json”}
})
Emergency disable:
CKANEXT_EDITABLE_CONFIG_DISABLE=1 ckanapi action editable_config_revert keys=BAD_OPTION
Limitations: Cannot change debug, beaker, middlewares, blueprints, CLI commands, or translations in runtime. Not compatible with CKAN’s built-in AdminUI Config form - use convert_core_overrides or avoid mixing both approaches.