Built-In Module Library
120+ modules bundled with the platform—call them directly as a sub_workflow, or compose them into your own workflows.
Braidrun ships with 120+ built-in modules. Each module is a packaged workflow with a typed input / output contract that other workflows reference via a sub_workflow step, without caring about the internal implementation.
Built-in modules are distributed with the platform and loaded into the module library automatically at service startup, without counting against your workflow quota. They can't be edited or deleted, and they pick up new versions automatically on platform upgrades; to change the internal logic, use "Clone as my workflow" to get an editable copy.
General-Purpose Tools (About 80)
utility-module-* prefix, covering business-agnostic building blocks like data processing, HTTP requests, search and scraping, text AI, and monitoring checks. Representative modules:
utility-module-http-requestA general-purpose REST client: GET / POST / PUT / DELETE / PATCH, with support for query / body / headers and basic / bearer / api-key auth, built-in timeout and exponential-backoff retry, returning the status code and response body.
utility-module-json-transformChain extract / filter / map / flatten / merge / pick / omit / sort transforms over JSON data.
utility-module-csv-processorRead CSV and run filter / sort / select / groupby / dedupe operations, auto-detecting the delimiter and outputting CSV or JSON.
utility-module-web-searchWeb search: DuckDuckGo (no key needed) or Serper.dev, returning the title, link, and snippet of the top N results.
utility-module-text-summarizerLLM long-text summarization, with bullets / paragraph / tldr / headline styles and a length cap.
utility-module-sentiment-analyzerLLM sentiment analysis: outputs polarity (positive / neutral / negative / mixed), a confidence score, and the key phrases driving the sentiment.
Delivery And Notifications
Reliable notification outlets at the tail of a workflow, mostly implemented as pure code steps that don't depend on an LLM, so a missing model credential can't break the notification path. Representative modules:
utility-module-slack-webhookSend messages via a Slack Incoming Webhook: plain text or Blocks rich text, with a customizable display name and icon.
utility-module-dingtalk-webhookDingTalk group bot: text / markdown / link messages, computing an HMAC-SHA256 signature automatically when a secret is provided.
utility-module-email-senderSMTP email sending: HTML body, attachments, CC / BCC, with support for both STARTTLS and SMTPS security modes.
utility-module-twilio-smsSend SMS via the Twilio REST API, suitable for verification-code and alert notifications.
The remaining notification modules cover Discord, Feishu, WeCom, Microsoft Teams, Mattermost, and Rocket.Chat group bots, Mailgun / SendGrid email, and Bark, Pushover, and ServerChan push. There's also a Telegram file-delivery module that sends .md / .xlsx / .pdf / .csv reports along with a caption directly to a specified chat, with dedupe_key support to prevent duplicate sends on replay.
Financial Analysis (About 10)
module-* prefix — a quant tool chain: quotes → technical indicators → portfolio analysis → backtesting. The quote modules need no API key (Tencent Finance / Yahoo Finance / CoinGecko data sources), and the indicator and backtesting modules are implemented with the standard library only.
module-stock-quoteReal-time quotes across markets: A-shares / Hong Kong / US stocks / crypto, auto-routing the data source by symbol prefix and returning a unified quotes_json.
module-stock-historyHistorical candlestick (OHLCV) fetching, returning a unified bars_json in ascending time order that can be fed straight into the indicator and backtesting modules.
module-technical-indicatorsTechnical-indicator computation: SMA / EMA / RSI / MACD / BOLL / KDJ / ATR, plus the most recent golden-cross / death-cross signal.
module-portfolio-analyzerPortfolio performance analysis: cumulative / annualized returns, Sharpe / Sortino / Calmar, max drawdown, and win rate, with optional benchmark comparison.
module-backtest-engineA daily backtesting engine: four built-in strategies (moving-average crossover / RSI / MACD / Bollinger) or custom signals, with support for fees, slippage, and stop-loss / take-profit.
The same series also includes modules for stock news, rule-based screening, options pricing, risk metrics, and market overviews, which can be chained into a complete pipeline from quotes to report.
Advertising And Growth (About 40)
This batch of modules comes from a subscription-app team's real ad operations, covering Apple Search Ads, Google Ads, and app revenue data. The main categories, by purpose:
- ASA report pulls:Four dimensions — campaigns / keywords / adgroups / searchterms — smoothing over the API's field-naming differences automatically.
- ASA entity lists:Bulk pulls of campaigns, ad groups, keywords, and negative keywords.
- Google Ads tools:Run GAQL queries and return structured results, plus campaign-performance reports and accessible-account discovery.
- App revenue pulls:Fetch revenue and subscription data by time window.
- Time-window resolution:Convert a look-back day count plus a timezone into standardized start and end dates, so "yesterday / last week" means exactly the same thing across a batch of reports.
- Report assembly:Multi-sheet Excel construction and Markdown report-template rendering.
- Multi-app batch processing:Run the same sub-flow once per app across a batch and merge the results.
- Quality review loop:A standardized quality gate: generate → score → retry if below bar → exit once it passes.
Module Contract
Each module declares a contract: inputs are typed (string / number / boolean / enum / path / json) and can be annotated with required, a default value, enum values, and a numeric range; outputs declare a name, type, and source variable; and the contract has a contract_version that's independent of the workflow's implementation version.
module:
enabled: true
display_name: Web Search
contract_version: 1.0.0
inputs:
- {name: query, type: string, required: true}
- {name: provider, type: enum, default: duckduckgo,
allowed_values: [duckduckgo, serper]}
- {name: max_results, type: number, default: "10", min: 1, max: 100}
outputs:
- {name: results_json, type: string, source: "{{var:results_json}}"}
- {name: result_count, type: number, source: "{{var:result_count}}"}When you change a contract, the platform compares the new one against the old: non-breaking changes (like adding an optional input) pass straight through; breaking changes (which affect existing callers) are rejected by default and require explicit confirmation, with a suggested new contract version number. Contracts also support a deprecated marker plus migration notes to prompt callers to switch to a replacement module.
Referencing In A Workflow
Reference by module id via a sub_workflow step. The values in inputs are all strings (numbers are written as "10" too) and support variable templates; outputs maps the module's outputs back to the parent workflow's variables for later steps to use directly.
workflow:
- step: fetch_metrics
sub_workflow:
name: utility-module-http-request
version_strategy: latest
inputs:
url: "https://api.example.com/v1/metrics"
method: GET
outputs:
status_code: fetch_status
response_body: metrics_json
- step: notify
sub_workflow:
name: utility-module-slack-webhook
inputs:
webhook_url: "{{var:slack_webhook_url}}"
text: "Metrics updated: {{var:metrics_json}}"
outputs:
send_status: notify_status
depends_on:
- fetch_metrics
retry:
max_attempts: 2
backoff: exponentialversion_strategyDefaults to latest; you can also pin a specific version so module updates don't affect an already-live parent workflow.- A reference pointing at a module operates in contract mode, validating inputs / outputs against the contract; if the module is demoted back to an ordinary workflow, the reference degrades to lenient mode and is no longer validated automatically.
- Step modifiers like retry, condition, and depends_on work on sub_workflow steps as usual.
Custom Module
Any workflow can be promoted to a module: in the editor's workflow settings panel, find the "Module contract" section, fill in the display name, description, inputs / outputs, and contract version, and click "Save module contract." It then appears in the module library, and other workflows can reference it via sub_workflow.
When you revoke module status (demote), the platform first runs a reverse-dependency check: if any parent workflow still references the module, it lists the specific reference locations and blocks the operation, to avoid quietly breaking someone else's flow.
Like templates, modules can be published to the marketplace with a version number, and dependencies are resolved automatically on install.