<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://speclynx.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://speclynx.com/" rel="alternate" type="text/html" /><updated>2026-08-08T19:07:48+00:00</updated><id>https://speclynx.com/feed.xml</id><title type="html">SpecLynx</title><subtitle>SpecLynx is enterprise-ready API tooling for parsing, validating, transforming, and working with OpenAPI, AsyncAPI, Arazzo, Overlay, and JSON Schema.</subtitle><entry><title type="html">We just open-sourced SpecLynx ApiDOM</title><link href="https://speclynx.com/blog/open-sourcing-apidom/" rel="alternate" type="text/html" title="We just open-sourced SpecLynx ApiDOM" /><published>2025-12-23T09:00:00+00:00</published><updated>2025-12-23T09:00:00+00:00</updated><id>https://speclynx.com/blog/open-sourcing-apidom</id><content type="html" xml:base="https://speclynx.com/blog/open-sourcing-apidom/"><![CDATA[<p>We just open-sourced SpecLynx <strong>ApiDOM</strong>.</p>

<p>Think of it as <em>Babel.js, but for API specifications</em>.</p>

<p>ApiDOM is the semantic core behind SpecLynx. It powers every layer of the stack: the <a href="/language-service/">Language Service</a>, <a href="/openapi-toolkit/">VS Code extension</a>, <a href="https://editor.speclynx.com">browser editor</a>, and <a href="/cli/">CLI</a>.</p>

<p>It parses OpenAPI, AsyncAPI, JSON Schema, Arazzo, and Overlay specs into a unified semantic tree you can traverse, transform, and serialize back out.</p>

<p>The goal is simple:</p>

<blockquote>
  <p>Let developers work with API specs programmatically without losing the structure, style, and intent of the original file.</p>
</blockquote>

<p>Because that part matters.</p>

<p>You should be able to modify a spec and get back something that still looks like <strong>your</strong> file, not a machine-generated rewrite.</p>

<h2 id="what-you-can-build-on-it">What you can build on it</h2>

<p>SpecLynx ApiDOM is Apache-2.0 licensed, and you can use it to build your own:</p>

<ul>
  <li>✅ Linters</li>
  <li>✅ Transforms</li>
  <li>✅ Code generators</li>
  <li>✅ Migration tools</li>
  <li>✅ Spec-aware automation</li>
</ul>

<h2 id="what-we-did-to-make-it-ready">What we did to make it ready</h2>

<ul>
  <li><strong>Tree-sitter based parsing</strong>: so tooling stays useful even while specs are incomplete</li>
  <li>A <strong>semantic data model</strong>: not generic objects, but one that understands OpenAPI Operations and Schema Objects</li>
  <li><strong>Lossless roundtrip</strong>: comments, indentation, and key ordering are preserved across transformations</li>
  <li>Performance and memory efficiency for <em>large specs</em></li>
</ul>

<h2 id="why-open-source-it">Why open source it</h2>

<p>We open-sourced ApiDOM to build trust. Every line of source code is now auditable and viewable, which also makes it usable in regulated environments where that’s not a nice-to-have but a requirement.</p>

<h2 id="try-it">Try it</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install</span> @speclynx/apidom-reference
</code></pre></div></div>

<p>Parse an API specification and access its data model right away:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">parse</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">@speclynx/apidom-reference</span><span class="dl">'</span><span class="p">;</span>
<span class="k">import</span> <span class="p">{</span> <span class="nx">toValue</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">@speclynx/apidom-core</span><span class="dl">'</span><span class="p">;</span>

<span class="kd">const</span> <span class="nx">result</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">parse</span><span class="p">(</span><span class="dl">'</span><span class="s1">/path/to/openapi.json</span><span class="dl">'</span><span class="p">);</span>

<span class="nx">toValue</span><span class="p">(</span><span class="nx">result</span><span class="p">.</span><span class="nx">api</span><span class="p">.</span><span class="nx">info</span><span class="p">.</span><span class="nx">title</span><span class="p">);</span>   <span class="c1">// document title</span>
<span class="nx">toValue</span><span class="p">(</span><span class="nx">result</span><span class="p">.</span><span class="nx">api</span><span class="p">.</span><span class="nx">info</span><span class="p">.</span><span class="nx">version</span><span class="p">);</span> <span class="c1">// document version</span>
</code></pre></div></div>

<h2 id="get-started">Get started</h2>

<ul>
  <li>GitHub: <a href="https://github.com/speclynx/apidom">speclynx/apidom</a></li>
  <li>Documentation: <a href="/apidom/">speclynx.com/apidom</a></li>
</ul>

<p>If you’ve ever had to parse, rewrite, or generate API specs: <em>what broke first?</em> <a href="https://github.com/orgs/speclynx/discussions">Tell us in the discussions</a> 👇</p>]]></content><author><name>Vladimír Gorej</name></author><summary type="html"><![CDATA[Think of it as Babel.js, but for API specifications. ApiDOM is the semantic core behind SpecLynx, now Apache-2.0 licensed, fully auditable, and ready to power your own spec tooling.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://speclynx.com/assets/images/blog/open-sourcing-apidom.webp" /><media:content medium="image" url="https://speclynx.com/assets/images/blog/open-sourcing-apidom.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>