Every run of DataMind Oda begins with a start: Oda loads the parts of its setup before it can do any work. This page is the reference for that start: the parts it needs, what its output says when one of them fails, where its environment values come from, and how to read the reports it leaves behind.
web, headless, acp, sdk and sdk-minimal; Oda profiles and launchers describes what each serves.requires a process restart; Hot reload: what changes live covers what waits for the next start.The diagnosis is printed once, in this order:
oda: startup failed: N required plugin(s) did not activate.Failed plugins (N):, one line per part with the reason it could not activate; a (required) marker sits beside the required ones.Plugins waiting for services (N):, as a table pairing each part with the services it is missing.Reasons you may see on a failing line:
failed to import: the part could not be imported.disabled expression failed: <detail>: the part's disable condition could not be evaluated.pending (waiting for service: X): the part is still waiting for a service another part provides.If the failure happens before Oda's parts can load at all, the output reads oda: fatal load failure: <stack>, with the failure's stack. Oda still exits with code 1, after a short bounded cleanup wait; a cleanup that gets stuck delays that exit but never cancels it.
Keep the output as it is: shown text is already written in Oda's wording, and Reading Oda's diagnostics explains those rules. Working through a failed start walks through one step by step, and Troubleshooting covers what to send when a message keeps coming back.
A start that is missing only optional parts continues, and reports them instead:
oda: warning: N entry/ entries did not activate, and the lines after it name what was left out and why. The other parts keep starting.oda: [<layer>] <message>, and the start continues. The profile settings file covers the file these patches live in.Selected profile bundle "<name>" could not be loaded; repair or remove its bundle selection.Oda reads its environment from three places. Highest first:
. env file in the folder you launch from.. env file in the Oda home folder; Oda's home folder and settings files covers the folder.PATH or the names that decide how Oda starts, where its code and instructions load from, or how it reaches the network. The refusal names the variable: oda: <path> sets "<NAME>", which only the launching environment may set. The fix it suggests is to export the value where you launch Oda, or to put it in the home folder's . env, which does not travel with a project folder.HTTP_PROXY, HTTPS_PROXY, ALL_PROXY and NO_PROXY are accepted from the home folder's . env only; Proxy and network settings covers how they are read.0 and false included; this switch prefers off by mistake to on by mistake, and a profile that does not include telemetry needs no switch.Two reports show what a start was given, without starting anything:
# == <label>, or # == <label>, patched by <layers> when a later layer changed the row. A patch that targets nothing is reported with its layer label and skipped. A configuration that cannot be read or parsed stops the dump with failed to read config or failed to parse config.schema, partial, absent, unsupported or error, and it marks the report incomplete where an entry cannot be read cleanly. It never prints configuration values or the sources of expressions.The Oda command line covers the flags that print both dumps.
When the failure happens before Oda's parts can load at all. The line carries the failure's stack, and Oda still exits with code 1, after a short bounded cleanup wait; a cleanup that gets stuck delays that exit but never cancels it.
Oda fails a start only over a required part that was asked to start and could not activate. A required part that the profile leaves out, or turns off, is not asked to start, so it does not fail the start.
A failed start names required parts and stops the run: Oda closes what it already started and exits with code 1. The activation warning oda: warning: N entry/ names optional parts that were left out, while the run continues without them.
failed to import means the part could not be imported. disabled expression failed: <detail> means its disable condition could not be evaluated. pending (waiting for service: X) means it is still waiting for a service another part provides.
It has not activated because a service it needs, named after it in pending (waiting for service: X), has not been provided. The Plugins waiting for services (N): table pairs each such part with the services it is missing.
. env file?No. A file may not set PATH or the names that decide how Oda starts, where its code and instructions load from, or how it reaches the network; such a line is refused, and the refusal names the variable. The fix it suggests is to export the value where you launch Oda, or to put it in the home folder's ., which does not travel with a project folder.
Set the telemetry switch to any non-empty value where you launch Oda: 0 and false count as off as well, because this switch prefers off by mistake to on by mistake. A profile that does not include telemetry needs no switch.
Because it names an entry the profile does not have, so there is nothing for it to change. The warning carries the layer's label, oda: [<layer>] <message>, and the start continues.
Each row's source: # == <label> names the source a row came from, and , patched by <layers> is added when a later layer changed it. Together they show which layer put each row in place, and a patch that targets nothing is reported with its layer label.
Each declared entry gets a status: schema, partial, absent, unsupported or error. A partial entry states the limits of what could be read, and where an error is present the report marks itself incomplete. The dump never prints configuration values or the sources of expressions.