Download all docs

Elements

Everything you build in Triform is an element. An element has a type (python, sql, view, circle, …), belongs to a category (actions, data, frontend, …), and exposes operations you invoke over a flat URL:

/api/{circle}/{slug}              # the element
/api/{circle}/{slug}/ops/{op}     # one of its operations

An element is the declarative unit of the platform. Its type, its settable properties, the operations it exposes, the resources it provisions, and the errors it can return are all declared in chemistry YAML — not coded by hand. The same shape describes a Python function, a Postgres-backed table, a LinkedIn connector, and a circle itself: one type column, one spec, one set of ops.

Selected SQL element on the hex canvas with the properties rail open.
Selecting an element keeps it in spatial context while the properties rail exposes readme, details, actions, schema, activity, access, source, and cost.Live triform.dev - 1920x1080 - 433914e4d138Open full size

The element-agnostic contract

Element behavior is defined entirely in chemistry YAML and flows through generated code — the runtime never branches on element type.

Each element type is authored as a set of .triform/*.yaml files (definition.yaml names the type and its category, properties.yaml the spec fields a user or agent edits, ops.yaml the operations, contract.yaml what it may contain, plus runtime/validation/pricing/observability). Running chemistry/generators/build-all.sh turns that YAML into generated registries, routes, and dispatch tables that physics and portal consume. The contract is a lockstep: change the YAML, regenerate, and the new behavior appears everywhere at once — there is no second place to edit.

This is why physics and portal contain no element-specific logic. The backend that executes an operation and the UI that renders an element do not know what a sales-board is; they look the type up in the generated dispatch map and act generically. New element types are added by writing YAML and regenerating, never by adding a match arm in Rust. Generated code under chemistry/generated/ is overwritten on every build and must never be hand-edited.

The category is metadata, not a URL segment. Categories such as actions, data, and io exist for dispatch, search, UI grouping, and the modifier security gate — they are columns the platform reads, never path components. Every element addresses the same way: /api/{circle}/{slug}, with its operations under /ops/{op}. There is no library/{category}/{type} prefix and no alias router; one URL form serves every element type. Because operation lists and input schemas are generated from the same YAML, the runtime, the docs, and agent tools stay aligned by construction.

SQL Database docs page showing element identity, working-with-it guidance, specimen card, and right rail table of contents.
Reference pages connect the generated element definition to the UI specimen and the live workspace behavior.Live triform.dev - 1920x1080 - 433914e4d138Open full size

Most elements are atoms — a single flat row in their circle. A few are compound: an automation parents its condition/loop/wait steps and a lab parents its brain/ears/mouth. These are the legitimate exceptions where one element nests under another; everything else sits flat. How elements relate — containment versus bonds versus dispatch-by-lookup — is the subject of composition.

Categories

Every element type lives in exactly one category. The categories are a map of what you can build:

CategoryWhat it is forExample types
foundationIdentity and tenancy primitivescircle, circle-ref
agentsAI agent runtimesclaude-code, codex, open-code
actionsCode you runpython, javascript, rust-fn, hitl
appsDeployable apps and orchestrationsapp, automation
intelligenceComposed reasoninglab (brain, ears, mouth)
toolsBrowsers and platform toolingchromeless, platform, recorder
dataStorage and retrievalsql, vector, document, files, graph
frontendUser-facing surfacesspa, ssr, view, three-d
ioExternal connectorshttp, slack, email, linkedin, queue
modifiersBehaviour applied to other elementsapi-token, auth-policy, prompt, rate-limit
boardsStructured workspacesboard, sales-board, planning-board
connectivityElement-to-element linkswire
diagramsVisual modelsdiagram

Browse the full set, with every type and its operations, in the element catalog.

Docs element catalog rendered as a category-grouped hex grid.
The docs catalog reuses the same element hex identity that appears on the live canvas.Live triform.dev - 1920x1080 - 433914e4d138Open full size

Related