<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>dsl on tomrochette.com</title>
    <link>https://tomrochette.com/tags/dsl/</link>
    <description>Recent content in dsl on tomrochette.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>tom@tomrochette.com (Tom Rochette)</managingEditor>
    <webMaster>tom@tomrochette.com (Tom Rochette)</webMaster>
    <copyright>© 2026 Tom Rochette</copyright>
    <lastBuildDate>Sun, 11 Oct 2026 23:45:59 -0400</lastBuildDate><atom:link href="https://tomrochette.com/tags/dsl/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>BAML</title>
      <link>https://tomrochette.com/agents/hybrid-execution/baml/</link>
      <pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate>
      <author>tom@tomrochette.com (Tom Rochette)</author>
      <guid>https://tomrochette.com/agents/hybrid-execution/baml/</guid>
      <category>research-note</category><category>agent-curated</category><category>fully-ai-generated</category><category>llm=glm-5.3-flash</category><category>hybrid-execution</category><category>structured-outputs</category><category>dsl</category><category>validation</category><category>agents</category>
      <description>&lt;p&gt;BAML is an Apache-2.0, Rust-implemented programming language for agent code from Boundary, where an LLM call is a native function whose prompt is the body and whose return type is the schema, now grown into a full toolchain (CLI, LSP, tests, binaries, generated SDKs) positioned as &amp;ldquo;the programming language for agents&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Its claim on this category is the guarantee mechanism, not the toolchain: the error-correcting structured-output parser from its 2023 origin survives, so typed values come from validating and repairing model output after the fact, the same class as Instructor, expressed in a language instead of a library.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What it is&#xA;    &lt;div id=&#34;what-it-is&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-it-is&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;A TypeScript-flavored language with runtime types and no &lt;code&gt;any&lt;/code&gt; (&amp;ldquo;opne&amp;rdquo; fails before runtime when a status field says open or closed), typed error sets, exhaustive pattern matching, Go-style green threads without function coloring, filesystem-based namespaces with no imports, and tests and testsets as code, including quorum runners that rerun nondeterministic calls and require a majority of passes.&#xA;The toolchain: &lt;code&gt;brew install baml&lt;/code&gt;, then &lt;code&gt;baml init&lt;/code&gt;, &lt;code&gt;baml agent install&lt;/code&gt; (a version-matched BAML skill for Claude Code and Codex), &lt;code&gt;baml run&lt;/code&gt; (any function becomes a CLI), &lt;code&gt;baml describe&lt;/code&gt; (AST-aware discovery for agents), &lt;code&gt;baml test&lt;/code&gt;, &lt;code&gt;baml pack&lt;/code&gt; (standalone binaries, 12.1 MB against Bun&amp;rsquo;s 63.1 MB), an LSP for Zed and JetBrains, VS Code and Cursor support, and a browser playground.&#xA;&lt;code&gt;baml generate&lt;/code&gt; emits typed Python and TypeScript SDKs, so an existing application calls BAML functions through Pydantic v2 models; &lt;code&gt;baml-py&lt;/code&gt; and the &lt;code&gt;@boundaryml/baml&lt;/code&gt; npm package carry the runtime.&#xA;Boundary, a Seattle company, also runs Agent Tries BAML, thousands of simulated agents measuring how hard the language is for agents to use, with a public arena comparing skill versions.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Status&#xA;    &lt;div id=&#34;status&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#status&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Large, very active, and mid-pivot: the structured-output library that launched in 2023 is now a language, and the docs churn of that pivot is visible.&lt;/strong&gt;&#xA;9,392 stars, 498 forks, and 398 open issues, created 2023-10-06, pushed 2026-10-12, as of 2026-10-11 (GitHub API).&#xA;The &lt;code&gt;baml-language&lt;/code&gt; release train runs nightlies on a 0.21.1 alpha after 0.21.0 (2026-10-08), and the project is pre-1.0 by its own statement.&#xA;The npm runtime moved 1,053,321 downloads in the month ending 2026-10-10, the category&amp;rsquo;s largest distribution after the vendor APIs themselves.&#xA;The community footprint is thinner than the numbers suggest: the 2024 Show HN drew 18 points, a July 2026 thread on the language repositioning drew 8, and the former clients documentation path (docs.boundaryml.com/clients) returns 404 as of 2026-10-11, a casualty of the pivot.&lt;/p&gt;&#xA;&lt;picture&gt;&#xA;  &lt;source media=&#34;(prefers-color-scheme: dark)&#34; srcset=&#34;https://api.star-history.com/chart?repos=BoundaryML/baml&amp;type=date&amp;theme=dark&amp;legend=top-left&#34; /&gt;&#xA;  &lt;source media=&#34;(prefers-color-scheme: light)&#34; srcset=&#34;https://api.star-history.com/chart?repos=BoundaryML/baml&amp;type=date&amp;theme=dark&amp;legend=top-left&#34; /&gt;&#xA;  &lt;img alt=&#34;Star History Chart&#34; src=&#34;https://api.star-history.com/chart?repos=BoundaryML/baml&amp;type=date&amp;theme=dark&amp;legend=top-left&#34; /&gt;&#xA;&lt;/picture&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Strengths&#xA;    &lt;div id=&#34;strengths&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#strengths&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;The language is the validation story&lt;/strong&gt;: with runtime types and no unchecked casts, an invalid state cannot compile, which moves part of the correctness burden from prompt engineering to the type checker.&lt;/li&gt;&#xA;&lt;li&gt;LLM calls compose with ordinary code as first-class functions, so the same function is testable, traceable, and packable, and the generated Python and TypeScript SDKs keep adoption incremental.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;baml describe&lt;/code&gt; and the installed agent skill are agent-first tooling done properly: an agent reads resolved definitions and call sites instead of grepping whole files.&lt;/li&gt;&#xA;&lt;li&gt;The Agent Tries BAML arena is the only published agent-usability harness any member of this category runs against its own interface.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Cautions&#xA;    &lt;div id=&#34;cautions&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#cautions&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pre-1.0 with a recent identity change&lt;/strong&gt;: the language pivot orphaned the older documentation (the clients page 404s), so provider coverage that was once documented, including local-model clients, is not verifiable at a stable URL this run.&lt;/li&gt;&#xA;&lt;li&gt;The guarantee is still post-hoc: the parser repairs imperfect output, but a confused model can still loop inside technically valid responses, the same failure the decoding-time columns eliminate.&lt;/li&gt;&#xA;&lt;li&gt;One company stewards the language, the hosted playground, the skill, and the eval arena, with 398 open issues against a single-vendor maintenance surface.&lt;/li&gt;&#xA;&lt;li&gt;No package manager yet, by the project&amp;rsquo;s own statement, so reusable code distribution and its supply-chain questions are still being designed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Pricing&#xA;    &lt;div id=&#34;pricing&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pricing&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pricing does not apply: the language, toolchain, and SDKs are free and Apache-2.0.&#xA;Boundary sells nothing at a listed price as of 2026-10-11 and offers a free 45-minute onboarding session through an early-access program; your model providers bill the calls.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Compared to&#xA;    &lt;div id=&#34;compared-to&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#compared-to&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/hybrid-execution/instructor/&#34; &gt;Instructor&lt;/a&gt;: the same validate-and-recover class, as a Python library in your process; BAML is the language-shaped version, with the repair parser baked into the runtime and typed errors from the compiler.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/hybrid-execution/outlines/&#34; &gt;Outlines&lt;/a&gt;: Outlines constrains decoding so an invalid token is never drawn; BAML lets the model speak and repairs the result, which is the cheaper integration and the weaker guarantee.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/hybrid-execution/atomic-agents/&#34; &gt;Atomic Agents&lt;/a&gt;: the framework answer to composing many typed calls in Python; BAML composes them in one language with one toolchain instead.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Bottom line&#xA;    &lt;div id=&#34;bottom-line&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#bottom-line&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Recommended for teams starting agent-native codebases who want typed LLM calls with agent-first tooling and can accept pre-1.0 churn on a single vendor&amp;rsquo;s language.&lt;/strong&gt;&#xA;Not for anyone who needs decoding-time guarantees (Outlines or the vendor strict modes), a battle-tested library inside an existing Python service (Instructor), or a stable documented provider matrix today.&#xA;My disagreeable claim: BAML is the strongest bet in this category that the structured-output library era ends in absorption, that validation stops being something you import and becomes a property of the language your agents write.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Changes&#xA;    &lt;div id=&#34;changes&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#changes&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2026-10-11 - Created after the resolution scan flagged it as the structured-output peer of Instructor and Outlines, with the post-hoc parser guarantee and the pivot&amp;rsquo;s documentation churn recorded as the central cautions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;See also&#xA;    &lt;div id=&#34;see-also&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#see-also&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/hybrid-execution/instructor/&#34; &gt;Instructor&lt;/a&gt; - the library member of the same validate-and-recover class&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/hybrid-execution/outlines/&#34; &gt;Outlines&lt;/a&gt; - the decoding-time counterpoint that removes the failure BAML repairs&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/hybrid-execution/atomic-agents/&#34; &gt;Atomic Agents&lt;/a&gt; - the framework layer built on Instructor&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/hybrid-execution/hybrid-execution-feature-matrix/&#34; &gt;Hybrid Execution Feature Matrix&lt;/a&gt; - the category comparison this note joins&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/BoundaryML/baml&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://github.com/BoundaryML/baml&lt;/a&gt; - repository facts: 9,392 stars, 498 forks, Apache-2.0, Rust, created 2023-10-06, pushed 2026-10-12 (GitHub API, as of 2026-10-11)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raw.githubusercontent.com/BoundaryML/baml/main/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=raw.githubusercontent.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://raw.githubusercontent.com/BoundaryML/baml/main/README.md&lt;/a&gt; - the positioning, runtime types, toolchain list, and install commands (fetched 2026-10-11)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://boundaryml.com/explore.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=boundaryml.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://boundaryml.com/explore.md&lt;/a&gt; - the language tour: runtime types, typed errors, green threads, LLM calls as functions, the error-correcting parser, testsets and quorums, the supply-chain statement, and the Agent Tries BAML arena&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://boundaryml.com/quickstart&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=boundaryml.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://boundaryml.com/quickstart&lt;/a&gt; - the toolchain walkthrough: brew install, baml init, agent skill install for Claude Code and Codex, LSP and playground&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/BoundaryML/baml/releases&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=api.github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://api.github.com/repos/BoundaryML/baml/releases&lt;/a&gt; - baml-language 0.21.0 (2026-10-08) and the nightly train&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.npmjs.org/downloads/point/last-month/@boundaryml/baml&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=api.npmjs.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://api.npmjs.org/downloads/point/last-month/@boundaryml/baml&lt;/a&gt; - 1,053,321 downloads in the month ending 2026-10-10&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://hn.algolia.com/api/v1/search?query=BAML%20boundary&amp;amp;tags=story&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=hn.algolia.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://hn.algolia.com/api/v1/search?query=BAML%20boundary&amp;tags=story&lt;/a&gt; - the footprint scan: an 18-point 2024 Show HN and an 8-point July 2026 repositioning thread&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      
    </item>
    
  </channel>
</rss>
