[
  {
    "title": "TLS trust-store maintenance",
    "route": "/docs/security",
    "kind": "guide",
    "description": "The October 20 [intermediate-key disclosure](https://emudhra.we-have-a-problem.com/) affects clients that still accept the compromised certificate chains. Updating a browser or host alone does not update bundled roots inside an existing IronFlow binary. An affected dependency graph is not proof of interception.",
    "headings": [
      "eMudhra incident: 2026-10-24 assessment",
      "Trust sources",
      "S3 signing",
      "Runtime checks and rollout"
    ]
  },
  {
    "title": "Getting started with IronFlow",
    "route": "/docs/getting-started",
    "kind": "guide",
    "description": "Use a prebuilt binary to run Lua workflows directly, or Docker to start the API without installing IronFlow on your machine. Both include the Lua runtime. The [README Quick Start](../README.md#quick-start) walks through your first flow and API request.",
    "headings": [
      "Download a binary",
      "Linux and macOS",
      "Windows",
      "Use Docker",
      "Select an image",
      "Start a local API server",
      "Run a workflow file",
      "Build from source",
      "Next steps"
    ]
  },
  {
    "title": "IronFlow Architecture",
    "route": "/docs/architecture",
    "kind": "guide",
    "description": "IronFlow is a lightweight, high-performance workflow engine that combines a Rust execution core with Lua scripting for flow definitions. It follows the same proven pattern used by Neovim, OpenResty/Nginx, Redis, and game engines like Roblox — a fast, safe systems language for the runtime, and a minimal scripting language (~20 keywords) for the user-facing layer.",
    "headings": [
      "Overview",
      "Design Principles",
      "System Layers",
      "Key Components",
      "1. Workflow Engine (engine/)",
      "2. Node System (nodes/)",
      "3. Lua Runtime (lua/)",
      "4. State Store (storage/)",
      "5. Scheduler (scheduler/)",
      "Service lifecycle and replicas",
      "6. CLI (cli/)",
      "7. REST API (api/)",
      "Data Flow",
      "Semantic Chunking",
      "Context Model",
      "Binary artifacts",
      "Concurrency Model"
    ]
  },
  {
    "title": "IronFlow — CLI Reference",
    "route": "/docs/cli",
    "kind": "guide",
    "description": "Complete reference for all commands, flags, and environment variables.",
    "headings": [
      "Global Options",
      "Configuration Resolution",
      "Commands",
      "ironflow run <FLOW>",
      "ironflow validate <FLOW>",
      "ironflow nodes",
      "ironflow list",
      "ironflow inspect <RUN_ID>",
      "ironflow artifacts prune",
      "ironflow serve",
      "Configuration File",
      "Encrypted shared stores",
      "JSON file storage",
      "Environment Variables",
      "CLI and storage",
      "Run listing",
      "Engine",
      "Diagnostics",
      "Dotenv",
      "User-defined variables",
      "Exit Codes"
    ]
  },
  {
    "title": "Writing Flows in Lua",
    "route": "/docs/lua-guide",
    "kind": "guide",
    "description": "IronFlow flows are defined in Lua scripts. Each `.lua` file describes a workflow — its steps, dependencies between them, and configuration like retries and timeouts.",
    "headings": [
      "Overview",
      "Basic Structure",
      "Defining Steps",
      "Dependencies",
      "Retries",
      "Timeout",
      "Error Recovery",
      "Context",
      "Context variable interpolation",
      "Environment Variables",
      "Webhook Context",
      "Conditional Execution",
      "step_if — Conditional Step Shorthand",
      "Available Nodes",
      "Inline Lua Code",
      "Function Handlers",
      "Complete Example",
      "Tips"
    ]
  },
  {
    "title": "Node Contributor Manual",
    "route": "/docs/contributing-nodes",
    "kind": "guide",
    "description": "This manual describes how to add a new built-in node to IronFlow.",
    "headings": [
      "1) Understand the node lifecycle",
      "2) Node contract (mandatory)",
      "Contract details",
      "3) Output semantics",
      "4) How to parse config safely",
      "5) Make execution cancellation-safe",
      "6) Context interpolation",
      "7) Place the node in the right folder",
      "8) Register the node",
      "9) Lua API exposure",
      "10) Documentation requirements",
      "11) Tests",
      "12) Example implementation template",
      "13) Linting and quality",
      "14) Common mistakes to avoid",
      "15) Cover every built-in node with an example flow"
    ]
  },
  {
    "title": "http_request",
    "route": "/docs/nodes/http_request",
    "kind": "node",
    "category": "HTTP",
    "description": "Generic HTTP request with full configuration",
    "headings": [
      "Parameters",
      "Auth",
      "Context Output",
      "Status Retries",
      "Example",
      "Artifact Transfer"
    ]
  },
  {
    "title": "http_get",
    "route": "/docs/nodes/http_get",
    "kind": "node",
    "category": "HTTP",
    "description": "HTTP GET convenience wrapper",
    "headings": [
      "Parameters",
      "Auth",
      "Context Output",
      "Status Retries",
      "Example"
    ]
  },
  {
    "title": "http_post",
    "route": "/docs/nodes/http_post",
    "kind": "node",
    "category": "HTTP",
    "description": "HTTP POST convenience wrapper",
    "headings": [
      "Parameters",
      "Auth",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "http_put",
    "route": "/docs/nodes/http_put",
    "kind": "node",
    "category": "HTTP",
    "description": "HTTP PUT convenience wrapper",
    "headings": [
      "Parameters",
      "Auth",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "http_delete",
    "route": "/docs/nodes/http_delete",
    "kind": "node",
    "category": "HTTP",
    "description": "HTTP DELETE convenience wrapper",
    "headings": [
      "Parameters",
      "Auth",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "shell_command",
    "route": "/docs/nodes/shell_command",
    "kind": "node",
    "category": "Shell",
    "description": "Execute a shell command and capture output",
    "headings": [
      "Parameters",
      "Context Output",
      "Exit and failure policy",
      "Example"
    ]
  },
  {
    "title": "read_file",
    "route": "/docs/nodes/read_file",
    "kind": "node",
    "category": "File Operation",
    "description": "Read text, explicitly encode Base64, or stream a file to the artifact store",
    "headings": [
      "Parameters",
      "Context Output",
      "Resource and file-type limits",
      "Examples",
      "Read a text file",
      "Store a binary file without putting it in context"
    ]
  },
  {
    "title": "write_file",
    "route": "/docs/nodes/write_file",
    "kind": "node",
    "category": "File Operation",
    "description": "Write content to a file",
    "headings": [
      "Parameters",
      "Safety and resource contract",
      "Context output",
      "Examples"
    ]
  },
  {
    "title": "copy_file",
    "route": "/docs/nodes/copy_file",
    "kind": "node",
    "category": "File Operation",
    "description": "Copy a file to a new location",
    "headings": [
      "Parameters",
      "Source and destination safety",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "move_file",
    "route": "/docs/nodes/move_file",
    "kind": "node",
    "category": "File Operation",
    "description": "Move or rename a file",
    "headings": [
      "Parameters",
      "Destination safety",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "delete_file",
    "route": "/docs/nodes/delete_file",
    "kind": "node",
    "category": "File Operation",
    "description": "Delete a file",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "list_directory",
    "route": "/docs/nodes/list_directory",
    "kind": "node",
    "category": "File Operation",
    "description": "List files in a directory",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Limits"
    ]
  },
  {
    "title": "zip_create",
    "route": "/docs/nodes/zip_create",
    "kind": "node",
    "category": "File Operation",
    "description": "Create a ZIP archive from a file or directory",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Filesystem, limits, and cancellation"
    ]
  },
  {
    "title": "zip_extract",
    "route": "/docs/nodes/zip_extract",
    "kind": "node",
    "category": "File Operation",
    "description": "Extract ZIP archive entries to a directory",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Preflight and filesystem safety",
      "Cancellation and partial output"
    ]
  },
  {
    "title": "zip_list",
    "route": "/docs/nodes/zip_list",
    "kind": "node",
    "category": "File Operation",
    "description": "List ZIP archive entries",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Filesystem, limits, and cancellation"
    ]
  },
  {
    "title": "s3_presign_url",
    "route": "/docs/nodes/s3_presign_url",
    "kind": "node",
    "category": "S3",
    "description": "Generate a presigned URL for supported S3 operations",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3_copy_object",
    "route": "/docs/nodes/s3_copy_object",
    "kind": "node",
    "category": "S3",
    "description": "Copy an S3 object to another key or bucket",
    "headings": [
      "Parameters",
      "Source Key Encoding",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3_delete_object",
    "route": "/docs/nodes/s3_delete_object",
    "kind": "node",
    "category": "S3",
    "description": "Delete an object from S3",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3_get_object",
    "route": "/docs/nodes/s3_get_object",
    "kind": "node",
    "category": "S3",
    "description": "Download an object from S3",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3_list_buckets",
    "route": "/docs/nodes/s3_list_buckets",
    "kind": "node",
    "category": "S3",
    "description": "List available buckets in the S3 account",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3_list_objects",
    "route": "/docs/nodes/s3_list_objects",
    "kind": "node",
    "category": "S3",
    "description": "List objects under a S3 key prefix",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3_put_object",
    "route": "/docs/nodes/s3_put_object",
    "kind": "node",
    "category": "S3",
    "description": "Upload an object to S3",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3vector_create_bucket",
    "route": "/docs/nodes/s3vector_create_bucket",
    "kind": "node",
    "category": "S3 Vector",
    "description": "Create an Amazon S3 Vector bucket",
    "headings": [
      "Parameters",
      "Target Resolution",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3vector_create_index",
    "route": "/docs/nodes/s3vector_create_index",
    "kind": "node",
    "category": "S3 Vector",
    "description": "Create an index inside an S3 Vector bucket",
    "headings": [
      "Parameters",
      "Target Resolution",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3vector_delete_bucket",
    "route": "/docs/nodes/s3vector_delete_bucket",
    "kind": "node",
    "category": "S3 Vector",
    "description": "Delete an empty Amazon S3 Vector bucket",
    "headings": [
      "Parameters",
      "Target Resolution and Safety",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3vector_delete_index",
    "route": "/docs/nodes/s3vector_delete_index",
    "kind": "node",
    "category": "S3 Vector",
    "description": "Delete an Amazon S3 Vector index and its data",
    "headings": [
      "Parameters",
      "Target Resolution and Safety",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3vector_delete_vectors",
    "route": "/docs/nodes/s3vector_delete_vectors",
    "kind": "node",
    "category": "S3 Vector",
    "description": "Delete vectors from an S3 Vector index",
    "headings": [
      "Parameters",
      "Target Resolution and Safety",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3vector_get_bucket",
    "route": "/docs/nodes/s3vector_get_bucket",
    "kind": "node",
    "category": "S3 Vector",
    "description": "Get metadata for an S3 Vector bucket",
    "headings": [
      "Parameters",
      "Target Resolution",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3vector_get_index",
    "route": "/docs/nodes/s3vector_get_index",
    "kind": "node",
    "category": "S3 Vector",
    "description": "Get metadata for an S3 Vector index",
    "headings": [
      "Parameters",
      "Target Resolution",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3vector_put_vectors",
    "route": "/docs/nodes/s3vector_put_vectors",
    "kind": "node",
    "category": "S3 Vector",
    "description": "Upload vectors to an S3 Vector index",
    "headings": [
      "Parameters",
      "Target Resolution",
      "Vector Payload",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "s3vector_query_vectors",
    "route": "/docs/nodes/s3vector_query_vectors",
    "kind": "node",
    "category": "S3 Vector",
    "description": "Query nearest vectors in an S3 Vector index",
    "headings": [
      "Parameters",
      "Target Resolution",
      "Query Vector",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "send_email",
    "route": "/docs/nodes/send_email",
    "kind": "node",
    "category": "Notification",
    "description": "Send an email via Resend API or SMTP",
    "headings": [
      "Parameters",
      "Common Parameters",
      "Resend-specific Parameters",
      "SMTP-specific Parameters",
      "HTTP Transport",
      "Context Output",
      "Environment Variables",
      "Examples",
      "Resend API",
      "SMTP",
      "Multiple recipients"
    ]
  },
  {
    "title": "slack_notification",
    "route": "/docs/nodes/slack_notification",
    "kind": "node",
    "category": "Notification",
    "description": "Send a message to Slack via incoming webhook",
    "headings": [
      "Parameters",
      "HTTP Transport",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "csv_parse",
    "route": "/docs/nodes/csv_parse",
    "kind": "node",
    "category": "Data Transform",
    "description": "Parse CSV text into JSON rows",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "csv_stringify",
    "route": "/docs/nodes/csv_stringify",
    "kind": "node",
    "category": "Data Transform",
    "description": "Convert JSON data to CSV text",
    "headings": [
      "Parameters",
      "Input Shapes",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "json_extract_path",
    "route": "/docs/nodes/json_extract_path",
    "kind": "node",
    "category": "Data Transform",
    "description": "Extract a nested value from JSON by path",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "json_parse",
    "route": "/docs/nodes/json_parse",
    "kind": "node",
    "category": "Data Transform",
    "description": "Parse a JSON string into a value",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "json_stringify",
    "route": "/docs/nodes/json_stringify",
    "kind": "node",
    "category": "Data Transform",
    "description": "Serialize a value to a JSON string",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "select_fields",
    "route": "/docs/nodes/select_fields",
    "kind": "node",
    "category": "Data Transform",
    "description": "Pick specific fields from an object",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "rename_fields",
    "route": "/docs/nodes/rename_fields",
    "kind": "node",
    "category": "Data Transform",
    "description": "Rename fields in an object",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "data_filter",
    "route": "/docs/nodes/data_filter",
    "kind": "node",
    "category": "Data Transform",
    "description": "Filter array items by a field condition",
    "headings": [
      "Parameters",
      "Operators",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "data_transform",
    "route": "/docs/nodes/data_transform",
    "kind": "node",
    "category": "Data Transform",
    "description": "Map/rename fields across objects or arrays",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "batch",
    "route": "/docs/nodes/batch",
    "kind": "node",
    "category": "Data Transform",
    "description": "Split an array into chunks",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "deduplicate",
    "route": "/docs/nodes/deduplicate",
    "kind": "node",
    "category": "Data Transform",
    "description": "Remove duplicate items from an array",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "foreach",
    "route": "/docs/nodes/foreach",
    "kind": "node",
    "category": "Data Transform",
    "description": "Iterate over an array with a Lua transform (string or function)",
    "headings": [
      "Parameters",
      "Execution Limits",
      "Context Output",
      "Examples",
      "Transform each item",
      "Filter with nil"
    ]
  },
  {
    "title": "if_node",
    "route": "/docs/nodes/if_node",
    "kind": "node",
    "category": "Conditional",
    "description": "Evaluate a condition and set a route",
    "headings": [
      "Parameters",
      "Condition Syntax",
      "Comparison operators",
      "Existence check",
      "Bare truthy check",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "if_body_contains",
    "route": "/docs/nodes/if_body_contains",
    "kind": "node",
    "category": "Conditional",
    "description": "Route execution based on context content pattern match",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "if_http_status",
    "route": "/docs/nodes/if_http_status",
    "kind": "node",
    "category": "Conditional",
    "description": "Route execution based on an HTTP status key",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "switch_node",
    "route": "/docs/nodes/switch_node",
    "kind": "node",
    "category": "Conditional",
    "description": "Multi-case routing based on a context value",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "delay",
    "route": "/docs/nodes/delay",
    "kind": "node",
    "category": "Timing",
    "description": "Pause execution for a duration",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "cache_set",
    "route": "/docs/nodes/cache_set",
    "kind": "node",
    "category": "Cache",
    "description": "Store a value with optional TTL (memory or file)",
    "headings": [
      "Parameters",
      "Context Output",
      "File Storage",
      "Example",
      "Memory backend",
      "Environment",
      "File backend"
    ]
  },
  {
    "title": "cache_get",
    "route": "/docs/nodes/cache_get",
    "kind": "node",
    "category": "Cache",
    "description": "Retrieve a cached value",
    "headings": [
      "Parameters",
      "File Identity and Upgrades",
      "Context Output",
      "Example",
      "Memory backend",
      "Environment",
      "File backend"
    ]
  },
  {
    "title": "markdown_to_html",
    "route": "/docs/nodes/markdown_to_html",
    "kind": "node",
    "category": "Markdown",
    "description": "Convert Markdown to HTML",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "markdown_to_pdf",
    "route": "/docs/nodes/markdown_to_pdf",
    "kind": "node",
    "category": "Markdown",
    "description": "Generate a searchable PDF locally from Markdown",
    "headings": []
  },
  {
    "title": "markdown_to_docx",
    "route": "/docs/nodes/markdown_to_docx",
    "kind": "node",
    "category": "Markdown",
    "description": "Generate an editable Word document locally from Markdown",
    "headings": []
  },
  {
    "title": "html_to_markdown",
    "route": "/docs/nodes/html_to_markdown",
    "kind": "node",
    "category": "Markdown",
    "description": "Convert HTML to Markdown",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "xml_parse",
    "route": "/docs/nodes/xml_parse",
    "kind": "node",
    "category": "XML",
    "description": "Parse XML text into a JSON object",
    "headings": [
      "Parameters",
      "Context Output",
      "XML to JSON Mapping",
      "Text Fidelity and Limits",
      "Example"
    ]
  },
  {
    "title": "xml_stringify",
    "route": "/docs/nodes/xml_stringify",
    "kind": "node",
    "category": "XML",
    "description": "Convert a JSON object to XML text",
    "headings": [
      "Parameters",
      "Context Output",
      "JSON to XML Mapping",
      "Example"
    ]
  },
  {
    "title": "yaml_parse",
    "route": "/docs/nodes/yaml_parse",
    "kind": "node",
    "category": "YAML",
    "description": "Parse YAML text into a JSON value",
    "headings": [
      "Parameters",
      "Context Output",
      "Parsing Semantics",
      "Example"
    ]
  },
  {
    "title": "yaml_stringify",
    "route": "/docs/nodes/yaml_stringify",
    "kind": "node",
    "category": "YAML",
    "description": "Convert a JSON value to YAML text",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "html_sanitize",
    "route": "/docs/nodes/html_sanitize",
    "kind": "node",
    "category": "HTML Sanitization",
    "description": "Sanitize HTML by removing unsafe tags, attributes, and scripts",
    "headings": [
      "Parameters",
      "Context Output",
      "Examples",
      "Basic sanitization",
      "Custom allowed tags",
      "From context"
    ]
  },
  {
    "title": "date_format",
    "route": "/docs/nodes/date_format",
    "kind": "node",
    "category": "Date/Time",
    "description": "Parse, reformat, and convert dates/timestamps",
    "headings": [
      "Parameters",
      "Auto-detected Input Formats",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "base64_encode",
    "route": "/docs/nodes/base64_encode",
    "kind": "node",
    "category": "Encoding",
    "description": "Encode a string, context value, or file to base64",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "base64_decode",
    "route": "/docs/nodes/base64_decode",
    "kind": "node",
    "category": "Encoding",
    "description": "Decode a base64 string to text or file",
    "headings": [
      "Parameters",
      "Context Output",
      "File safety",
      "Example"
    ]
  },
  {
    "title": "extract_word",
    "route": "/docs/nodes/extract_word",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Extract text and metadata from Word (.docx)",
    "headings": [
      "Text Fidelity",
      "Parameters",
      "Context Output",
      "JSON format",
      "Paragraph block",
      "Table block",
      "Comments",
      "Color resolution",
      "Resource and cancellation contract",
      "Examples",
      "Markdown extraction",
      "JSON IR for LLM-driven extraction"
    ]
  },
  {
    "title": "extract_pptx",
    "route": "/docs/nodes/extract_pptx",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Extract PowerPoint content and optionally stream embedded media to artifacts",
    "headings": [
      "Presentation Order",
      "Text Fidelity",
      "Parameters",
      "Context Output",
      "JSON output shape",
      "Element types",
      "Comments",
      "Resource and cancellation contract",
      "Examples",
      "Extract a stimulus deck as JSON",
      "Markdown for previewing"
    ]
  },
  {
    "title": "extract_pdf",
    "route": "/docs/nodes/extract_pdf",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Extract text and metadata from PDF",
    "headings": [
      "Parameters",
      "Context Output",
      "Resource and cancellation contract",
      "Example"
    ]
  },
  {
    "title": "extract_html",
    "route": "/docs/nodes/extract_html",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Extract text and metadata from HTML",
    "headings": [
      "Parameters",
      "Context Output",
      "Content Filtering",
      "Resource and cancellation contract",
      "Example"
    ]
  },
  {
    "title": "extract_vtt",
    "route": "/docs/nodes/extract_vtt",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Extract text and metadata from WebVTT subtitles",
    "headings": [
      "Parameters",
      "Context Output",
      "Resource and cancellation contract",
      "Example"
    ]
  },
  {
    "title": "extract_srt",
    "route": "/docs/nodes/extract_srt",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Extract text and metadata from SRT subtitles",
    "headings": [
      "Parameters",
      "Context Output",
      "Resource and cancellation contract",
      "Example"
    ]
  },
  {
    "title": "extract_xlsx",
    "route": "/docs/nodes/extract_xlsx",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Extract typed rows from an Excel (.xlsx) workbook",
    "headings": [
      "Text Fidelity",
      "Parameters",
      "Context Output",
      "Cell types",
      "Text Dates vs. Excel Dates",
      "Headers",
      "Ceilings",
      "Examples",
      "Read every sheet without a header",
      "Read one sheet by name, with a header row"
    ]
  },
  {
    "title": "pdf_metadata",
    "route": "/docs/nodes/pdf_metadata",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Extract PDF metadata fields and page count",
    "headings": [
      "Parameters",
      "Resource contract",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "pdf_to_image",
    "route": "/docs/nodes/pdf_to_image",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Render PDF pages to disk-backed image artifacts",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Limits"
    ]
  },
  {
    "title": "pdf_thumbnail",
    "route": "/docs/nodes/pdf_thumbnail",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Render one PDF page to a disk-backed thumbnail artifact",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Limits"
    ]
  },
  {
    "title": "pdf_merge",
    "route": "/docs/nodes/pdf_merge",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Merge multiple PDF files into one",
    "headings": [
      "Parameters",
      "Resource and durability contract",
      "Context output",
      "Example"
    ]
  },
  {
    "title": "pdf_split",
    "route": "/docs/nodes/pdf_split",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Select PDF pages by number or range; write single pages or grouped multipage slices",
    "headings": [
      "Parameters",
      "Grouped output",
      "Limits and cancellation",
      "Page isolation and fidelity",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "image_metadata",
    "route": "/docs/nodes/image_metadata",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Extract image dimensions, format, and color type",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Resource contract"
    ]
  },
  {
    "title": "image_convert",
    "route": "/docs/nodes/image_convert",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Convert an image between formats (PNG, JPEG, etc.)",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Resource contract"
    ]
  },
  {
    "title": "image_watermark",
    "route": "/docs/nodes/image_watermark",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Apply a semi-transparent text watermark to an image",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Resource contract"
    ]
  },
  {
    "title": "image_rotate",
    "route": "/docs/nodes/image_rotate",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Rotate a single image by 90-degree steps",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Resource contract"
    ]
  },
  {
    "title": "image_flip",
    "route": "/docs/nodes/image_flip",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Flip a single image horizontally/vertically",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Resource contract"
    ]
  },
  {
    "title": "image_grayscale",
    "route": "/docs/nodes/image_grayscale",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Convert a single image to grayscale",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Resource contract"
    ]
  },
  {
    "title": "image_to_pdf",
    "route": "/docs/nodes/image_to_pdf",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Convert images to PDF",
    "headings": [
      "Parameters",
      "Image entry formats",
      "Context Output",
      "Example",
      "Resource contract"
    ]
  },
  {
    "title": "image_resize",
    "route": "/docs/nodes/image_resize",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Resize a single image",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Resource contract"
    ]
  },
  {
    "title": "image_crop",
    "route": "/docs/nodes/image_crop",
    "kind": "node",
    "category": "Document Extraction",
    "description": "Crop a single image",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Resource contract"
    ]
  },
  {
    "title": "db_query",
    "route": "/docs/nodes/db_query",
    "kind": "node",
    "category": "Database",
    "description": "Execute a SQL SELECT query and return rows",
    "headings": [
      "Parameters",
      "Context Output",
      "Result Types",
      "Example",
      "Notes",
      "See Also"
    ]
  },
  {
    "title": "db_exec",
    "route": "/docs/nodes/db_exec",
    "kind": "node",
    "category": "Database",
    "description": "Execute a SQL INSERT/UPDATE/DELETE statement",
    "headings": [
      "Parameters",
      "Context Output",
      "Example",
      "Notes",
      "See Also"
    ]
  },
  {
    "title": "arangodb_aql",
    "route": "/docs/nodes/arangodb_aql",
    "kind": "node",
    "category": "Database",
    "description": "Execute an AQL query against ArangoDB via HTTP",
    "headings": [
      "Parameters",
      "Environment Variable Fallbacks",
      "Authentication",
      "HTTP Transport",
      "Cursor Lifecycle",
      "Context Output",
      "Context Interpolation",
      "Typed Context Binds",
      "Examples",
      "Continue or stop early",
      "Simple query",
      "Query with bind variables",
      "Typed Document Ingestion",
      "Explicit connection (overrides env)"
    ]
  },
  {
    "title": "llm",
    "route": "/docs/nodes/llm",
    "kind": "node",
    "category": "AI",
    "description": "Unified request node for Chat Completions/Responses across providers",
    "headings": [
      "Parameters",
      "Environment Variable Fallbacks",
      "Transport and Errors",
      "Context Output",
      "Runtime Messages and Image Artifacts",
      "Examples",
      "OpenAI Chat (simple)",
      "Azure Chat",
      "OpenAI-compatible Responses",
      "Gemini (custom provider)",
      "OpenAI response_format: json_object and json_schema",
      "OpenAI Responses internal tools (web search)",
      "OpenAI function calling with Lua-defined function tools"
    ]
  },
  {
    "title": "ai_embed",
    "route": "/docs/nodes/ai_embed",
    "kind": "node",
    "category": "AI",
    "description": "Generate text embeddings via OpenAI, Ollama, or OAuth providers",
    "headings": [
      "Parameters",
      "Default Models",
      "Environment Variable Fallbacks",
      "HTTP Transport",
      "Batching and Limits",
      "Context Output",
      "Input",
      "Examples",
      "OpenAI embeddings",
      "Ollama (local)",
      "OAuth-authenticated endpoint",
      "Batch embedding"
    ]
  },
  {
    "title": "ai_chunk",
    "route": "/docs/nodes/ai_chunk",
    "kind": "node",
    "category": "AI",
    "description": "Split text into chunks (fixed/split), or group timestamped subtitle cues into time-anchored chunks (mode \"cues\")",
    "headings": [
      "Parameters",
      "Delimiter defaults",
      "Context Output",
      "Modes",
      "fixed — Size-based chunking",
      "split — Delimiter splitting",
      "Examples",
      "Fixed-size chunking",
      "Delimiter splitting",
      "Mode: cues (timestamp-preserving)"
    ]
  },
  {
    "title": "ai_chunk_merge",
    "route": "/docs/nodes/ai_chunk_merge",
    "kind": "node",
    "category": "AI",
    "description": "Merge small text chunks into token-budget groups",
    "headings": [
      "Parameters",
      "Context Output",
      "Algorithm",
      "Examples",
      "Merge after chunking"
    ]
  },
  {
    "title": "ai_chunk_semantic",
    "route": "/docs/nodes/ai_chunk_semantic",
    "kind": "node",
    "category": "AI",
    "description": "Split text into semantic chunks using embedding similarity",
    "headings": [
      "Parameters",
      "Provider auth parameters",
      "HTTP Transport",
      "Context Output",
      "Algorithm",
      "Tuning",
      "Examples",
      "Semantic chunking with OpenAI",
      "Semantic chunking with Ollama (local)",
      "Fine-tuned splitting"
    ]
  },
  {
    "title": "transcribe",
    "route": "/docs/nodes/transcribe",
    "kind": "node",
    "category": "AI",
    "description": "Transcribe an audio or video file to VTT, SRT, text, or JSON via OpenAI, an OpenAI-compatible endpoint, or Azure",
    "headings": [
      "Parameters",
      "Formats",
      "Environment Variable Fallbacks",
      "Azure",
      "Context Output",
      "Examples",
      "OpenAI, plain text",
      "Azure OpenAI",
      "Verbose JSON (segments, duration, detected language)",
      "Writing the transcript to a file for a downstream extractor"
    ]
  },
  {
    "title": "subworkflow",
    "route": "/docs/nodes/subworkflow",
    "kind": "node",
    "category": "Composition",
    "description": "Load and execute another `.lua` flow as a reusable module",
    "headings": [
      "Parameters",
      "Error Handling",
      "Context Injection",
      "Context Output",
      "Examples",
      "Basic usage",
      "Fire-and-forget",
      "Input mapping",
      "Output namespacing with output_key",
      "Reusable helper flow (greet.lua)"
    ]
  },
  {
    "title": "parallel_subworkflows",
    "route": "/docs/nodes/parallel_subworkflows",
    "kind": "node",
    "category": "Composition",
    "description": "Execute multiple subworkflows concurrently and collect results",
    "headings": [
      "Parameters",
      "Flow Entry Parameters",
      "Context Output",
      "Example",
      "With input mapping",
      "Dynamic fan-out from context",
      "Error handling"
    ]
  },
  {
    "title": "repeat_subworkflow",
    "route": "/docs/nodes/repeat_subworkflow",
    "kind": "node",
    "category": "Composition",
    "description": "Repeat a child workflow with explicit bounded state until it completes",
    "headings": [
      "Parameters",
      "Child Contract",
      "Context Output",
      "Example",
      "Operational Bounds"
    ]
  },
  {
    "title": "tool_dispatch",
    "route": "/docs/nodes/tool_dispatch",
    "kind": "node",
    "category": "Composition",
    "description": "Dispatch LLM tool calls to mapped subworkflow handlers",
    "headings": [
      "Parameters",
      "Tool Handler Mapping",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "mcp_client",
    "route": "/docs/nodes/mcp_client",
    "kind": "node",
    "category": "MCP",
    "description": "Stateful MCP 2025-11-25 client over stdio or Streamable HTTP (`initialize`, `list_tools`, `call_tool`, `close`)",
    "headings": [
      "Parameters",
      "Common parameters",
      "Initialization parameters",
      "Tool-call parameters",
      "Session lifecycle",
      "Context output",
      "Example: persistent stdio session",
      "Example: Streamable HTTP"
    ]
  },
  {
    "title": "code",
    "route": "/docs/nodes/code",
    "kind": "node",
    "category": "Code Execution",
    "description": "Execute inline Lua code with context access",
    "headings": [
      "Parameters",
      "Source mode",
      "Function handler (bytecode) mode",
      "Context projection",
      "Sandboxing",
      "Available globals",
      "Execution limits",
      "Return Value Handling",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "log",
    "route": "/docs/nodes/log",
    "kind": "node",
    "category": "Utility",
    "description": "Write a message to the workflow log",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "json_validate",
    "route": "/docs/nodes/json_validate",
    "kind": "node",
    "category": "Utility",
    "description": "Parse JSON text and validate it against a JSON Schema",
    "headings": [
      "Parameters",
      "Schema References",
      "Context Output",
      "Example",
      "Validate with a schema loaded from a file"
    ]
  },
  {
    "title": "validate_schema",
    "route": "/docs/nodes/validate_schema",
    "kind": "node",
    "category": "Utility",
    "description": "Validate data against a JSON Schema",
    "headings": [
      "Parameters",
      "Schema References",
      "Context Output",
      "Example",
      "Validate with a schema loaded from context"
    ]
  },
  {
    "title": "template_render",
    "route": "/docs/nodes/template_render",
    "kind": "node",
    "category": "Utility",
    "description": "Render a string template with context variables",
    "headings": [
      "Parameters",
      "Context Output",
      "Example"
    ]
  },
  {
    "title": "hash",
    "route": "/docs/nodes/hash",
    "kind": "node",
    "category": "Utility",
    "description": "Compute a cryptographic hash",
    "headings": [
      "Parameters",
      "Supported Algorithms",
      "Context Output",
      "Example"
    ]
  }
]
