What changed in v7
See also: How configuration works · Migrating a v6 install to v7 · Settings reference
v7 replaced the PHP engine with a TypeScript/Bun one, and configuration changed with it. This page is the reference for what moved, what was renamed, and what is simply gone — so that when a v6 setting seems to have vanished, you can find out what happened to it.
If you are upgrading an existing install, read Migrating a v6 install to v7 instead: it is the one manual for the whole migration, and its Phase C tells you how to run the config conversion. This page is the "why" behind it.
The short version
| v6 | v7 | |
|---|---|---|
| Where config lives | four PHP files in config/ (config.php, config_db.php, config_areas.php, config_core.php) |
one file, ../private/.env, outside the web root |
| How you write a setting | define('DEDALO_TIMEZONE', 'Europe/Madrid'); |
DEDALO_TIMEZONE=Europe/Madrid |
| Lists and maps | PHP array literals | JSON |
| Paths | you declared them (DEDALO_CORE_PATH, DEDALO_MEDIA_URL, …) |
the engine derives them |
| Runtime state | config_core.php, written by the app |
../private/ts_state.json |
| Editing config | edit a .php file inside the web root |
edit .env, or use the install wizard |
There is no config.php in v7, and no PHP at all. Nothing you put in a
.php file is read.
The .env is append-only
Add and change lines; do not delete or reorder other people's. A setting you remove falls back to the engine's built-in default, which is rarely what you meant. Retired keys are left in place, not deleted — see below.
Why one file instead of four
The v6 config was PHP code, not data: config.php computed paths with
dirname(), read $_SERVER, called setlocale(), and ended by including the
application loader. That made it powerful and impossible to reason about — the
value of a constant depended on how the process had been started, and a config
file could (and did) run application code.
v7's .env is data. A key has one value, the engine derives everything that can
be derived, and nothing in the config file executes.
How a value is resolved in v7
process environment → ../private/.env → the engine's built-in default
The real environment wins (so a systemd unit or a one-off
DEDALO_DEV_MODE=true bun run dev can override a file), then ../private/.env,
then the default compiled into the engine. There is no per-host file, no
config.local.php, and no scope/catalog machinery — if you knew the v6/PHP-v7
config catalog, that concept is gone.
For the keys listed under "still works as a fallback" below, the engine also
accepts the old PHP spelling, so a migrated .env keeps working unchanged.
Key changes
Renamed — and the old name no longer works
The old spelling is retired: the engine refuses to boot if it finds it, rather than silently ignoring it and falling back to a default.
| v6 constant | v7 key |
|---|---|
DEDALO_PREFIX_TIPOS |
ACTIVE_ONTOLOGY_TLDS |
DEDALO_PREFIX_TIPOS never described what it held. The value is the set of
ontology top-level domains active in this installation (dd, rsc, oh, …)
— which is the word the rest of Dédalo already used. See Defining active
ontology TLDs for what each TLD means.
Why the boot refuses instead of ignoring it
An empty TLD list is not harmless: it shrinks the ontology-update panel's file list to nothing. Silently defaulting would have looked like it worked.
Renamed — but the v6 spelling still works
These have a shorter, engine-native name in v7. The v6 name is honored as a
fallback, so a migrated .env needs no edit; the v7 name wins when both are set.
| v6 constant | v7 key |
|---|---|
DEDALO_ENTITY |
ENTITY |
MAIN_FALLBACK_SECTION |
MAIN_SECTION |
DEDALO_DATABASE_CONN |
DB_NAME |
DEDALO_HOSTNAME_CONN |
DB_HOST |
DEDALO_DB_PORT_CONN |
DB_PORT |
DEDALO_USERNAME_CONN |
DB_USER |
DEDALO_PASSWORD_CONN |
DB_PASSWORD |
DEDALO_MEDIA_PATH |
MEDIA_PATH |
DEDALO_APPLICATION_LANG |
APPLICATION_LANG |
DEDALO_DATA_LANG |
DATA_LANG |
DEDALO_DATA_LANG_SYNC |
DATA_LANG_SYNC |
DEDALO_DATA_NOLAN |
DATA_NOLAN |
DEDALO_PROJECTS_DEFAULT_LANGS |
PROJECTS_DEFAULT_LANGS |
DEDALO_ENTITY_MENU_SKIP_TIPOS |
MENU_SKIP_TIPOS |
SLOW_QUERY_MS |
DEDALO_SLOW_QUERY_MS |
Changed name and shape
| v6 constant | v7 key | what changed |
|---|---|---|
MYSQL_DEDALO_HOSTNAME_CONN |
DEDALO_DIFFUSION_DB_HOST |
in v7 the Bun engine — not PHP — owns the MariaDB (diffusion) connection, so it has its own key family |
MYSQL_DEDALO_DB_PORT_CONN |
DEDALO_DIFFUSION_DB_PORT |
” |
MYSQL_DEDALO_SOCKET_CONN |
DEDALO_DIFFUSION_DB_SOCKET |
” |
MYSQL_DEDALO_USERNAME_CONN |
DEDALO_DIFFUSION_DB_USER |
” |
MYSQL_DEDALO_PASSWORD_CONN |
DEDALO_DIFFUSION_DB_PASSWORD |
” |
MAGICK_PATH |
DEDALO_MAGICK_PATH |
v6 held a directory (/usr/bin/); v7 holds the executable (/usr/bin/magick) |
DB_BIN_PATH |
DEDALO_PG_BIN_PATH |
same idea: a bare directory, no trailing slash |
MYSQL_DEDALO_DATABASE_CONN has no v7 equivalent: a diffusion publication now
carries its own target database, so there is no single configured name.
Lists and maps are JSON now
# v6
define('DEDALO_IMAGE_EXTENSIONS_SUPPORTED', ['jpg','png','tif']);
define('DEDALO_APPLICATION_LANGS', ['lg-eng'=>'English','lg-spa'=>'Castellano']);
# v7
DEDALO_IMAGE_EXTENSIONS_SUPPORTED=["jpg","png","tif"]
DEDALO_APPLICATION_LANGS={"lg-eng":"English","lg-spa":"Castellano"}
Simple lists also accept a comma list (dd,rsc,oh), which is easier to read. Maps
and lists-of-objects (ONTOLOGY_SERVERS, MENU_SKIP_TIPOS) must be JSON.
Settings that are gone
Nothing here needs replacing — each was removed because v7 does not work that way. The migration reports every one of these, with the reason, rather than dropping them silently.
The engine derives it now — paths and URLs
DEDALO_ROOT_PATH, DEDALO_ROOT_WEB, DEDALO_CORE_PATH, DEDALO_CORE_URL,
DEDALO_CONFIG_PATH, DEDALO_SHARED_PATH, DEDALO_SHARED_URL,
DEDALO_TOOLS_PATH, DEDALO_TOOLS_URL, DEDALO_LIB_PATH, DEDALO_LIB_URL,
DEDALO_WIDGETS_PATH, DEDALO_WIDGETS_URL, DEDALO_EXTRAS_PATH,
DEDALO_EXTRAS_URL, DEDALO_INSTALL_PATH, DEDALO_INSTALL_URL,
DEDALO_API_URL, DEDALO_MEDIA_URL, DEDALO_IMAGE_FILE_URL,
DEDALO_UPLOAD_TMP_DIR, DEDALO_UPLOAD_TMP_URL,
DEDALO_BACKUP_PATH_DB, DEDALO_BACKUP_PATH_TEMP, DEDALO_BACKUP_PATH_ONTOLOGY,
COLOR_PROFILES_PATH, ONTOLOGY_DATA_IO_URL, and the rest of the *_PATH /
*_URL family.
The media type comes from the file extension now
DEDALO_IMAGE_MIME_TYPE, DEDALO_IMAGE_TYPE, DEDALO_AV_MIME_TYPE,
DEDALO_AV_TYPE, DEDALO_PDF_MIME_TYPE, DEDALO_PDF_TYPE,
DEDALO_SVG_MIME_TYPE, DEDALO_3D_MIME_TYPE, DEDALO_3D_THUMB_DEFAULT.
The subsystem does not exist in v7
PHP sessions and the cache manager (DEDALO_SESSION_HANDLER,
DEDALO_SESSIONS_PATH, DEDALO_CACHE_MANAGER) — v7 has its own session store.
The PHP logger and debug flags (LOGGER_LEVEL, SHOW_DEBUG, SHOW_DEVELOPER).
The front-end CDN/library URLs (USE_CDN, JQUERY_*, BOOTSTRAP_*, D3_URL_JS,
LEAFLET_JS_URL, …) — v7 serves its own client. PHP binaries and DB management
(PHP_BIN_PATH, DEDALO_DB_TYPE, DEDALO_DB_MANAGEMENT). Plus
ENCRYPTION_MODE, MAGICK_CONFIG, DEDALO_AV_FFMPEG_SETTINGS,
DEDALO_PROFILE_DEFAULT, API_WEB_USER_CODE_MULTIPLE and the glTF converters.
Superseded by a native subsystem
IP_API — section Activity (dd542) still resolves a source country from the
visitor IP, but v7 does it server-side and offline against the openly-licensed
DB-IP Country Lite database (src/core/geoip) instead of pointing each browser
at a third-party API. Configure it with the DEDALO_GEOIP_* keys
(DEDALO_GEOIP_ENABLED, DEDALO_GEOIP_DIR, DEDALO_GEOIP_AUTO_UPDATE,
DEDALO_GEOIP_DB_URL).
It is runtime state, not config — it lives in ../private/ts_state.json,
written by the maintenance area, never by you
DEDALO_INSTALL_STATUS, DEDALO_MAINTENANCE_MODE, DEDALO_NOTIFICATION,
DEDALO_TEST_INSTALL.
It moved out of Dédalo and into the environment
SERVER_PROXY — v6 passed this outbound proxy (host:port) to curl when Dédalo
fetched code or an ontology from a remote master. v7 still makes those fetches, but
has no Dédalo key for it: set the standard HTTPS_PROXY / HTTP_PROXY
environment variables on the server process instead, which the engine's HTTP
client honors.
TRUSTED_PROXY_HOPS is not its replacement
They point in opposite directions. SERVER_PROXY was about reaching out
through a proxy. TRUSTED_PROXY_HOPS is about proxies in front
of the server: how many reverse-proxy hops to trust when reading
X-Forwarded-For to identify the client. Setting one where you meant the other
is a security bug, not a migration.
Retired after the cutover
DEDALO_ENGINE_OWNS_INSTALL — the TS engine is the only engine now, so ownership
is unconditional. The key is read by nothing.
Settings that are new in v7
Whole families have no v6 ancestor, because the subsystems are new: the HTTP
server and Postgres pool (SERVER_UNIX_SOCKET, DB_POOL_MAX, …), the native
session/login stack (SESSION_TTL_SECONDS, LOGIN_MAX_ATTEMPTS, …), media access
control (DEDALO_MEDIA_ACCESS_MODE), the native diffusion engine
(DEDALO_DIFFUSION_*), error reporting (DEDALO_ERROR_REPORT_*), and the
RAG/AI/MCP subsystems (DEDALO_RAG_*, DEDALO_AGENT_*, DEDALO_MCP_*).
They are all optional and documented in the settings reference.
Where this table comes from
Every classification on this page is held in src/config/migration_map.ts,
which the migration tool reads and a tripwire test checks against the keys the
engine actually reads. It cannot drift from the code without failing the build.