Show HN: WOML – A markup language for building workflows and AI agents An open-source project released WOML, a code-first markup language and runtime for building automated workflows, backend applications, and AI agents, distributed as the woml-cli package via npm, Bun, or pnpm. Each .woml file combines HTML-inspired markup for triggers, steps, branches, loops, parallel work, approvals, and policies with inline JavaScript or imported JavaScript/TypeScript modules, while the runtime manages attempts, retries, state, waits, workflow calls, recovery, and execution history. WOML requires Bun 1.3.14 or later, and its Linux packages require glibc 2.31 or newer. WOML is an open-source, code-first language and runtime for building automated workflows, backend applications, and AI agents. Describe the process in readable, HTML-inspired markup, use JavaScript for logic, and connect the APIs, services, databases, local tools, and infrastructure involved. Each .woml file combines three parts: - Readable structure — triggers, steps, branches, loops, parallel work, approvals, and policies remain visible as markup. - Real code — inline JavaScript and imported JavaScript or TypeScript modules implement custom behavior without waiting for a built-in connector. - Managed execution — the runtime handles attempts, retries, state, waits, workflow calls, recovery, and execution history. The workflow source is the program, its readable architecture, and its execution policy. It can live in Git, move through pull requests and CI, and run locally or on infrastructure you control. Start with one workflow for a local task or webhook. As the work grows, extract reusable modules, call or start other workflows, publish events, and operate the result as a coordinated system without changing its underlying model. | Build | Use WOML to | |---|---| | Automated workflows | Process orders, onboard customers, generate reports, review content, and coordinate human approvals. | | Backend applications | Handle webhooks, expose workflow APIs, run scheduled jobs, and coordinate event-driven services. | | AI agents | Connect models, tools, memory, specialist workflows, and human review in one durable process. | | Data pipelines | Import, validate, transform, classify, and store data with explicit control flow and recovery. | | Infrastructure systems | Run deployment checks, supervise local processes, coordinate infrastructure changes, and respond to incidents. | - Read the whole process — semantic markup keeps execution order, decisions, parallel work, and policies visible from top to bottom. - Use code where it belongs — write JavaScript inline or import JavaScript and TypeScript modules for application-specific logic. - Integrate what your system needs — call APIs, query databases, run approved local tools, and expose project-owned services without waiting for a connector catalog. - Grow through composition — split large systems into reusable workflows that call each other, start background work, and communicate through events. - Keep operational history — durable execution records attempts, decisions, waits, results, and failures so important work can be inspected and recovered. - Own the source and runtime — review workflows in Git and run them on a developer machine, server, container, or infrastructure you control. 1. Describe the process in a .woml file using triggers, steps, control flow, and runtime policies. 2. Connect your tools with inline JavaScript, imported modules, managed services, secrets, and reusable child workflows. 3. Run and operate it with the WOML runtime, which records durable state and provides inspection, cancellation, recovery, logs, and backups. WOML requires Bun https://bun.sh/ 1.3.14 or later. Install the global CLI with npm: npm install --global woml-cli Or install it with Bun or pnpm: bun add --global woml-cli pnpm add --global woml-cli All three commands install the same woml executable: woml --version Native engines are selected automatically for supported macOS, Linux, and Windows systems. You do not need to install the platform packages or configure a database manually. Linux packages require glibc 2.31 or newer. Create a file named order-router.woml :