<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Matthew Berger</title>
    <link>https://matthewberger.dev/articles</link>
    <description>Experienced software engineer with a passion for graphics and Rust</description>
    <language>en</language>
    <atom:link href="https://matthewberger.dev/articles/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Write an archetype ECS in 300 lines of Rust</title>
      <link>https://matthewberger.dev/articles/posts/write-an-archetype-ecs-in-300-lines-of-rust/</link>
      <guid>https://matthewberger.dev/articles/posts/write-an-archetype-ecs-in-300-lines-of-rust/</guid>
      <pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate>
      <description>An archetype ECS built from nothing: generational handles, struct-of-arrays tables, runtime component migration, and two caches. Then the engine layer on top. No proc-macros, no unsafe, std only.</description>
    </item>
    <item>
      <title>Breakout as plain data (part 2), power-ups as data</title>
      <link>https://matthewberger.dev/articles/posts/breakout-as-plain-data-power-ups/</link>
      <guid>https://matthewberger.dev/articles/posts/breakout-as-plain-data-power-ups/</guid>
      <pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate>
      <description>Multi-ball, a widening paddle, slow motion, burning bricks, lasers. Every power-up is the same move: a bit more data plus one small system, and nothing already written changes.</description>
    </item>
    <item>
      <title>Breakout as plain data (part 1), components, systems, resources</title>
      <link>https://matthewberger.dev/articles/posts/breakout-as-plain-data-components-systems-resources/</link>
      <guid>https://matthewberger.dev/articles/posts/breakout-as-plain-data-components-systems-resources/</guid>
      <pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate>
      <description>A whole Breakout, modeled with no objects. Bodies are plain data structs, behavior is free functions over queries, and the game&apos;s globals are a handful of resources. Part 1 builds the base game.</description>
    </item>
    <item>
      <title>GPU picking in nightshade</title>
      <link>https://matthewberger.dev/articles/posts/gpu-picking-in-nightshade/</link>
      <guid>https://matthewberger.dev/articles/posts/gpu-picking-in-nightshade/</guid>
      <pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate>
      <description>How nightshade answers &quot;what is under the cursor, where in the world is it, and what is the surface normal there&quot; using a multiple-render-target mesh pass, a compute shader that samples a 5x5 window of the depth and entity-id textures, and an async readback.</description>
    </item>
    <item>
      <title>Build your own retained UI (part 3), rendering with wgpu</title>
      <link>https://matthewberger.dev/articles/posts/build-your-own-retained-ui-wgpu-rendering/</link>
      <guid>https://matthewberger.dev/articles/posts/build-your-own-retained-ui-wgpu-rendering/</guid>
      <pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate>
      <description>Turning a laid-out tree into pixels. Instanced rect rendering with an SDF shader for rounded corners and borders, a bitmap font atlas for text, and the render-graph pass that ties it into a wgpu application.</description>
    </item>
    <item>
      <title>Build your own retained UI (part 2), layout and interaction</title>
      <link>https://matthewberger.dev/articles/posts/build-your-own-retained-ui-layout-interaction/</link>
      <guid>https://matthewberger.dev/articles/posts/build-your-own-retained-ui-layout-interaction/</guid>
      <pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate>
      <description>Resolving the tree into screen-space rectangles, anchors, row and column flow layout, hit testing, per-entity interaction state, and the event queue that makes buttons clickable.</description>
    </item>
    <item>
      <title>Build your own retained UI (part 1), components and tree</title>
      <link>https://matthewberger.dev/articles/posts/build-your-own-retained-ui-components/</link>
      <guid>https://matthewberger.dev/articles/posts/build-your-own-retained-ui-components/</guid>
      <pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate>
      <description>A retained UI built on top of an archetype ECS. Part 1 lays down the components, the tree, and a small builder that produces a working widget hierarchy.</description>
    </item>
    <item>
      <title>Building a static site generator in Rust</title>
      <link>https://matthewberger.dev/articles/posts/building-a-static-site-generator-in-rust/</link>
      <guid>https://matthewberger.dev/articles/posts/building-a-static-site-generator-in-rust/</guid>
      <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
      <description>How bamboo is shaped: the SSG I wrote in Rust and use to build this site. Content walks, frontmatter, syntect, Tera, shortcodes, parallel rendering, and incremental rebuilds.</description>
    </item>
    <item>
      <title>Build your own ECS (part 3), change detection, events, tags, and commands</title>
      <link>https://matthewberger.dev/articles/posts/build-your-own-ecs-events-changes-tags-commands/</link>
      <guid>https://matthewberger.dev/articles/posts/build-your-own-ecs-events-changes-tags-commands/</guid>
      <pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate>
      <description>The four subsystems that turn the storage layer into something a real game engine can sit on top of. A watermark-based change detector, sequence-numbered event channels, sparse-set tags, and a deferred command buffer.</description>
    </item>
    <item>
      <title>Build your own ECS (part 2), structural change and queries</title>
      <link>https://matthewberger.dev/articles/posts/build-your-own-ecs-structural-change/</link>
      <guid>https://matthewberger.dev/articles/posts/build-your-own-ecs-structural-change/</guid>
      <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
      <description>Adding and removing components at runtime by migrating entities between archetypes, walking tables to satisfy queries, and the two caches that make both operations fast.</description>
    </item>
    <item>
      <title>Build your own ECS (part 1), archetype storage</title>
      <link>https://matthewberger.dev/articles/posts/build-your-own-ecs-archetype-storage/</link>
      <guid>https://matthewberger.dev/articles/posts/build-your-own-ecs-archetype-storage/</guid>
      <pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate>
      <description>An ECS, built from nothing, in three posts. Part 1 lays down the storage. Generational entity handles and archetype tables in struct-of-arrays layout.</description>
    </item>
  </channel>
</rss>
