Overview
Triggers is the event-driven runtime behind Reactive CRM flows. A released flow starts with a source event, moves through one or more service nodes, runs actions inside those services, and keeps routing the result payload through the graph.
In this repo's v2 shape, the important loop is:
- A service starts and registers its
manifest. - The runtime sends flow broadcasts so that service knows which released flows target it.
- A registered source can start a flow run.
- When the graph reaches a service segment, the manifest's
service_sourcesdescribe what that segment can receive, while the live ingress target is opened from released flowservice-inconfig reconciled from flow broadcasts. - Actions run inside the service.
- The runtime emits
CompletionEventobservability events for node progress and outcomes, while the result payload continues through the graph separately. - Terminal failures go to a DLQ instead of disappearing.
That split matters. The observability event is not the action result body. The result payload continues through the graph, while CompletionEvent exists so the runtime can track what happened.
Main surfaces
Studio
Use Studio to build and release flows. The cleanest first path is:
source -> service(flow_lab) -> action(parse)
That is a good starting shape, not the whole grammar. In the broader graph, a source can also route into nodes such as condition, rate-limit, mapping, output-topic, or service-in before a service action runs.
If you want to chain actions in the flow_lab example, route through another service segment with an explicit downstream action:
source -> service(flow_lab) -> action(parse) -> service(flow_lab) -> action(wrap)
Services and SDKs
Services define actions, service_sources, schemas, and routing capabilities in a manifest. Top-level flow sources are registered separately and start the flow. In Studio, the node labeled as a service segment maps to the runtime service-in node kind. In this repo, the cleanest local dummy is flow_lab, which lives in the Go SDK examples and is meant to exercise the full v2 path.
Runtime API and inspection points
The local runtime exposes useful inspection endpoints while you are learning:
GET /api/v2/services/<service>to confirm registration and inspect the current manifestGET /api/v2/flows/<flow_id>/runsto inspect recent runs
You will use both in the first local walkthrough.
Read next
- /triggers/quickstart for the shortest path to one visible local run
- /triggers/core-concepts for the runtime nouns used across the repo
- /triggers/first-end-to-end-flow for the recommended first flow
- /triggers/studio-flows for the graph rules that matter in Studio
- /triggers/flow-lab for the underlying example service
- /triggers/engine-architecture and /triggers/wire-protocol for the deeper runtime contract