New BoltRPC, our weighted-unit developer RPC with unlimited RPS, live on 35+ chains
Chainlink

Chainlink CRE Explained: Workflows, Capabilities, DONs

Chainlink CRE (Runtime Environment) runs workflows written in Go or TypeScript on DONs, with consensus on every step. How it works, how to build one and its status.

10 min read

Chainlink CRE (Chainlink Runtime Environment) is Chainlink’s orchestration layer. You write a workflow in Go or TypeScript, made of a trigger and a callback, and Chainlink decentralized oracle networks (DONs) run each step of it with consensus. One workflow can read an API, reach agreement on what it returned and write the result onchain. CRE is also the replacement Chainlink points to for Functions and Automation, both now deprecated.

This guide explains the building blocks (workflows, triggers, capabilities and DONs), why every capability call is agreed by a network and not a single server, how you build and deploy a workflow and where CRE stands today. Everything here comes from Chainlink’s documentation and posts, which we cite at the end, and from a few commands we ran ourselves, which we label.

In short: a CRE workflow is code compiled to WebAssembly. A Workflow DON watches its triggers (a schedule, an HTTP request or an onchain event) and coordinates a callback. The callback uses capabilities (HTTP, EVM read and write, Solana read and write) that run on their own DONs with Byzantine Fault Tolerant consensus. Anyone with an account can build and simulate. Deploying needs approval.


What CRE Is

Chainlink’s documentation calls CRE “the all-in-one orchestration layer” for institutional-grade smart contracts that are data-connected, compliance-ready, privacy-preserving and interoperable across blockchains and existing systems. In plain terms, it is a place to run the off-chain logic that surrounds a smart contract. Every operation runs across multiple independent nodes with Byzantine Fault Tolerant consensus, so Chainlink says workflows “inherit the same security guarantees as blockchain transactions”.

A smart contract cannot call an API, check a bank balance or run a heavy calculation. Teams used to handle that with a mix of services: an oracle for data, a keeper for scheduled actions, an offchain relayer to glue them together. Chainlink’s migration guide says most multi-step patterns that previously needed Functions, Automation and an offchain relayer “collapse into a single workflow” on CRE.

Chainlink’s launch post gives an example of what that looks like for a stablecoin issuer. The issuer starts a workflow, which calls Proof of Reserve for a secure mint check and then triggers a mint in the stablecoin smart contract. Before the tokens go to the depositor, that contract checks the Automated Compliance Engine to confirm the address is not blacklisted (see our guide to Chainlink ACE). Once approved, the workflow calls Chainlink CCIP to move the funds across chains. Several services, one program, one definition of what happens in which order.

The idea was announced at SmartCon 2024 on 30 October 2024 as “a major upgrade to the Chainlink Platform”. If you need the wider picture first, what Chainlink is covers the oracle network that CRE builds on.


How a Workflow Runs: Triggers, Capabilities and DONs

The workflow and its handlers

A workflow is code written with the CRE SDK in Go or TypeScript. CRE compiles it to a WebAssembly (WASM) binary and runs it on a Workflow DON. Inside it you define one or more handlers.

A handler connects exactly one trigger to one callback. The trigger is an event source. The callback is a function that holds your logic. A workflow can have several handlers, and the same callback can serve several triggers.

Callbacks are stateless. Each time a trigger fires, it starts a fresh execution and nothing persists between executions. If you need state, it lives onchain or in an external system you call.

Triggers

Chainlink documents four trigger types:

  • Cron: fires on a schedule. Cron expressions have 5 or 6 fields and the minimum interval is 30 seconds.
  • HTTP: fires when an external system sends a request to the workflow’s endpoint. Deployed HTTP triggers require authorization keys.
  • EVM Log: fires when a smart contract on a supported EVM chain emits a given event.
  • Solana Log: the same for programs on Solana.

Capabilities

A capability is a modular service that does one job. Chainlink lists these:

  • HTTP: fetch and post data from external APIs with decentralized consensus.
  • Confidential HTTP: privacy-preserving API calls that execute in an enclave.
  • EVM read and write: read onchain state and write verified results to EVM chains.
  • Solana read and write: the same for Solana.

You never address a capability’s network directly. The SDK gives you clients, such as an EVM client, a Solana client and an HTTP client, and a call on a client returns a promise-like value. In TypeScript you call .result() on it. In Go you call .Await(). Calls can run in parallel before you wait for them.

Workflow DON and Capability DONs

CRE uses two kinds of DON:

  • A Workflow DON watches the triggers and coordinates the execution.
  • A Capability DON executes one specific capability. Each capability has its own independent DON, optimized for that task.

Chainlink’s 2024 announcement describes the design as akin to a microservice per capability: each capability in a workflow is run by a separate DON, instead of one DON executing every capability of a workflow as in the earlier architecture. The post quotes Uri Sarid, Chainlink Labs Chief Architect, on how the pieces connect: CRE uses “DON-to-DON communications to connect the various capability DONs”.

The Chainlink documentation we read does not state how many nodes a Workflow DON or a Capability DON has, which fault threshold they use or which node operators run them. We do not guess at those numbers. If you want to understand what operating a node involves in general, what a Chainlink node operator does covers it.

From result to onchain write

When the callback finishes, it encodes its result. The Workflow DON then produces a report: a package of payload bytes, report context and DON signatures. A report can be sent offchain, or written onchain. For an onchain write, the signed report goes through the CRE KeystoneForwarder contract to a consumer contract that implements the IReceiver interface, which then acts on the data.

Secrets are handled separately. A workflow reads them with a secrets call, and in production they are held by the Vault DON, which stores them threshold-encrypted.


Consensus: Why Every Capability Call Is Agreed by a DON

A single server calling an API gives you the answer that one server saw. A DON gives you an answer the network agreed on. Chainlink’s documentation describes it this way: during execution, each node in the DON performs the requested task independently, and the results are cryptographically verified and aggregated through a Byzantine Fault Tolerant (BFT) consensus protocol. The aim is a single, correct and consistent outcome even if some nodes fail or misbehave.

For capabilities where Chainlink can provide that guarantee itself, you do nothing. For others, such as calling a standard API, the nodes may each see something different, so you decide how to combine their answers. The SDK has two modes:

  • Runtime: operations that are already BFT. Chainlink calls it easy mode.
  • NodeRuntime: you run a function on every node in node mode and supply an aggregation, for example the median of the values or a requirement that all values are identical.

The following fragment is condensed from Chainlink’s own tutorial, “Part 2: Fetching Offchain Data” (see the tutorial page). We shortened it and did not run it. The full sample from the docs compiles with the same CLI and SDK versions. Each node fetches a random number from an API, and the median is the agreed result:

const fetchMathResult = (nodeRuntime: NodeRuntime<Config>): bigint => {
  const httpClient = new HTTPClient()
  const req = { url: nodeRuntime.config.apiUrl, method: "GET" as const }
  const resp = httpClient.sendRequest(nodeRuntime, req).result()
  const bodyText = new TextDecoder().decode(resp.body)
  return BigInt(bodyText.trim())
}

// inside the callback: every node runs fetchMathResult,
// and the median of their answers becomes the result
const result = runtime.runInNodeMode(fetchMathResult, consensusMedianAggregation())().result()

One caveat matters when you test. In local simulation, consensus uses a single-node model. Real multi-node BFT consensus only happens in a deployed workflow. A passing simulation therefore tells you your logic works, not that your aggregation survives disagreement between nodes.

CRE also needs a shared clock. runtime.now() returns DON Time, a timestamp computed by an Off-Chain Reporting (OCR) plugin and agreed by the participating nodes. Chainlink says not to treat it as a high-precision clock.

What stays visible to node operators

By default, a workflow’s code and data run on Workflow DON nodes, where node operators can in principle inspect what is being computed. Chainlink offers two ways to narrow that. Confidential HTTP, in production since 25 February 2026, makes API calls from inside an enclave. Confidential Workflows run a handler’s whole callback in an enclave and are marked as beta. Check the current access terms before you plan around either.


Building One: the cre CLI and SDKs

You work with CRE through the cre command line tool, which Chainlink also calls the Chainlink Developer Platform CLI. Installers exist for macOS, Linux and Windows, and the binaries are on the cre-cli releases page on GitHub. As of 21 October 2026 the latest release there is v1.39.0, while the documentation’s release notes still list v1.38.0 as newest, so expect the two to drift. The TypeScript SDK is the npm package @chainlink/cre-sdk. The Go SDK is the cre-sdk-go repository in the smartcontractkit GitHub organization.

The typical loop in the CLI reference is cre init to create a project from a template, then cre generate-bindings for contract bindings, cre workflow simulate to test and cre workflow deploy once you have approval. cre templates list shows the example workflows maintained by Chainlink, including hello-world workflows in Go and TypeScript, one that reads Data Feeds and one that migrates an Automation upkeep.

A minimal workflow

This is Chainlink’s hello-world TypeScript workflow from “Part 1: Project Setup and Simulation”, (see the tutorial page). It has one handler: a cron trigger and a callback that logs a line and returns a string.

import { CronCapability, handler, Runner, type Runtime } from "@chainlink/cre-sdk"

type Config = {
  schedule: string
}

const onCronTrigger = (runtime: Runtime<Config>): string => {
  runtime.log("Hello world! Workflow triggered.")
  return "Hello world!"
}

const initWorkflow = (config: Config) => {
  const cron = new CronCapability()

  return [handler(cron.trigger({ schedule: config.schedule }), onCronTrigger)]
}

export async function main() {
  const runner = await Runner.newRunner<Config>()
  await runner.run(initWorkflow)
}

We built this file locally with cre workflow build using CLI v1.39.0 and @chainlink/cre-sdk 1.23.0, and it compiled to a WASM binary. TypeScript builds need Bun installed: without it the CLI stops with “bun is required for TypeScript workflows but was not found in PATH”. The docs’ configuration sets the schedule to */30 * * * * *, which is every 30 seconds.

Simulate first

cre workflow simulate compiles the workflow to WASM and runs it on your machine. Chainlink is explicit that simulation makes real calls to live APIs and public EVM chains. You pick a trigger interactively or with flags, and --broadcast sends real transactions, so use it with care.

Simulation needs a CRE account. We checked this without logging in. With the CLI v1.39.0 installed, cre workflow simulate and cre init both stopped with “authentication required”, while cre version, cre templates list and cre workflow build ran normally. We did not create an account, so we did not run a simulation ourselves. The output below is an excerpt of the output shown in Chainlink’s Part 1 tutorial (the tutorial’s last two lines are left out). We did not produce it, and the sample is timestamped 3 November 2025, so the format may differ in the current CLI:

Workflow compiled
2025-11-03T19:04:21Z [SIMULATION] Simulator Initialized

2025-11-03T19:04:21Z [SIMULATION] Running trigger trigger=cron-trigger@1.0.0
2025-11-03T19:04:21Z [USER LOG] Hello world! Workflow triggered.

Workflow Simulation Result:
 "Hello world!"

Deploy needs approval

Deploying is where the gate sits. Chainlink’s deploy access page says: “Deploying workflows to a Chainlink DON requires approval.” You check your status with cre account access or submit a request from the terminal, and the form asks for a purpose: hackathon, evaluation or production integration.

cre workflow deploy registers the compiled workflow in a Workflow Registry. There are two modes. The public onchain registry lives on Ethereum Mainnet and needs a linked wallet key and gas. The private registry is hosted by Chainlink, is managed offchain and uses your login for authentication. Chainlink notes that private does not mean confidential. The service quota page lists limits such as three workflows per organization on the private registry, and says the values are subject to change.


CRE sits next to existing Chainlink products, and the documentation is clear about which ones it replaces:

  • Functions: deprecated. Chainlink’s migration guide gives 30 June 2026 for mainnet and 15 June 2026 for testnet. It calls CRE a superset of Functions: Cron, HTTP and EVM Log triggers plus an HTTP fetch and a signed report to a receiver contract cover the request and fulfil pattern.
  • Automation: deprecated. v1.x was deprecated on 30 June 2026 and v2.1 on 31 July 2026. Time-based upkeeps map to a Cron trigger and log-trigger upkeeps to an EVM Log trigger, and the Automation registry becomes the CRE workflow registry.
  • Streams Trade: the product that combined Data Streams with Automation. Chainlink’s Data Streams documentation says it is being deprecated in favor of CRE. Data Streams reports themselves are a separate product, described in our Data Streams guide.
  • OCR: Chainlink has not announced that CRE replaces it. OCR is the protocol by which nodes aggregate observations into one report that a quorum signs and a contract verifies onchain. CRE uses an OCR plugin for DON Time.
  • Data Feeds: Chainlink does not say CRE replaces them. A CRE template reads Data Feeds from a workflow, and the launch post’s stablecoin example calls Proof of Reserve.
  • CCIP and ACE: workflows can call CCIP to move funds across chains, and the contracts they trigger can check ACE for compliance, as in the stablecoin example above.

If you run production code on Functions or Automation, the practical step is to read the migration guides, which include an automation-migration-ts template.


Where It Stands Today

The status is easy to misstate, so here are the dates and the wording from Chainlink’s sources, as of 23 October 2026:

  • 30 October 2024: CRE announced at SmartCon 2024.
  • 4 November 2025: Chainlink’s release notes say CRE “is now live”. Building and simulating workflows was available, and deploying to a DON was Early Access.
  • Now: the documentation says deploying requires approval, while building and simulating need an account but no approval. The service quota page says registry quotas are “being actively tuned ahead of general availability”. We found no general availability announcement or date.

CRE changes quickly. Solana reads and Solana log triggers arrived on 19 October 2026, after Solana writes. The chain list grows often, so we do not print a count here. The documentation covers EVM chains and Solana, and cre workflow supported-chains (after you log in) shows the chains enabled for your organization. Check the supported networks page before you plan around a specific chain.

On adoption, we only repeat what Chainlink says, with the date. Chainlink’s launch post of 4 November 2025 says 21X, an EU-regulated onchain exchange for tokenized securities, adopted CRE in production for post-trade data, and that Crypto Finance (Deutsche Börse Group) used it to orchestrate a Proof of Reserve feed. It describes Westpac Institutional Bank and Imperium Markets as implementing CRE in Project Acacia, and Swift, Euroclear and other market participants as part of an industry initiative on corporate actions. These are Chainlink’s statements, and the pilots are pilots. We have not verified anything newer from a primary source.

For the oracle side of the picture, see Matrixed.Link’s Chainlink oracle services. The example code in Chainlink’s docs carries its own disclaimer: it is provided as is, has not been audited and should not be used in production without your own audit.


Sources & References


Matrixed.Link operates Chainlink oracle infrastructure, validator nodes and full-stack blockchain infrastructure for protocols and institutions that need institutional-grade reliability. Official Chainlink node operator running Data Feeds, CRE, SVR and Proof of Reserve. ISO/IEC 27001:2022 certified. AAA-rated provider on StakingRewards.

Contact Matrixed.Link to discuss Chainlink oracle infrastructure for your protocol.

Frequently asked

Questions & answers

What is Chainlink CRE?

Chainlink CRE (Chainlink Runtime Environment) is Chainlink's orchestration layer. You write a workflow in Go or TypeScript that pairs a trigger with a callback, and Chainlink decentralized oracle networks (DONs) run each step with consensus. One workflow can read an API, reach agreement on the result and write it onchain.

Is Chainlink CRE live?

Chainlink announced CRE at SmartCon 2024 and launched it on 4 November 2025. Building and simulating workflows is open to anyone with a CRE account. Deploying a workflow to a Chainlink DON requires approval, and Chainlink's service quota page says quotas are being tuned ahead of general availability. No general availability date is published in the documentation.

What replaced Chainlink Functions and Chainlink Automation?

Chainlink CRE. Chainlink deprecated Functions on mainnet on 30 June 2026 and on testnet on 15 June 2026. It deprecated Automation v1.x on 30 June 2026 and v2.1 on 31 July 2026. Chainlink's migration guides describe CRE as a superset of both and map their triggers and callbacks to CRE workflow triggers and callbacks.

What languages does CRE support?

Go and TypeScript. The CRE SDK compiles a workflow to a WebAssembly (WASM) binary. TypeScript workflows are compiled with Javy and QuickJS, so they run in a WASM runtime and not in full Node.js, and some Node.js libraries do not work in them.

What is a workflow DON in Chainlink CRE?

A Workflow DON is the decentralized oracle network that watches a workflow's triggers and coordinates its execution. When the workflow needs to fetch data or write to a chain, it calls a Capability DON, a separate network that executes that one capability. The documentation we read does not state how many nodes a DON has.

Does CRE replace Chainlink Data Feeds or OCR?

The documentation we read does not say so. Workflows can read Data Feeds, and CRE itself uses an Off-Chain Reporting (OCR) plugin to agree on a timestamp called DON Time. Chainlink has not announced that CRE replaces either.

Get in touch

Ready to build on reliable blockchain infrastructure?

Whether you are a financial institution tokenizing assets, an asset manager launching on-chain products, a custody provider expanding into staking, or a Web3 protocol scaling oracle and validator operations, our team is ready to help.

Trusted by
ChainlinkEnjinPolygondRPC