<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: skipbox.dev</title>
    <description>The latest articles on DEV Community by skipbox.dev (@skipbox).</description>
    <link>https://dev.to/skipbox</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4237263%2F1e52fd18-2c7c-4c3e-814e-32bd56f21aa3.png</url>
      <title>DEV Community: skipbox.dev</title>
      <link>https://dev.to/skipbox</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/skipbox"/>
    <language>en</language>
    <item>
      <title>Ngl, GitHub Actions bills were lowkey cooking me 💀 so I built my own runner. Flat $39/mo, unlimited minutes, and your Docker + npm cache just stays warm between jobs. Swap one `runs-on` line and you're golden. No cap, it slaps 🔥</title>
      <dc:creator>skipbox.dev</dc:creator>
      <pubDate>Tue, 10 Nov 2026 21:42:57 +0000</pubDate>
      <link>https://dev.to/skipbox/ngl-github-actions-bills-were-lowkey-cooking-me-so-i-built-my-own-runner-flat-39mo-unlimited-7n8</link>
      <guid>https://dev.to/skipbox/ngl-github-actions-bills-were-lowkey-cooking-me-so-i-built-my-own-runner-flat-39mo-unlimited-7n8</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/skipbox/i-built-skipbox-a-dedicated-github-actions-runner-thats-blazing-fast-and-dirt-cheap-3h8o" class="crayons-story__hidden-navigation-link"&gt;I built Skipbox: a dedicated GitHub Actions runner that's blazing fast and dirt cheap&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/skipbox" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4237263%2F1e52fd18-2c7c-4c3e-814e-32bd56f21aa3.png" alt="skipbox profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/skipbox" class="crayons-story__secondary fw-medium m:hidden"&gt;
              skipbox.dev
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                skipbox.dev
                
                
              
              &lt;div id="story-author-preview-content-5012844" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/skipbox" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4237263%2F1e52fd18-2c7c-4c3e-814e-32bd56f21aa3.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;skipbox.dev&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/skipbox/i-built-skipbox-a-dedicated-github-actions-runner-thats-blazing-fast-and-dirt-cheap-3h8o" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Nov 10&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/skipbox/i-built-skipbox-a-dedicated-github-actions-runner-thats-blazing-fast-and-dirt-cheap-3h8o" id="article-link-5012844"&gt;
          I built Skipbox: a dedicated GitHub Actions runner that's blazing fast and dirt cheap
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubactions"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubactions&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cicd"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cicd&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/docker"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;docker&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/skipbox/i-built-skipbox-a-dedicated-github-actions-runner-thats-blazing-fast-and-dirt-cheap-3h8o" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/skipbox/i-built-skipbox-a-dedicated-github-actions-runner-thats-blazing-fast-and-dirt-cheap-3h8o#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
          
          &lt;div class="only-sidebar-menu-item trusted-visible-block print-hidden align-center"&gt;
                
                    
                
          &lt;/div&gt;

        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>I built Skipbox: a dedicated GitHub Actions runner that's blazing fast and dirt cheap</title>
      <dc:creator>skipbox.dev</dc:creator>
      <pubDate>Tue, 10 Nov 2026 21:39:13 +0000</pubDate>
      <link>https://dev.to/skipbox/i-built-skipbox-a-dedicated-github-actions-runner-thats-blazing-fast-and-dirt-cheap-3h8o</link>
      <guid>https://dev.to/skipbox/i-built-skipbox-a-dedicated-github-actions-runner-thats-blazing-fast-and-dirt-cheap-3h8o</guid>
      <description>&lt;p&gt;I built &lt;a href="https://skipbox.dev/?ref=devto" rel="noopener noreferrer"&gt;Skipbox&lt;/a&gt;, a runner that runs your GitHub Actions jobs on a dedicated VM, blazing fast and dirt cheap.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://skipbox.dev/?ref=devto" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fskipbox.dev%2Fog.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://skipbox.dev/?ref=devto" rel="noopener noreferrer" class="c-link"&gt;
            Skipbox: your own warm GitHub Actions runner, flat monthly price (2026)
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Your own warm GitHub Actions runner: package caches and Docker images stay between jobs, and credentials are wiped after each one. Unlimited minutes at a flat $39 a month for a GitHub organization or personal account, and a free trial with no card.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fskipbox.dev%2Ffavicon.svg"&gt;
          skipbox.dev
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Using it is dead simple: just change &lt;code&gt;runs-on&lt;/code&gt; in your job definition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt; jobs:
   test:
&lt;span class="gd"&gt;-    runs-on: ubuntu-latest&lt;/span&gt;
&lt;span class="gi"&gt;+    runs-on: skipbox&lt;/span&gt;
     steps:
       - uses: actions/checkout@v4
       - run: make test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;1/12 the cost of GitHub at full use&lt;/li&gt;
&lt;li&gt;A flat price, so you can run it all day&lt;/li&gt;
&lt;li&gt;7× GitHub's cache space&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdktf33ngxmukl39rrfro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdktf33ngxmukl39rrfro.png" alt="Skipbox vs GitHub Actions Runner"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4o5lrnqmo785c99krbl7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4o5lrnqmo785c99krbl7.png" alt="Skipbox vs Blacksmith"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀&lt;/p&gt;

&lt;p&gt;Here is what you save at 20,000 minutes a month (a typical startup), comparing 4 vCPU with 4 vCPU, from the cost calculator on &lt;a href="https://skipbox.dev/?ref=devto" rel="noopener noreferrer"&gt;skipbox.dev&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Today&lt;/th&gt;
&lt;th&gt;Per month&lt;/th&gt;
&lt;th&gt;Skipbox S × 1&lt;/th&gt;
&lt;th&gt;You save&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub 4-core runner&lt;/td&gt;
&lt;td&gt;about $222&lt;/td&gt;
&lt;td&gt;$39 flat&lt;/td&gt;
&lt;td&gt;$183 a month ($2,196 a year)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blacksmith (4 vCPU)&lt;/td&gt;
&lt;td&gt;about $148&lt;/td&gt;
&lt;td&gt;$39 flat&lt;/td&gt;
&lt;td&gt;$109 a month ($1,308 a year)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Way cheaper than Blacksmith, too!&lt;/p&gt;
&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Skipbox is a GitHub Actions runner that works as a GitHub App.&lt;br&gt;
Install the app on your GitHub organization or personal account, and each plan gives you one VM dedicated to your account.&lt;/p&gt;

&lt;p&gt;Because that VM belongs to your account alone, the Docker images and the npm cache the previous job pulled down are already on disk when the next job starts.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kept between jobs&lt;/th&gt;
&lt;th&gt;Wiped after every job&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Docker images, layers, and build cache&lt;/td&gt;
&lt;td&gt;The runner's credentials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Package caches for npm, pip, Go, Gradle, Cargo, and more&lt;/td&gt;
&lt;td&gt;The work directory with your checkout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The tool cache that setup-* actions fill&lt;/td&gt;
&lt;td&gt;The runner user's processes and every container&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Credential files such as &lt;code&gt;~/.npmrc&lt;/code&gt; and &lt;code&gt;~/.git-credentials&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The caches that make jobs fast stay; the credentials don't.&lt;/p&gt;

&lt;p&gt;A health check also runs after every job, so if a machine ever gets into a bad state, it is automatically rebuilt from a clean image.&lt;/p&gt;

&lt;p&gt;VMs come in three sizes. You pick one with the &lt;code&gt;runs-on&lt;/code&gt; label, depending on the plan you subscribe to.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;CPU / Memory&lt;/th&gt;
&lt;th&gt;Disk&lt;/th&gt;
&lt;th&gt;&lt;code&gt;runs-on&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S&lt;/td&gt;
&lt;td&gt;4 vCPU / 8 GB&lt;/td&gt;
&lt;td&gt;80 GB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;skipbox&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M&lt;/td&gt;
&lt;td&gt;8 vCPU / 16 GB&lt;/td&gt;
&lt;td&gt;160 GB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;skipbox-8x16&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;16 vCPU / 32 GB&lt;/td&gt;
&lt;td&gt;320 GB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;skipbox-16x32&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  How it started: heavy jobs on a powerful PC at home, development on a laptop
&lt;/h2&gt;

&lt;p&gt;For &lt;a href="https://convika.com/" rel="noopener noreferrer"&gt;Convika&lt;/a&gt;, another product I'm building, I ran CI on a self-hosted runner on my desktop at home.&lt;/p&gt;

&lt;p&gt;The machine never got reset, so Playwright's browsers and the pnpm store simply stayed on disk. No re-downloading them on every run, and no worrying about cache size limits.&lt;/p&gt;

&lt;p&gt;By the way, GitHub doesn't charge for minutes on self-hosted runners, so quite a few people turn a powerful home PC into a self-hosted runner and keep it busy around the clock (if they don't mind the power bill and the roar of fans that never stop). In December 2025, GitHub did announce that it would start charging for self-hosted runners too, but in the end that plan was put on hold.&lt;br&gt;
So I realized that the shortest path to cheap, fast CI is a dedicated machine that isn't reset every time, used for every job.&lt;/p&gt;

&lt;p&gt;Skipbox gives you that setup without keeping a PC running at home.&lt;br&gt;
Provisioning the VM, registering a runner for each job, cleaning up after each job, rebuilding when something breaks: Skipbox takes care of all the tedious parts for you.&lt;/p&gt;
&lt;h2&gt;
  
  
  Have you mastered GitHub Actions' complex caching?
&lt;/h2&gt;

&lt;p&gt;To get caching working in GitHub Actions, you usually write something like this. Could you explain what each line does?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/cache@v4&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~/.npm&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}&lt;/span&gt;
    &lt;span class="na"&gt;restore-keys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;npm-${{ runner.os }}-&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And GitHub's cache comes with these rules (&lt;a href="https://docs.github.com/en/actions/reference/workflows-and-actions/dependency-caching" rel="noopener noreferrer"&gt;GitHub Docs&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not shared across branches.&lt;/strong&gt; A job can only use caches made on its own branch and on the default branch (plus the base branch, for a pull request).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A pull request's first run misses.&lt;/strong&gt; If the default branch has no cache, it builds from scratch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No overwriting a key.&lt;/strong&gt; A cache can't be changed once it's created, so you have to design your keys and &lt;code&gt;restore-keys&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deleted after 7 days unused.&lt;/strong&gt; Once the repository goes past 10 GB in total, the caches used least recently are deleted first (LRU).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Skipbox, none of this matters: no cache keys, no restore steps.&lt;br&gt;
The cache simply stays on the VM's disk, and every job your account runs on that machine uses the same disk.&lt;/p&gt;

&lt;p&gt;And there's plenty of room. The S plan's disk is 80 GB, and 70 GB of it (everything but the OS and tools) is yours for caches. That's 7× the 10 GB GitHub gives a repository by default (15× on M, 31× on L). Docker cleans up unused data only once the disk is more than 85% full.&lt;/p&gt;

&lt;p&gt;Docker builds reuse the previous job's layers too. &lt;code&gt;docker build&lt;/code&gt; and &lt;code&gt;docker compose build&lt;/code&gt; work unchanged, and if you use &lt;code&gt;docker/setup-buildx-action&lt;/code&gt;, set &lt;code&gt;driver: docker&lt;/code&gt; and the machine's cache kicks in.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker/setup-buildx-action@v3&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GitHub → Skipbox (Cloudflare Workers):&lt;/strong&gt; a job is queued (the &lt;code&gt;workflow_job&lt;/code&gt; webhook).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipbox → GitHub:&lt;/strong&gt; registers a just-in-time (JIT) runner for that job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your account's VM → Skipbox:&lt;/strong&gt; "Is there a next job?" (every second)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipbox → VM:&lt;/strong&gt; hands over the JIT config.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VM → GitHub:&lt;/strong&gt; runs the job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VM:&lt;/strong&gt; wipes the credentials and the work directory, then runs a health check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VM → Skipbox:&lt;/strong&gt; reports the result and waits for the next job.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The backend runs on Cloudflare Workers. As a GitHub App, it receives job webhooks, registers a fresh runner for each job, and hands it to your account's VM. The VM takes your account's jobs one at a time, and after each one it cleans up and checks itself before waiting for the next. This flow is why every job starts with the cache already in place.&lt;/p&gt;
&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;S&lt;/th&gt;
&lt;th&gt;M&lt;/th&gt;
&lt;th&gt;L&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;td&gt;$39&lt;/td&gt;
&lt;td&gt;$79&lt;/td&gt;
&lt;td&gt;$149&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU / Memory&lt;/td&gt;
&lt;td&gt;4 vCPU / 8 GB&lt;/td&gt;
&lt;td&gt;8 vCPU / 16 GB&lt;/td&gt;
&lt;td&gt;16 vCPU / 32 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk&lt;/td&gt;
&lt;td&gt;80 GB&lt;/td&gt;
&lt;td&gt;160 GB&lt;/td&gt;
&lt;td&gt;320 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minutes&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There's no usage-based billing at all.&lt;br&gt;
Running S all day, 43,200 minutes a month, costs &lt;strong&gt;1/12&lt;/strong&gt; of GitHub's 4-core runner.&lt;br&gt;
Plans differ in how many jobs can run at once and how big they are, but no plan limits your minutes.&lt;br&gt;
If you want to run more jobs at once, just add a plan. You can subscribe to several plans (say, three S, two M, and one L), so it scales as far as you need.&lt;/p&gt;

&lt;p&gt;In the AI era, I keep hearing about teams that use GitHub Actions so heavily they hit their budget cap and CI stops at the end of the month. With Skipbox, there's simply nothing usage-based to hit.&lt;/p&gt;

&lt;p&gt;There's a free trial for 7 days (it ends earlier if you use up its 3,000 minutes).&lt;/p&gt;
&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://skipbox.dev/?ref=devto" rel="noopener noreferrer"&gt;Skipbox&lt;/a&gt; is a dedicated VM for GitHub Actions, blazing fast and dirt cheap&lt;/li&gt;
&lt;li&gt;Huge cache space (7× GitHub's)&lt;/li&gt;
&lt;li&gt;A flat monthly price with unlimited minutes, so you can run E2E tests 24 hours a day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try it out: move one job to Skipbox and see how it runs ↓&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://skipbox.dev/?ref=devto" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fskipbox.dev%2Fog.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://skipbox.dev/?ref=devto" rel="noopener noreferrer" class="c-link"&gt;
            Skipbox: your own warm GitHub Actions runner, flat monthly price (2026)
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Your own warm GitHub Actions runner: package caches and Docker images stay between jobs, and credentials are wiped after each one. Unlimited minutes at a flat $39 a month for a GitHub organization or personal account, and a free trial with no card.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fskipbox.dev%2Ffavicon.svg"&gt;
          skipbox.dev
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Questions or feedback? Leave a comment or email &lt;a href="mailto:hello@skipbox.dev"&gt;hello@skipbox.dev&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>cicd</category>
      <category>docker</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
