<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Overlock Blog</title>
        <link>https://overlock.app/blog</link>
        <description>Overlock Blog</description>
        <lastBuildDate>Tue, 28 Apr 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[From One Node to Many: Where Crossplane Wants to Live]]></title>
            <link>https://overlock.app/blog/from-one-node-to-many</link>
            <guid>https://overlock.app/blog/from-one-node-to-many</guid>
            <pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA["A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable."]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>"A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable."</p>
<p>Leslie Lamport</p>
</blockquote>
<p>Every Crossplane story starts the same way. You spin up a single-node cluster on your laptop, install Crossplane, and watch your first composition reconcile. It's almost magical, until you try to run real applications next to it.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="single-node-is-fine-until-you-add-the-rest-of-the-stack">Single node is fine, until you add the rest of the stack<a href="https://overlock.app/blog/from-one-node-to-many#single-node-is-fine-until-you-add-the-rest-of-the-stack" class="hash-link" aria-label="Direct link to Single node is fine, until you add the rest of the stack" title="Direct link to Single node is fine, until you add the rest of the stack">​</a></h2>
<p>Crossplane itself behaves perfectly well on a single node. The control plane reconciles, the providers reconcile, the compositions do their thing. The problem isn't Crossplane. The problem is everything else you actually want to run next to it.</p>
<p>Local development is the most important phase of the whole project. Long before any of this lands in a cloud, you need to see your app talk to the resources Crossplane is provisioning, watch the wiring with your own eyes, break it on purpose, fix it, break it again. That's where the real work happens. And the laptop has to host it: Crossplane, its providers, every microservice you're building, the databases they hit, the message bus, the auth stub. Memory and CPU run out fast. Crossplane is a polite citizen, but it's still a control plane with reconcilers watching CRDs. It eats space. So do your apps. They eat the same space, and something gives.</p>
<p>The instinct is to scale down: fewer providers, smaller workloads, mock more, run less. That's a tax on the work itself. The thing you came to test gets distorted to fit the machine, and what you end up validating is a smaller, faker version of the system you actually care about.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="move-what-doesnt-need-to-be-local-off-the-laptop">Move what doesn't need to be local, off the laptop<a href="https://overlock.app/blog/from-one-node-to-many#move-what-doesnt-need-to-be-local-off-the-laptop" class="hash-link" aria-label="Direct link to Move what doesn't need to be local, off the laptop" title="Direct link to Move what doesn't need to be local, off the laptop">​</a></h2>
<p>There's a quieter answer. Stop treating the laptop as the place where everything lives. Treat it as the workbench. Push everything that doesn't <em>need</em> to be in front of you out to other nodes, and keep on the laptop only the thing you're actively touching this afternoon.</p>
<p>That can start small: move Crossplane out. Just to a node that isn't your laptop. A spare box on the network, an old NUC, a teammate's idle workstation. And if you don't happen to have any of those lying around, any SSH-reachable Linux host does the job, including a cheap cloud VM at a few dollars a month. The point isn't to avoid the cloud entirely, it's to avoid having to build a <em>production</em> cloud setup just to develop. Let <em>that</em> node run the engine: Crossplane, providers, functions, Kyverno, CertManager, all the heavy reconcilers. The laptop suddenly has its CPU back, and the control plane is on stable infrastructure that doesn't have to share a fan with VS Code.</p>
<p>It doesn't stop there. The same gesture works for a workloads node, for a node that hosts your databases, for one that runs the message broker, for whatever else takes resources without ever needing your eyes on it. Each piece lands where it makes sense. The laptop keeps shrinking down toward the one microservice you're rewriting, the dashboard you're inspecting, the test you're stepping through. The supporting cast lives elsewhere, reachable, observable, but no longer fighting your editor for memory.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-microservice-topology-made-real-before-cloud">The microservice topology, made real before cloud<a href="https://overlock.app/blog/from-one-node-to-many#the-microservice-topology-made-real-before-cloud" class="hash-link" aria-label="Direct link to The microservice topology, made real before cloud" title="Direct link to The microservice topology, made real before cloud">​</a></h2>
<p>This is exactly what Kubernetes was made for and exactly what microservice architecture promised. Each role on its own infrastructure, talking over a network, scheduled where it makes sense. Crossplane already lets you wire the pieces together as composable resources. A distributed environment is what makes that wiring real instead of theoretical. The control plane is a real control plane on its own host, the data services run on theirs, the workloads on another, and the bit you're developing sits right under your fingertips. The same shape you'll see in production, except the network hop is to your closet instead of <code>eu-west-2</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="adding-a-remote-node-in-one-command">Adding a remote node, in one command<a href="https://overlock.app/blog/from-one-node-to-many#adding-a-remote-node-in-one-command" class="hash-link" aria-label="Direct link to Adding a remote node, in one command" title="Direct link to Adding a remote node, in one command">​</a></h2>
<p>Overlock collapses each join into a single sentence. One for the engine:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">overlock </span><span class="token function" style="color:rgb(80, 250, 123)">env</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">node</span><span class="token plain"> create my-engine </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--env</span><span class="token plain"> my-env </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--host</span><span class="token plain"> </span><span class="token number">192.168</span><span class="token plain">.1.100 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--scopes</span><span class="token plain"> engine</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Another for a workloads host. Another for a database host. Run them as you grow the topology, drop them as you shrink it back down. Behind each line, a remote Linux box goes through the entire ceremony: SSH in, Docker if it's missing, an agent container, a WireGuard tunnel back to the server, CNI wiring, registration. The node shows up in <code>kubectl get nodes</code> and the control plane never realises it's two hops away over an encrypted overlay. You shape the cluster around the work, not the other way round.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-you-end-up-with">What you end up with<a href="https://overlock.app/blog/from-one-node-to-many#what-you-end-up-with" class="hash-link" aria-label="Direct link to What you end up with" title="Direct link to What you end up with">​</a></h2>
<p>The picture you end up with is the picture Crossplane was always meant to project. Control plane on stable infrastructure. Data and infra services on their own hosts. The laptop holding only what you're developing or watching, fast to iterate, easy to throw away. The microservice topology stops being a slide and starts being something you can <code>kubectl get</code>, break, and watch heal.</p>
<p>A single binary, a handful of commands, and the local-and-cloud rehearsal becomes a local-and-remote rehearsal <em>of</em> the cloud. Same shape, no AWS bill, full speed of iteration. That's what local development looks like when distributed environments are this cheap to summon, and when "what's on the laptop" can finally be just the part of the system you actually want to see.</p>]]></content:encoded>
            <category>environments</category>
            <category>crossplane</category>
            <category>distributed</category>
            <category>wireguard</category>
        </item>
        <item>
            <title><![CDATA[1.0.2: Pulling Through the Pipes]]></title>
            <link>https://overlock.app/blog/release-1-0-2</link>
            <guid>https://overlock.app/blog/release-1-0-2</guid>
            <pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A small but important patch release that unblocks pulling container images from clusters running behind PPPoE links.]]></description>
            <content:encoded><![CDATA[<p>A small but important patch release that unblocks pulling container images from clusters running behind PPPoE links.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-1-0-2#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li><strong>Fix image pulls behind PPPoE links</strong> (<a href="https://github.com/web-seven/overlock/pull/468" target="_blank" rel="noopener noreferrer">#468</a>) — pod MTU and TCP MSS are now clamped so the registry handshake completes on connections with a smaller MTU than standard Ethernet. If you saw image pulls hanging on home/PPPoE networks, this release is for you.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>bugfix</category>
        </item>
        <item>
            <title><![CDATA[1.0.1: Docs Find a Home]]></title>
            <link>https://overlock.app/blog/release-1-0-1</link>
            <guid>https://overlock.app/blog/release-1-0-1</guid>
            <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[First post-1.0 patch release. Brings official documentation tooling, fixes Docker Desktop on Linux setup, and restores the install script after the project rename.]]></description>
            <content:encoded><![CDATA[<p>First post-1.0 patch release. Brings official documentation tooling, fixes Docker Desktop on Linux setup, and restores the install script after the project rename.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-1-0-1#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong>Docusaurus documentation site</strong> (<a href="https://github.com/web-seven/overlock/pull/450" target="_blank" rel="noopener noreferrer">#450</a>) — <code>./docs</code> is now a Docusaurus project with sidebar, search, and edit-on-GitHub links. The same Markdown still works on GitHub.</li>
<li><strong>GitHub-style admonitions in docs</strong> (<a href="https://github.com/web-seven/overlock/pull/467" target="_blank" rel="noopener noreferrer">#467</a>) — <code>&gt; [!NOTE]</code> / <code>[!WARNING]</code> syntax renders as proper Docusaurus admonitions.</li>
<li><strong>Docker Desktop on Linux setup guide</strong> (<a href="https://github.com/web-seven/overlock/pull/465" target="_blank" rel="noopener noreferrer">#465</a>).</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-1-0-1#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li><strong>Docker Desktop compatibility and remote <code>wg0</code> reuse</strong> (<a href="https://github.com/web-seven/overlock/pull/464" target="_blank" rel="noopener noreferrer">#464</a>) — environments now come up cleanly on Docker Desktop, and existing WireGuard interfaces on remote nodes are reused instead of failing.</li>
<li><strong>Install script repo URL</strong> (<a href="https://github.com/web-seven/overlock/pull/458" target="_blank" rel="noopener noreferrer">#458</a>) — <code>install.sh</code> now points at <code>web-seven/overlock</code> after the org rename.</li>
<li><strong>Fix Documentation deploy workflow on <code>main</code></strong> (<a href="https://github.com/web-seven/overlock/pull/462" target="_blank" rel="noopener noreferrer">#462</a>).</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>docs</category>
            <category>bugfix</category>
        </item>
        <item>
            <title><![CDATA[1.0.0: Mission Control, Distributed]]></title>
            <link>https://overlock.app/blog/release-1-0-0</link>
            <guid>https://overlock.app/blog/release-1-0-0</guid>
            <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Overlock 1.0 is here. The biggest theme of this release is distributed control planes: a new k3s-docker engine, multi-node environments by default, remote SSH-attached nodes, and WireGuard-encrypted inter-node traffic out of the box. From an empty laptop to a full Crossplane lab — across multiple Linux hosts — in a single command.]]></description>
            <content:encoded><![CDATA[<p>Overlock 1.0 is here. The biggest theme of this release is <strong>distributed control planes</strong>: a new <code>k3s-docker</code> engine, multi-node environments by default, remote SSH-attached nodes, and WireGuard-encrypted inter-node traffic out of the box. From an empty laptop to a full Crossplane lab — across multiple Linux hosts — in a single command.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="highlights">Highlights<a href="https://overlock.app/blog/release-1-0-0#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-k3s-docker-engine">The <code>k3s-docker</code> engine<a href="https://overlock.app/blog/release-1-0-0#the-k3s-docker-engine" class="hash-link" aria-label="Direct link to the-k3s-docker-engine" title="Direct link to the-k3s-docker-engine">​</a></h3>
<p>A new engine that runs each Kubernetes node as its own Docker container with WireGuard tunneling between them. By default you get an agentless K3s server plus two agent nodes — <code>workloads</code> (user pods, system services) and <code>engine</code> (Crossplane, providers, functions, Kyverno, CertManager). Spin up with:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">overlock environment create my-env </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--engine</span><span class="token plain"> k3s-docker</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="multi-node-and-remote-nodes">Multi-node and remote nodes<a href="https://overlock.app/blog/release-1-0-0#multi-node-and-remote-nodes" class="hash-link" aria-label="Direct link to Multi-node and remote nodes" title="Direct link to Multi-node and remote nodes">​</a></h3>
<p>Add a Linux host as a worker over SSH:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">overlock </span><span class="token function" style="color:rgb(80, 250, 123)">env</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">node</span><span class="token plain"> create my-remote-node </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--env</span><span class="token plain"> my-env </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--host</span><span class="token plain"> </span><span class="token number">192.168</span><span class="token plain">.1.100 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--scopes</span><span class="token plain"> engine</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Inter-node traffic is WireGuard-encrypted automatically. Remote nodes start and stop with the environment lifecycle.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="cpu-limits-taints-mounts">CPU limits, taints, mounts<a href="https://overlock.app/blog/release-1-0-0#cpu-limits-taints-mounts" class="hash-link" aria-label="Direct link to CPU limits, taints, mounts" title="Direct link to CPU limits, taints, mounts">​</a></h3>
<ul>
<li><code>--cpu 2</code> / <code>--cpu 0.5</code> / <code>--cpu 50%</code> per node.</li>
<li><code>--taints key=value:NoSchedule</code> with auto-generated node labels for each taint.</li>
<li><code>--mount /host:/container</code> on <code>node create</code> and <code>env create</code> for bind-mount workflows.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="registry-improvements">Registry improvements<a href="https://overlock.app/blog/release-1-0-0#registry-improvements" class="hash-link" aria-label="Direct link to Registry improvements" title="Direct link to Registry improvements">​</a></h3>
<ul>
<li><code>registry create --update</code> to update an existing registry secret in place.</li>
<li><code>--label key=value</code> on <code>registry create</code>, with label merging on update.</li>
<li>Server, username and password are now stored in the secret data fields.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-1-0-0#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li>IP conflicts on environment start are gone — the server container starts before agents now.</li>
<li>Port conflicts for local nodes on host networks resolved (host networking on remotes for WireGuard peering, <code>--node-external-ip</code> set on local nodes).</li>
<li><code>env create</code> waits for the API server before starting remote nodes.</li>
<li>Duplicate node names are rejected; environments and nodes that already exist are skipped gracefully.</li>
<li>SSH <code>Run</code> no longer returns EOF on successful commands.</li>
</ul>
<p>For the full list, browse the closed PRs against the <a href="https://github.com/web-seven/overlock/releases/tag/1.0.0" target="_blank" rel="noopener noreferrer">v1.0.0 milestone</a>.</p>
<p>Welcome to v1.</p>]]></content:encoded>
            <category>release</category>
            <category>major</category>
            <category>k3s-docker</category>
            <category>wireguard</category>
            <category>multi-node</category>
        </item>
        <item>
            <title><![CDATA[0.11.1: Stable Pickups Only]]></title>
            <link>https://overlock.app/blog/release-0-11-1</link>
            <guid>https://overlock.app/blog/release-0-11-1</guid>
            <pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Quick patch to the install script.]]></description>
            <content:encoded><![CDATA[<p>Quick patch to the install script.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-0-11-1#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li><strong>Install script fetches latest stable by default</strong> (<a href="https://github.com/web-seven/overlock/pull/375" target="_blank" rel="noopener noreferrer">#375</a>) — <code>install.sh</code> no longer picks up pre-release tags. You always get the most recent stable release unless you pass an explicit version.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>bugfix</category>
        </item>
        <item>
            <title><![CDATA[0.11.0: The Registry Levels Up]]></title>
            <link>https://overlock.app/blog/release-0-11-0</link>
            <guid>https://overlock.app/blog/release-0-11-0</guid>
            <pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A registry-focused release: the local registry now speaks HTTPS, gains a load-image subcommand, and several rough edges around environment and registry creation are smoother.]]></description>
            <content:encoded><![CDATA[<p>A registry-focused release: the local registry now speaks HTTPS, gains a <code>load-image</code> subcommand, and several rough edges around environment and registry creation are smoother.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-11-0#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong>HTTPS for the local registry</strong> (<a href="https://github.com/web-seven/overlock/pull/346" target="_blank" rel="noopener noreferrer">#346</a>) — local registries now serve HTTPS in addition to HTTP, fronted by an nginx reverse proxy (<a href="https://github.com/web-seven/overlock/pull/347" target="_blank" rel="noopener noreferrer">#347</a>).</li>
<li><strong><code>registry load-image</code> subcommand</strong> (<a href="https://github.com/web-seven/overlock/pull/342" target="_blank" rel="noopener noreferrer">#342</a>) — push pre-built OCI images straight into the local registry without going through <code>docker push</code>.<!-- -->
<ul>
<li><code>--helm</code> flag to load Helm charts (<a href="https://github.com/web-seven/overlock/pull/345" target="_blank" rel="noopener noreferrer">#345</a>).</li>
<li>Always uses the OCI empty base layer (<a href="https://github.com/web-seven/overlock/pull/349" target="_blank" rel="noopener noreferrer">#349</a>).</li>
</ul>
</li>
<li><strong><code>--container-path</code> on <code>environment create</code></strong> (<a href="https://github.com/web-seven/overlock/pull/354" target="_blank" rel="noopener noreferrer">#354</a>) — pin a custom container path for environment data.</li>
<li><strong><code>--version</code> on the install script</strong> (<a href="https://github.com/web-seven/overlock/pull/356" target="_blank" rel="noopener noreferrer">#356</a>) — install a specific Overlock version.</li>
<li><strong>Optional admin service account creation</strong> (<a href="https://github.com/web-seven/overlock/pull/338" target="_blank" rel="noopener noreferrer">#338</a>).</li>
<li><strong>README refresh</strong> with badges and clearer navigation (<a href="https://github.com/web-seven/overlock/pull/367" target="_blank" rel="noopener noreferrer">#367</a>).</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="behaviour-changes">Behaviour changes<a href="https://overlock.app/blog/release-0-11-0#behaviour-changes" class="hash-link" aria-label="Direct link to Behaviour changes" title="Direct link to Behaviour changes">​</a></h2>
<ul>
<li><strong><code>registry create</code> warns instead of erroring on duplicates</strong> (<a href="https://github.com/web-seven/overlock/pull/352" target="_blank" rel="noopener noreferrer">#352</a>).</li>
<li><strong><code>environment create</code> warns instead of erroring on duplicate names</strong> (<a href="https://github.com/web-seven/overlock/pull/336" target="_blank" rel="noopener noreferrer">#336</a>).</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-0-11-0#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li><strong>Kyverno policy CRD conflicts</strong> resolved (<a href="https://github.com/web-seven/overlock/pull/340" target="_blank" rel="noopener noreferrer">#340</a>).</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>registry</category>
            <category>environment</category>
        </item>
        <item>
            <title><![CDATA[0.10.1: Polish and Policy]]></title>
            <link>https://overlock.app/blog/release-0-10-1</link>
            <guid>https://overlock.app/blog/release-0-10-1</guid>
            <pubDate>Thu, 02 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Maintenance release with a Kyverno bump and developer-experience polish.]]></description>
            <content:encoded><![CDATA[<p>Maintenance release with a Kyverno bump and developer-experience polish.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-10-1#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong>Kyverno upgraded to 3.4.4</strong> (<a href="https://github.com/web-seven/overlock/pull/333" target="_blank" rel="noopener noreferrer">#333</a>) — was 3.2.5.</li>
<li><strong>Standardized error handling</strong> across packages (<a href="https://github.com/web-seven/overlock/pull/326" target="_blank" rel="noopener noreferrer">#326</a>) — clearer, more consistent error messages.</li>
<li><strong>Code agent instructions</strong> for contributors (<a href="https://github.com/web-seven/overlock/pull/322" target="_blank" rel="noopener noreferrer">#322</a>).</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-0-10-1#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li><strong>Dependency error fixed</strong> (<a href="https://github.com/web-seven/overlock/pull/325" target="_blank" rel="noopener noreferrer">#325</a>).</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>kyverno</category>
            <category>dx</category>
        </item>
        <item>
            <title><![CDATA[0.10.0: Environments on Autopilot]]></title>
            <link>https://overlock.app/blog/release-0-10-0</link>
            <guid>https://overlock.app/blog/release-0-10-0</guid>
            <pubDate>Mon, 04 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[A big feature drop: a config-file driven environment workflow, automatic provisioning triggered by on-chain events, and a new Cosmos plugin. Lots of polish around install and error handling too.]]></description>
            <content:encoded><![CDATA[<p>A big feature drop: a config-file driven environment workflow, automatic provisioning triggered by on-chain events, and a new Cosmos plugin. Lots of polish around install and error handling too.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-10-0#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong>Config-file driven environment setup</strong> (<a href="https://github.com/web-seven/overlock/pull/306" target="_blank" rel="noopener noreferrer">#306</a>) — define an environment in a single config file and let Overlock create cluster, registry, providers and configurations.</li>
<li><strong>Network-event auto-provisioning</strong> — environments, registries, configurations and providers can now be created automatically in response to on-chain events:<!-- -->
<ul>
<li><strong>Auto-create environment from a Solana TX</strong> (<a href="https://github.com/web-seven/overlock/pull/296" target="_blank" rel="noopener noreferrer">#296</a>).</li>
<li><strong>Auto-create configuration from a network event</strong> (<a href="https://github.com/web-seven/overlock/pull/294" target="_blank" rel="noopener noreferrer">#294</a>).</li>
<li><strong>Auto-create local registry from a network event</strong> (<a href="https://github.com/web-seven/overlock/pull/292" target="_blank" rel="noopener noreferrer">#292</a>).</li>
<li><strong>Auto-register providers</strong> in the network (<a href="https://github.com/web-seven/overlock/pull/302" target="_blank" rel="noopener noreferrer">#302</a>, <a href="https://github.com/web-seven/overlock/pull/304" target="_blank" rel="noopener noreferrer">#304</a>).</li>
</ul>
</li>
<li><strong>Cosmos plugin: <code>environment subscribe</code></strong> (<a href="https://github.com/web-seven/overlock/pull/291" target="_blank" rel="noopener noreferrer">#291</a>) — subscribe to Cosmos chain events and react to them.</li>
<li><strong>Billing reconciliation event watching</strong> (<a href="https://github.com/web-seven/overlock/pull/301" target="_blank" rel="noopener noreferrer">#301</a>).</li>
<li><strong>Discord notifications on release</strong> (<a href="https://github.com/web-seven/overlock/pull/308" target="_blank" rel="noopener noreferrer">#308</a>).</li>
<li><strong>Friendlier error UX</strong> — surfaced errors now link to the docs (<a href="https://github.com/web-seven/overlock/pull/320" target="_blank" rel="noopener noreferrer">#320</a>).</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-0-10-0#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li><strong>Install script bug</strong> (<a href="https://github.com/web-seven/overlock/pull/317" target="_blank" rel="noopener noreferrer">#317</a>).</li>
<li><strong>Missing default values</strong> filled in (<a href="https://github.com/web-seven/overlock/pull/319" target="_blank" rel="noopener noreferrer">#319</a>).</li>
<li><strong>Spurious "plugin doesn't exist" warning</strong> silenced (<a href="https://github.com/web-seven/overlock/pull/318" target="_blank" rel="noopener noreferrer">#318</a>).</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>network</category>
            <category>plugins</category>
            <category>blockchain</category>
        </item>
        <item>
            <title><![CDATA[0.9.2: Patient Policies]]></title>
            <link>https://overlock.app/blog/release-0-9-2</link>
            <guid>https://overlock.app/blog/release-0-9-2</guid>
            <pubDate>Tue, 18 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[A small stability release that smooths out package loading and makes environment creation wait for the policy controller to be ready.]]></description>
            <content:encoded><![CDATA[<p>A small stability release that smooths out package loading and makes environment creation wait for the policy controller to be ready.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-9-2#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong>Wait for the policy controller to install during env creation</strong> — fewer race conditions on first boot.</li>
<li><strong>Unified image-archive loader</strong> for functions, providers, and configurations — one code path, fewer corner cases.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-0-9-2#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li><strong>New function instantiation on <code>load</code></strong> no longer fails on the first invocation.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>bugfix</category>
        </item>
        <item>
            <title><![CDATA[0.9.1: Engine, Configured]]></title>
            <link>https://overlock.app/blog/release-0-9-1</link>
            <guid>https://overlock.app/blog/release-0-9-1</guid>
            <pubDate>Sat, 15 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Quick follow-up: pass engine config when you create a cluster.]]></description>
            <content:encoded><![CDATA[<p>Quick follow-up: pass engine config when you create a cluster.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-9-1#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong><code>env create</code> accepts engine config</strong> — fine-tune the underlying Kubernetes engine right at cluster creation time, no manual chart edits required.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>environment</category>
        </item>
        <item>
            <title><![CDATA[0.9.0: Pinning Crossplane]]></title>
            <link>https://overlock.app/blog/release-0-9-0</link>
            <guid>https://overlock.app/blog/release-0-9-0</guid>
            <pubDate>Fri, 14 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[You can now pin the exact Crossplane version your environment runs on. Default bumped to 1.19.0.]]></description>
            <content:encoded><![CDATA[<p>You can now pin the exact Crossplane version your environment runs on. Default bumped to 1.19.0.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-9-0#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong><code>--engine-version</code> for Crossplane</strong> — pin a specific Crossplane release; useful for matching production or testing upgrades.</li>
<li><strong>Default Crossplane version: 1.19.0</strong>.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>crossplane</category>
        </item>
        <item>
            <title><![CDATA[0.8.3: Cleaner Loads]]></title>
            <link>https://overlock.app/blog/release-0-8-3</link>
            <guid>https://overlock.app/blog/release-0-8-3</guid>
            <pubDate>Thu, 23 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Small image-loader refinement and a cleaner failure mode when no kube context exists.]]></description>
            <content:encoded><![CDATA[<p>Small image-loader refinement and a cleaner failure mode when no kube context exists.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-8-3#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong><code>LoadPackageDirectory</code> accepts kinds</strong> for filtering — load only what you need from a package directory.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-0-8-3#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li><strong>No more global error when there's no kube context</strong> — the CLI fails specifically where it needs a context, not before.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>bugfix</category>
        </item>
        <item>
            <title><![CDATA[0.8.2: Watching More Reliably]]></title>
            <link>https://overlock.app/blog/release-0-8-2</link>
            <guid>https://overlock.app/blog/release-0-8-2</guid>
            <pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Swap the file watcher used by configuration serve for a more reliable cross-platform library.]]></description>
            <content:encoded><![CDATA[<p>Swap the file watcher used by <code>configuration serve</code> for a more reliable cross-platform library.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-8-2#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong><code>configuration serve</code> now uses <code>rjeczalik/notify</code></strong> — better recursive watch coverage on macOS / Windows / Linux, fewer missed events on the live-reload loop.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>dx</category>
        </item>
        <item>
            <title><![CDATA[0.8.1: Layered Loads]]></title>
            <link>https://overlock.app/blog/release-0-8-1</link>
            <guid>https://overlock.app/blog/release-0-8-1</guid>
            <pubDate>Sat, 18 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Refactor the configuration loader to use the layers loader — and refresh the Discord invite link.]]></description>
            <content:encoded><![CDATA[<p>Refactor the configuration loader to use the layers loader — and refresh the Discord invite link.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-8-1#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong>Configuration tar load now uses the layers loader</strong> — consistent with how providers and functions are loaded.</li>
<li><strong>New Discord invite link</strong> — see the README / docs.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>registry</category>
        </item>
        <item>
            <title><![CDATA[0.7.0: Function Serve and an Install Script]]></title>
            <link>https://overlock.app/blog/release-0-7-0</link>
            <guid>https://overlock.app/blog/release-0-7-0</guid>
            <pubDate>Sat, 11 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Functions get the same hot-reload love. Plus a one-line install script for macOS, Linux, and Windows.]]></description>
            <content:encoded><![CDATA[<p>Functions get the same hot-reload love. Plus a one-line install script for macOS, Linux, and Windows.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-7-0#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong><code>function serve</code></strong> — live-reload Crossplane functions from your local filesystem.</li>
<li><strong>One-line install script</strong> — <code>curl -sL .../install.sh | sh</code> to get the binary.</li>
<li><strong>Refreshed logos</strong> and README.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>dev-loop</category>
            <category>install</category>
        </item>
        <item>
            <title><![CDATA[0.8.0: Provider Serve]]></title>
            <link>https://overlock.app/blog/release-0-8-0</link>
            <guid>https://overlock.app/blog/release-0-8-0</guid>
            <pubDate>Sat, 11 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Hot-reload extends to providers. Edit your provider source on disk, watch it sync into the cluster within seconds.]]></description>
            <content:encoded><![CDATA[<p>Hot-reload extends to providers. Edit your provider source on disk, watch it sync into the cluster within seconds.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-8-0#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong><code>provider serve</code></strong> — develop providers locally with the same fast feedback loop already available for configurations and functions.</li>
<li><strong>Improved file watching</strong> for <code>function serve</code>.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>dev-loop</category>
        </item>
        <item>
            <title><![CDATA[0.6.2: Quality of Life]]></title>
            <link>https://overlock.app/blog/release-0-6-2</link>
            <guid>https://overlock.app/blog/release-0-6-2</guid>
            <pubDate>Thu, 19 Dec 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Documentation polish and a YAML parsing fix in the configuration package.]]></description>
            <content:encoded><![CDATA[<p>Documentation polish and a YAML parsing fix in the configuration package.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-6-2#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong>Docs for <code>configuration serve</code></strong> — basic guide for the live-reload workflow.</li>
<li><strong>Discord invite link</strong> added.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes">Bug fixes<a href="https://overlock.app/blog/release-0-6-2#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes">​</a></h2>
<ul>
<li><strong>YAML delimiter handling</strong> in the configuration package.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>bugfix</category>
            <category>docs</category>
        </item>
        <item>
            <title><![CDATA[0.6.0: Configuration Serve]]></title>
            <link>https://overlock.app/blog/release-0-6-0</link>
            <guid>https://overlock.app/blog/release-0-6-0</guid>
            <pubDate>Tue, 03 Dec 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[The first live-reload command lands: configuration serve. Edit your composition on disk, watch it sync into the cluster within seconds.]]></description>
            <content:encoded><![CDATA[<p>The first live-reload command lands: <code>configuration serve</code>. Edit your composition on disk, watch it sync into the cluster within seconds.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-6-0#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong><code>configuration serve</code></strong> — watch a configuration package directory and auto-rebuild + reload into the cluster on every save.</li>
<li><strong>README refresh</strong>.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>dev-loop</category>
        </item>
        <item>
            <title><![CDATA[0.6.1: Touch-Up]]></title>
            <link>https://overlock.app/blog/release-0-6-1</link>
            <guid>https://overlock.app/blog/release-0-6-1</guid>
            <pubDate>Tue, 03 Dec 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Internal release with packaging and CI tweaks. No user-facing changes.]]></description>
            <content:encoded><![CDATA[<p>Internal release with packaging and CI tweaks. No user-facing changes.</p>
<p>Re-published to fix a release pipeline issue from 0.6.0.</p>]]></content:encoded>
            <category>release</category>
            <category>internal</category>
        </item>
        <item>
            <title><![CDATA[0.5.0: Local in the List]]></title>
            <link>https://overlock.app/blog/release-0-5-0</link>
            <guid>https://overlock.app/blog/release-0-5-0</guid>
            <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[The local registry now shows up in registry list alongside any remote registries you've configured.]]></description>
            <content:encoded><![CDATA[<p>The local registry now shows up in <code>registry list</code> alongside any remote registries you've configured.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://overlock.app/blog/release-0-5-0#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new">​</a></h2>
<ul>
<li><strong>Local registry appears in <code>registry list</code></strong> — single, consistent view of every registry your environment knows about.</li>
</ul>]]></content:encoded>
            <category>release</category>
            <category>registry</category>
        </item>
    </channel>
</rss>