{"slug": "show-hn-vejas-an-integration-platform-with-no-builder-ui-agents-write-flows", "title": "Show HN: Vejas – an integration platform with no builder UI; agents write flows", "summary": "Vejas, an integration platform with no builder UI where coding agents write flows in VejasScript, has two production customers collecting NIS2 supplier-compliance evidence across eight EU countries. The platform runs on a single Rust binary over NATS, with measured cold start of 11–13 ms, 6–8 MB RSS under load, and end-to-end p50 of 2 ms uncongested, sustaining 1,900 events/s with every hop persisted.", "body_md": "An integration platform with no builder UI. Flows are **VejasScript** — plain,\nreadable code written by your coding agent, reviewed in git, and run natively by\na single Rust binary on NATS. Humans keep two screens: monitoring for operators,\nand a business panel where non-technical experts validate and correct\ntranscoding tables and thresholds. The agent owns *how*; the human owns *what it\nmeans*. The whole platform is drivable over MCP.\n\nVėjas is the old Baltic god of the wind. Wind moves things without anyone drawing the route.\n\n**Status: young, but real** — two production customers so far, collecting NIS2\nsupplier-compliance evidence across eight EU countries today. Interfaces still\nmove fast. Start here: ** the documentation** ·\n\n[COOKBOOK](/cpoder/vejas/blob/master/docs/COOKBOOK.md)·\n\n[VISION](/cpoder/vejas/blob/master/docs/VISION.md)·\n\n[ARCHITECTURE](/cpoder/vejas/blob/master/docs/ARCHITECTURE.md)·\n\n[ROADMAP](/cpoder/vejas/blob/master/docs/ROADMAP.md)·\n\n[ADRs](/cpoder/vejas/blob/master/docs/adr). The bet, long-form:\n\n[MANIFESTO.md](/cpoder/vejas/blob/master/MANIFESTO.md).\n\n**The demo, 45 seconds** — a real SAP NetWeaver and a real Salesforce org,\nbridged both ways by two readable flows; a domain expert corrects a business\nrule on screen, the change is shadow-replayed on the real events, promoted,\nand the next IDoc lives the corrected rule. The recording is also a green\nend-to-end test ([the script](/cpoder/vejas/blob/master/e2e/bridge-film.mjs)) — the video cannot lie.\n[Full video (mp4)](/cpoder/vejas/blob/master/docs/demo/vejas-bridge-film.mp4).\n\n**Measured, not claimed** — reproducible on an 8-core dev machine\n([methodology and comparisons](/cpoder/vejas/blob/master/bench)): cold start **11–13 ms**, **6–8 MB**\nRSS under load (49 MB with fifty live flows), **6.2 MB** binary / **201 MB**\nimage, end-to-end p50 **2 ms** uncongested / p50 14 ms at a paced 1 900/s\nsustained with **every event hop persisted** in JetStream, **2 285/s** through a\nreal MQTT broker and back (QoS 1 both ways, PUBACK-gated). Same order of\nmagnitude as engines that persist nothing, in ~25× less memory.\n\nBelow: a flow an agent wrote from one sentence, in VejasScript. Its transcoding table is seeded, samples come from the fixture, the emitted payload sits on top, and the whole script is editable in the panel. A domain expert corrects any of it without touching code:\n\n**Runtime**— one Rust binary. Runs VejasScript flows in-process (a durable NATS consumer + the interpreter per flow), hot-reloads on edit, serves the panel and the MCP server. No Python, no subprocess. (ADR-0001, ADR-0009)**Transport**— NATS with JetStream, the only infrastructure dependency (persistence, KV, object store). Two containers, one`docker compose up`\n\n. (ADR-0002)**Clustering**— run N runtimes on the same NATS: flows load-balance and fail over natively (measured: an instance kill -9'd under load, every message still delivered exactly-all), singleton sources take a KV lease (graceful handoff 2.6 s, crash failover bounded by the TTL), and a clustered instance refuses local-file mutations — a live promote instead publishes a**version** every instance converges on (measured: 60 ms convergence, lossless mid-burst). (ADR-0020/0021, measured in[bench/](/cpoder/vejas/blob/master/bench))**Language**— VejasScript:`source`\n\nin,`emit`\n\nout,`invoke`\n\nto compose services (pipeline-merge composition), transcoding tables and thresholds as editable literals.**Packages**— group flows and services, hot-addable; cross-package calls go through`EXPORTS`\n\n(private by default) or the bus. (ADR-0003, ADR-0004)**Connectors**— a typed Rust** driver SDK**(`Driver`\n\ntrait, Source/Sink). Bundled drivers:`http-in`\n\n,`timer`\n\n,`http-poll`\n\n,`oauth-poll`\n\n(a generic OAuth2 REST poller that stands in for much of a SaaS catalog),`slack-out`\n\n,`http-out`\n\n, plus the exec bridges (`exec-source`\n\n/`exec-sink`\n\n/`exec-stream-source`\n\n/`exec-rpc`\n\n), which wrap a program in**any language** over stdio, isolated by process. That is how the**SAP connector** ships: native Rust over the official`libsapnwrfc`\n\nC library — BAPI/RFC calls, IDocs in and out over tRFC, no JVM (ADR-0014) — and the**Salesforce** connector (OAuth2 + Bulk API 2.0, streaming). An instance is a declarative`.vjs`\n\nmanifest, hot-addable, and an agent can write one from a prompt. The subject convention stays the whole interface, so an out-of-process connector is first-class. (ADR-0007, ADR-0011, ADR-0014)**Secrets**—`secret(\"path/key\")`\n\nresolves from a Vault (HashiCorp KV v2; an env backend for dev) at run time. A secret is never a literal, so it never lands in git, the panel, or the business surface. (ADR-0008)**UI**— no builder. Monitoring (pipeline graph, statuses, a live feed of the last processed events) + a business panel where experts review and correct the business surface (rendered from literals in the code). A correction is**shadow-replayed on the flow's last real events**— before/after diff, then promote or discard. You never click to draw a flow. (ADR-0005)** Versioning**— a candidate version of a flow replays** yesterday's real traffic**(time-travel) or shadow-follows** live**traffic (canary), diffed side by side per event; unproven code never emits for real. Promote publishes the version cluster-wide (measured: 60 ms, lossless), audited, rollback included. (ADR-0021)**MCP & API**— the runtime is its own MCP server; a flow that declares`tool \"…\"`\n\nbecomes a first-class MCP tool, and one that declares`api \"VERB /path\"`\n\nbecomes a synchronous HTTP endpoint with an auto-generated OpenAPI document. The platform grows its own tool and API surface as you write flows. (ADR-0006,[docs/MCP.md](/cpoder/vejas/blob/master/docs/MCP.md))\n\n```\ndocker compose up                              # nats + vejas, nothing else\nclaude mcp add --transport http vejas http://localhost:8686/mcp   # or any MCP client\n# then ask your agent for a flow: it reads the language reference over MCP\n# (vejas_language), writes the .vjs, tests it, and it lands running.\n# The panel: http://localhost:8686 — a webhook entry: POST :8787/ingest/<subject>\n```\n\nDevelop and test:\n\n```\ncargo test --manifest-path core/Cargo.toml     # language unit tests\ncore/target/release/vejas-runtime vjs-test tests/vjs   # golden end-to-end cases\n```\n\nSecurity defaults: the panel/MCP port (8686) binds to localhost only — that\nsurface can write flows and run commands (exec connectors), so expose it\ndeliberately. Set `VEJAS_TOKEN`\n\nand every write (POST, `/mcp`\n\nincluded)\nrequires `Authorization: Bearer <token>`\n\n. The webhook port (8787) only\npublishes events onto the bus.\n\nApache-2.0. A platform that argues against proprietary formats has to start with itself.", "url": "https://wpnews.pro/news/show-hn-vejas-an-integration-platform-with-no-builder-ui-agents-write-flows", "canonical_source": "https://github.com/cpoder/vejas", "published_at": "2026-08-25 10:56:02+00:00", "updated_at": "2026-08-25 11:15:51.581396+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-infrastructure"], "entities": ["Vejas", "NATS", "JetStream", "Rust", "SAP NetWeaver", "Salesforce", "MCP", "NIS2"], "alternates": {"html": "https://wpnews.pro/news/show-hn-vejas-an-integration-platform-with-no-builder-ui-agents-write-flows", "markdown": "https://wpnews.pro/news/show-hn-vejas-an-integration-platform-with-no-builder-ui-agents-write-flows.md", "text": "https://wpnews.pro/news/show-hn-vejas-an-integration-platform-with-no-builder-ui-agents-write-flows.txt", "jsonld": "https://wpnews.pro/news/show-hn-vejas-an-integration-platform-with-no-builder-ui-agents-write-flows.jsonld"}}