Skip to content
Symbiote Engine
Menu
Documentation Navigation
On this page

Safety & Security

Symbiote Engine prioritizes portability and minimal dependencies. Because the graph runtime acts as an execution coordinator rather than a security manager, hosts must establish appropriate isolation boundaries, credential management systems, and network controls.

Custom Driver Execution #

Custom node drivers can be registered dynamically at runtime. When dynamic node definitions are compiled, the registry evaluates their implementation via standard JavaScript mechanisms:

  • Dynamic Compilation: The runtime compiles graph-supplied string processes using the new Function constructor via registerCustomDrivers. Graph-supplied string processes compile in the current JavaScript realm, not a guaranteed main or "host" thread. Ordinary registered drivers and handler modules are not all dynamically compiled.
  • No Sandbox Isolation: The engine does not provide a VM boundary, worker sandbox, or secure execution container. Custom drivers, lifecycle hooks, and handlers run in the current JavaScript realm with the ambient authority available there.
  • Ambient Authority: Graph custom drivers run with the ambient capabilities of the current realm. Handlers are ordinary trusted imports. They do not have arbitrary lexical host-variable access.

Warning: Only run trusted graph configurations

Hosts must ensure that only verified graph structures and trusted node driver types are loaded into the registry. If your system runs user-submitted workflows, you must execute the engine inside an external sandboxed environment (such as a secure VM or container) managed at the system level.

Security Boundaries & Credentials #

Protecting sensitive API keys, tokens, and data fields is the responsibility of the host application:

  • No Native Credential Protection: The runtime does not automatically scrub, encrypt, or hide credentials that are written directly into a graph's JSON representation. Storing raw credentials in graph parameters makes them serializable and visible.
  • External Key Management: Keep authentication credentials outside serialized graph data. Graph parameters may contain arbitrary values; when a node needs a credential, store a non-secret reference identifier and let host-owned handlers or providers resolve it outside graph data.

Authority Boundary #

EntityResponsibility
Graph DataCan contain arbitrary parameters; credential fields should contain non-secret references.
Engine ExecutionCoordinates nodes but has no credential awareness.
Host PolicyResolves secrets and manages execution policies.
External ServiceAuthorizes requests using host-resolved credentials.
// Store a non-secret reference
const referenceParams = {
  voice: 'en-male-1',
  credentialRef: 'voice-provider/primary'
};

Engine neither validates nor resolves this reference; a host-owned resolver does so under host policy.

Network Boundaries & GraphServer #

The library includes a development server for synchronization sessions, which can be imported via:

import { createServer } from 'symbiote-engine/GraphServer.js';

When utilizing this server primitive, hosts must be aware of the following security limitations:

  • Wildcard Origin Policy: The development server operates with unrestricted wildcard CORS (Access-Control-Allow-Origin: *) and any-origin WebSocket connections.
  • No Authentication: The server lacks built-in authentication, authorization, rate limiting, request validation, or TLS encryption.
  • Remote Mutate/Execute Capability: Because the server exposes endpoints that allow remote connections to edit and execute graphs, exposing it directly to public networks is dangerous.

Production Deployments

For production environments, do not expose GraphServer.js directly. Instead, wrap the synchronization endpoints in a secure server architecture that enforces authentication, rate limiting, transport encryption (HTTPS/WSS), and tenant boundaries.