place_file step. There is no separate node install path. The one node-specific addition is the Register in node registry flag, which tells Omega to introspect the placed library and add it to the device’s node catalog.
Before you upload
- Verify the library on its target platform with
omega-agent __node-introspectas described in Build a node. Registration runs the same check and refuses the same failures. - Give the file a plain name with no path, for example
libhello_node.so. Ship one artifact per platform and architecture. - Keep one domain per node. Two nodes claiming the same domain replace each other in the registry.
Upload as a release artifact
In the Console open OTA → Releases, create a release, and add the library as an artifact with a version. The platform records the artifact’s SHA-256 and signs it with its role key. Omega verifies that signature against the trust-set on the device before the file is written, so an artifact that was tampered with in transit is never placed and never loaded. Releases and deployments are covered in OTA updates.Add the place_file step
In the release’s plan, add a place_file step for the artifact and check Register in node registry. Set Node version to the version you want the registry to show. Leave Destination blank.
The same plan as YAML:
So the hello node on a Linux device lands at
/var/lib/omega/dll/hello/libhello_node.so.
What the device does
When the deployment reaches a device, Omega:- Downloads the artifact and verifies its role-bound signature. An unsigned or tampered file is never written.
- Lands the file in a staging directory and runs the protected-path checks.
- Introspects it in an ephemeral child process: ABI version, domain, capabilities, health. On Windows it runs
regsvr32 /sfirst and discovers the node’s CLSID itself. - Moves the file to
dll/{domain}/{file_name}. - Writes the node to the local registry, unless health is
unavailable, the ABI is unsupported, the domain is empty, or an op is namedunregister. - Publishes the full node catalog on
node/report/registry.
Confirm in the Console
Open OTA → Node Registry. The device row lists the domain, version, ABI, health, whether the node is enabled, and each op with a Run button. Click Run ongreet. The result appears against the device with the node’s return code and message:
ping has a cadence, so it also appears in the schedule the device reports, and it runs every hour without anybody clicking.
On the device itself:
Disable or remove a node
Disable in the Node Registry keeps the file and the registration but makes every invoke return-102 until it is enabled again.
Every node also has a synthesised unregister op that Omega implements on the node’s behalf. Running it drops the registry row, unregisters the COM class on Windows, and deletes the file. Your node never implements unregister and must not declare an op by that name.