Code-first workflows without a second language

Use plain TypeScript functions for behavior and keep topology in one Octonode manifest.

Start with the function

A node is an ordinary function with a JSON-shaped input and output. That keeps business logic testable with the language tools you already use, while Octonode owns process transport and orchestration.

Keep one topology authority

The .octonode manifest owns runtime settings, environment bindings, node configuration, and workflow edges. Source owns the function signature. Keeping that boundary explicit prevents two files from silently disagreeing.

Change the smallest surface

Add a function, scan it into the manifest, connect it, and run the workflow. You can inspect every generated file and edit it normally; there is no hidden visual-only representation to recover later.

Production checklist

Validate the JSON boundary, keep logs on stderr, make side effects idempotent, and pin external dependencies. Those four habits cover most failures before a workflow reaches a scheduler.

Try it in Octonode

Use the Community catalog as a starting point, then keep the imported copy small enough to understand in one sitting.