<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Obelisk Workflow Runtime - Blog</title>
      <link>https://obeli.sk/blog/</link>
      <description>Blog posts about the Obelisk workflow runtime: releases, benchmarks, architecture, and comparisons.</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://obeli.sk/blog/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sun, 04 Oct 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Obelisk 0.42: Durable Agents, Layered Sandboxes</title>
          <pubDate>Sun, 04 Oct 2026 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/announcing-obelisk-0-42/</link>
          <guid>https://obeli.sk/blog/announcing-obelisk-0-42/</guid>
          <description xml:base="https://obeli.sk/blog/announcing-obelisk-0-42/">&lt;p&gt;An agent&#x27;s progress should survive the process that runs it. Its code should run within a policy you
can review, and its failures should leave a history you can inspect.&lt;&#x2F;p&gt;
&lt;p&gt;Obelisk keeps workflow progress in a database. Workflow code replays deterministically from that
history, using recorded activity results before doing new work. A process can stop; the next one
reconstructs where it left off. The same history lets you see what ran and debug it afterward.&lt;&#x2F;p&gt;
&lt;p&gt;0.42 builds on that foundation for agentic workloads: reviewable security boundaries for generated
code, native V8 for faster JavaScript replay, Linux VM activities for tools that need them, and a
workflow-agent prototype that can deploy, test, and fix applications on another Obelisk instance.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Obelisk 0.41: Safe Deployments for Agents</title>
          <pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/announcing-obelisk-0-41/</link>
          <guid>https://obeli.sk/blog/announcing-obelisk-0-41/</guid>
          <description xml:base="https://obeli.sk/blog/announcing-obelisk-0-41/">&lt;p&gt;Obelisk 0.41 draws a firm line between what an operator controls and what a deployment can do. That
line is what makes it safe to let an agent author, submit, and activate deployments: the operator
sets secrets and outbound HTTP policy once in &lt;code&gt;server.toml&lt;&#x2F;code&gt;, and no deployment can exceed it, no
matter who wrote it. Our proof of concept
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;obeli-sk&#x2F;workflow-agent&quot;&gt;&lt;code&gt;workflow-agent&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, where the workflow &lt;em&gt;is&lt;&#x2F;em&gt; the agent
editing and pushing deployments, runs entirely inside these boundaries.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Comparing Obelisk with Temporal and Restate</title>
          <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/comparing-obelisk-temporal-restate/</link>
          <guid>https://obeli.sk/blog/comparing-obelisk-temporal-restate/</guid>
          <description xml:base="https://obeli.sk/blog/comparing-obelisk-temporal-restate/">&lt;p&gt;Obelisk, &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;temporal.io&#x2F;&quot;&gt;Temporal&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;restate.dev&#x2F;&quot;&gt;Restate&lt;&#x2F;a&gt; all let a function
keep making progress after its process disappears. The largest architectural difference is that
Obelisk is a workflow runtime: it loads and runs application components itself. Temporal and Restate
are orchestrators whose application code runs in separately deployed Workers or service endpoints.
That difference shapes which mistakes each system can prevent and what exactly gets deployed.&lt;&#x2F;p&gt;
&lt;p&gt;I implemented the same small workflow with all three. The goal is to compare their Rust APIs,
determinism boundaries, activity isolation, secrets and deployment models.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Obelisk 0.40: Secured API Access and Structured Child Failures</title>
          <pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/announcing-obelisk-0-40/</link>
          <guid>https://obeli.sk/blog/announcing-obelisk-0-40/</guid>
          <description xml:base="https://obeli.sk/blog/announcing-obelisk-0-40/">&lt;p&gt;Obelisk 0.40 tightens two defaults that used to be wide open and improves how workflows see failed
children. The API port now rejects requests without a token, host exec activities have to be enabled
before they will run, and an awaited child failure now tells you whether it was a business error or
a platform failure such as a timeout or cancellation.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Obelisk 0.39: Reconstructable Deployments and Safer Deployment APIs</title>
          <pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/announcing-obelisk-0-39/</link>
          <guid>https://obeli.sk/blog/announcing-obelisk-0-39/</guid>
          <description xml:base="https://obeli.sk/blog/announcing-obelisk-0-39/">&lt;p&gt;Obelisk 0.39 makes deployments easier to inspect, reproduce, and move between environments. The
server now stores the submitted &lt;code&gt;deployment.toml&lt;&#x2F;code&gt; together with deployment-owned source files, can
reconstruct a deployment back to disk, and verifies deployment packages before they are persisted.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Obelisk 0.38: Exec Activities, Step-Through Debugging, Self-Contained Deployments</title>
          <pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/announcing-obelisk-0-38/</link>
          <guid>https://obeli.sk/blog/announcing-obelisk-0-38/</guid>
          <description xml:base="https://obeli.sk/blog/announcing-obelisk-0-38/">&lt;p&gt;Obelisk 0.38 adds native executable activities, step-through execution debugging with the
replay&#x2F;advance API, and self-contained deployments where JS and shell scripts live directly inside
&lt;code&gt;deployment.toml&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>SQLite is All You Need for Durable Workflows</title>
          <pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/sqlite-is-all-you-need-for-durable-workflows/</link>
          <guid>https://obeli.sk/blog/sqlite-is-all-you-need-for-durable-workflows/</guid>
          <description xml:base="https://obeli.sk/blog/sqlite-is-all-you-need-for-durable-workflows/">&lt;p&gt;DBOS recently argued that
&lt;a target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.dbos.dev&#x2F;blog&#x2F;postgres-is-all-you-need-for-durable-execution&quot;&gt;Postgres
is all you need for durable execution&lt;&#x2F;a&gt;: if you already trust your database, you do not need a
separate orchestration tier. I agree with the direction, and I think the idea can be pushed further.&lt;&#x2F;p&gt;
&lt;p&gt;For a large class of durable systems, SQLite is all you need.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Obelisk 0.37: JavaScript, Deployments, Cron</title>
          <pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/announcing-obelisk-0-37/</link>
          <guid>https://obeli.sk/blog/announcing-obelisk-0-37/</guid>
          <description xml:base="https://obeli.sk/blog/announcing-obelisk-0-37/">&lt;p&gt;Obelisk 0.37 ships first-class JavaScript support for all three component types — activities,
workflows, and webhook endpoints — running inside a fine-grained permission sandbox. It also
introduces the Deployment concept with hot redeploy, and built-in cron scheduling.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Obelisk 0.35: Replay, Pause, Persistent Logs, GitHub Releases</title>
          <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/announcing-obelisk-0-35/</link>
          <guid>https://obeli.sk/blog/announcing-obelisk-0-35/</guid>
          <description xml:base="https://obeli.sk/blog/announcing-obelisk-0-35/">&lt;p&gt;Obelisk 0.35 introduces workflow replay for debugging and version migration, execution pausing,
persistent log storage, and streamlined component management with GitHub release support.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Obelisk 0.32: Cancellation, WebAPI, Postgres</title>
          <pubDate>Mon, 29 Dec 2025 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/announcing-obelisk-0-32/</link>
          <guid>https://obeli.sk/blog/announcing-obelisk-0-32/</guid>
          <description xml:base="https://obeli.sk/blog/announcing-obelisk-0-32/">&lt;p&gt;Obelisk 0.32 introduces cooperative cancellation for workflows and activities, a new WebAPI with
multi-format support, and PostgreSQL support for multi-node deployments and high availability.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>When Scope Lies: The Wildcard Pattern Drop Footgun in Rust</title>
          <pubDate>Fri, 19 Dec 2025 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/when-scope-lies/</link>
          <guid>https://obeli.sk/blog/when-scope-lies/</guid>
          <description xml:base="https://obeli.sk/blog/when-scope-lies/">&lt;p&gt;One of the big strengths of Rust is its use of automatic memory management. When a value gets out of
scope, the compiler automatically calls its destructor and frees the memory. During my work on
graceful shutdown I have stumbled on a less known interaction between scopes and the &lt;code&gt;_&lt;&#x2F;code&gt; wildcard
pattern that can lead to surprising order of destructors.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Comparing Obelisk with DBOS</title>
          <pubDate>Wed, 26 Nov 2025 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/comparing-dbos-part-1/</link>
          <guid>https://obeli.sk/blog/comparing-dbos-part-1/</guid>
          <description xml:base="https://obeli.sk/blog/comparing-dbos-part-1/">&lt;p&gt;Obelisk and &lt;a target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.dbos.dev&quot;&gt;DBOS&lt;&#x2F;a&gt; are both open-source durable
workflow engines.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s see how they compare in terms of ease of use, nondeterminism prevention and performance.&lt;&#x2F;p&gt;
&lt;p&gt;I will go through the &lt;a target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.dbos.dev&#x2F;java&#x2F;programming-guide&quot;&gt;Learn
DBOS Java&lt;&#x2F;a&gt; tutorial and compare it with Rust version of the same code written for Obelisk. I
chose Java because of familiarity, however the library has just been released so the code is still
quite young. On the Obelisk side, Rust is the obvious choice as it has the best
&lt;a href=&quot;https:&#x2F;&#x2F;obeli.sk&#x2F;blog&#x2F;challenging-fastest-workflow-engine&#x2F;&quot;&gt;performance&lt;&#x2F;a&gt; and
&lt;a href=&quot;https:&#x2F;&#x2F;obeli.sk&#x2F;blog&#x2F;comparing-rust-javascript-and-go-for-authoring-wasm-components&#x2F;&quot;&gt;tooling&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Challenging the Fastest OSS Workflow Engine</title>
          <pubDate>Wed, 29 Oct 2025 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/challenging-fastest-workflow-engine/</link>
          <guid>https://obeli.sk/blog/challenging-fastest-workflow-engine/</guid>
          <description xml:base="https://obeli.sk/blog/challenging-fastest-workflow-engine/">&lt;p&gt;November marks 2 years since I started working on Obelisk, an OSS workflow engine written in Rust.&lt;&#x2F;p&gt;
&lt;p&gt;As a reflection on its capabilities I have decided to make a friendly comparison with
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.windmill.dev&quot;&gt;WindMill&lt;&#x2F;a&gt;, which produced an interesting
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.windmill.dev&#x2F;docs&#x2F;misc&#x2F;benchmarks&#x2F;competitors&#x2F;windmill&quot;&gt;benchmark&lt;&#x2F;a&gt; accompanied by a
blog post titled
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.windmill.dev&#x2F;blog&#x2F;launch-week-1&#x2F;fastest-workflow-engine&quot;&gt;Fastest self-hostable open-source workflow engine&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Taming AI-Assisted Code with Deterministic Workflows</title>
          <pubDate>Mon, 13 Oct 2025 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/taming-ai-assisted-code/</link>
          <guid>https://obeli.sk/blog/taming-ai-assisted-code/</guid>
          <description xml:base="https://obeli.sk/blog/taming-ai-assisted-code/">&lt;p&gt;Contrary to vibe coding, usually defined as irresponsible running of LLM generated code with no real
code review, leading to security, debugging and maintenance nightmares, &quot;vibe engineering&quot; was
&lt;a target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;simonwillison.net&#x2F;2025&#x2F;Oct&#x2F;7&#x2F;vibe-engineering&#x2F;&quot;&gt;defined&lt;&#x2F;a&gt; as
&quot;iterating with coding agents to produce production-quality code&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Here is how deterministic workflow engines, and specifically Obelisk, can help with the transition.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Obelisk 0.25.4 and handling of WASM traps</title>
          <pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/announcing-obelisk-0-25-4/</link>
          <guid>https://obeli.sk/blog/announcing-obelisk-0-25-4/</guid>
          <description xml:base="https://obeli.sk/blog/announcing-obelisk-0-25-4/">&lt;p&gt;Obelisk is an open-source deterministic workflow engine that runs, stores, and replays WASM-based
workflows using SQLite.&lt;&#x2F;p&gt;
&lt;p&gt;The headline change in &lt;strong&gt;v0.25&lt;&#x2F;strong&gt;: every function in workflows and activities is now required to be
fallible. Obelisk maps &lt;code&gt;execution-failed&lt;&#x2F;code&gt; errors into the called function&#x27;s return type. This
ensures traps and errors are handled explicitly instead of silently breaking execution.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Introducing Obelisk 0.24.1</title>
          <pubDate>Tue, 09 Sep 2025 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/introducing-obelisk-0-24-1/</link>
          <guid>https://obeli.sk/blog/introducing-obelisk-0-24-1/</guid>
          <description xml:base="https://obeli.sk/blog/introducing-obelisk-0-24-1/">&lt;p&gt;Obelisk is an open-source deterministic workflow engine that runs, stores, and replays WASM-based
workflows using SQLite.&lt;&#x2F;p&gt;
&lt;p&gt;There have been many changes since the
&lt;a href=&quot;https:&#x2F;&#x2F;obeli.sk&#x2F;blog&#x2F;introducing-obelisk&#x2F;&quot;&gt;initial public release 0.19.1&lt;&#x2F;a&gt;, mostly focused on
structured concurrency ergonomics, adding more abilities to activities and exploring using other
languages than Rust for authoring WASM Components.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Comparing Rust, JavaScript and Go for authoring WASM Components</title>
          <pubDate>Sun, 25 May 2025 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/comparing-rust-javascript-and-go-for-authoring-wasm-components/</link>
          <guid>https://obeli.sk/blog/comparing-rust-javascript-and-go-for-authoring-wasm-components/</guid>
          <description xml:base="https://obeli.sk/blog/comparing-rust-javascript-and-go-for-authoring-wasm-components/">&lt;p&gt;This month has already seen five Obelisk releases, each focused on adding &lt;strong&gt;experimental&lt;&#x2F;strong&gt;
JavaScript and Go support to the runtime. Although WASM format is source-language agnostic, both
JavaScript and Go needed tweaks, workarounds and sometimes upstream tooling fixes to get fully
working with the &lt;a href=&quot;https:&#x2F;&#x2F;component-model.bytecodealliance.org&#x2F;&quot; target=&quot;_blank&quot;&gt;WASM
Component Model&lt;&#x2F;a&gt;. In this post we&#x27;ll explore rewriting an activity, workflow and a webhook from
Rust. All code examples are available in the
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;obeli-sk&#x2F;demo-stargazers&#x2F;&quot;&gt;Stargazers repository&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Introducing Obelisk deterministic workflow engine</title>
          <pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate>
          <author>Obelisk</author>
          <link>https://obeli.sk/blog/introducing-obelisk/</link>
          <guid>https://obeli.sk/blog/introducing-obelisk/</guid>
          <description xml:base="https://obeli.sk/blog/introducing-obelisk/">&lt;p&gt;I&#x27;m excited to introduce Obelisk, a new workflow engine I&#x27;ve been passionately building for over a
year. You can find the project hosted at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;obeli.sk&#x2F;&quot;&gt;obeli.sk&lt;&#x2F;a&gt; and the source code openly
available at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;obeli-sk&#x2F;obelisk&quot;&gt;github.com&#x2F;obeli-sk&#x2F;obelisk&lt;&#x2F;a&gt; under an Open Source
license.&lt;&#x2F;p&gt;
&lt;p&gt;Recently, I shared Obelisk on Hacker News
(&lt;a href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=43636568&quot; target=&quot;_blank&quot;&gt;link to story&lt;&#x2F;a&gt;), and the
response was very encouraging! It received over 100 upvotes, and the GitHub repository leaped from
14 stars to over 120 in just one day. Seeing this interest encouraged me to share more about the
journey and the core ideas behind Obelisk.&lt;&#x2F;p&gt;</description>
      </item>
    </channel>
</rss>
