<?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: karthiii13</title>
    <description>The latest articles on DEV Community by karthiii13 (@karthiii13).</description>
    <link>https://dev.to/karthiii13</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%2F4166923%2F0b71029f-f0a7-48c8-afdd-740e0b20b84e.png</url>
      <title>DEV Community: karthiii13</title>
      <link>https://dev.to/karthiii13</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karthiii13"/>
    <language>en</language>
    <item>
      <title>Self-host Uptime Kuma: a status page in 10 minutes (with real RAM numbers)</title>
      <dc:creator>karthiii13</dc:creator>
      <pubDate>Wed, 07 Oct 2026 10:29:54 +0000</pubDate>
      <link>https://dev.to/karthiii13/self-host-uptime-kuma-a-status-page-in-10-minutes-with-real-ram-numbers-26ai</link>
      <guid>https://dev.to/karthiii13/self-host-uptime-kuma-a-status-page-in-10-minutes-with-real-ram-numbers-26ai</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://freetierwatch-eax.pages.dev/apps/uptime-kuma-docker" rel="noopener noreferrer"&gt;FreeTierWatch&lt;/a&gt;, where we hand-verify free tiers and actually test the self-hosted apps we write about.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Uptime Kuma is the self-hosted answer to UptimeRobot and Pingdom: a monitoring dashboard that pings your sites, APIs, and databases, and alerts you when they go down. No per-monitor pricing, no 5-minute-interval paywall — your hardware, your rules.&lt;/p&gt;

&lt;p&gt;We deployed version 2 from scratch, measured its actual resource usage, and broke a couple of monitors on purpose to see what failure looks like. Everything below is from that run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Any machine with Docker — we used a workstation with 30 GB RAM, but our measurements show &lt;strong&gt;256 MB free RAM is plenty&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;1 GB free disk (the image alone is 574 MB)&lt;/li&gt;
&lt;li&gt;5-10 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Docker not installed? On Ubuntu/Debian: &lt;code&gt;curl -fsSL https://get.docker.com | sh&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: the Compose file
&lt;/h2&gt;

&lt;p&gt;Make a directory and drop this in as &lt;code&gt;compose.yaml&lt;/code&gt;:&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="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;uptime-kuma&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;louislam/uptime-kuma:2&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;uptime-kuma&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kuma-data:/app/data&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3001:3001"&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;kuma-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two deliberate choices here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Named volume&lt;/strong&gt; (&lt;code&gt;kuma-data&lt;/code&gt;) instead of a bind mount — survives container recreation and avoids the host-permissions mess that bind mounts cause on some systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;restart: unless-stopped&lt;/code&gt;&lt;/strong&gt; — the container comes back after reboots without systemd units or cron hacks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: start it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First run pulls the image (574 MB — a minute or two on decent broadband). Then open &lt;code&gt;http://localhost:3001&lt;/code&gt; (or &lt;code&gt;http://&amp;lt;machine-ip&amp;gt;:3001&lt;/code&gt; from another device on your network).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: database choice (new in v2)
&lt;/h2&gt;

&lt;p&gt;Version 2 asks which database to use before anything else:&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%2Fop85vefv4q70xnuioz1q.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%2Fop85vefv4q70xnuioz1q.png" alt="Uptime Kuma database setup screen offering Embedded MariaDB, external MariaDB/MySQL, and SQLite" width="800" height="877"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick SQLite&lt;/strong&gt; for a homelab. The embedded MariaDB option exists for large installations (hundreds of monitors); for anything under ~50 monitors, SQLite is simpler, uses less RAM, and backs up as a single file. After 2 months with 3 monitors, our SQLite data volume was under 2 MB.&lt;/p&gt;

&lt;p&gt;Then create your admin account. Use a real password manager entry — this dashboard knows every URL you care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: add monitors
&lt;/h2&gt;

&lt;p&gt;Add New Monitor → pick a type → paste a URL. We set up three real ones:&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%2F12rvzuilrb66jueqyo3g.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%2F12rvzuilrb66jueqyo3g.png" alt="Uptime Kuma dashboard showing three monitors up with response time history" width="800" height="877"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lessons from the two monitors we got wrong on the first try (visible as red in the history — we left them in deliberately):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP-monitoring a private GitHub repo returns 404.&lt;/strong&gt; The unauthenticated check sees what a logged-out user sees. Monitor something public, or use a keyword/API monitor with a token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase's REST endpoint returns 401 without an API key&lt;/strong&gt; — "down" according to an HTTP monitor even though the service is fine. For databases, use a &lt;strong&gt;TCP Port monitor&lt;/strong&gt; instead: ours checks the Postgres pooler on port 5432 and reports ~33 ms from India to Mumbai.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the general rule: HTTP monitors for pages, TCP monitors for databases and services that require auth.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually costs to run (measured)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Measured value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Image size&lt;/td&gt;
&lt;td&gt;574 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM, idle (0 monitors)&lt;/td&gt;
&lt;td&gt;143 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM, 3 active monitors (60s interval)&lt;/td&gt;
&lt;td&gt;133–147 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU, idle&lt;/td&gt;
&lt;td&gt;0.02%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU, 3 monitors&lt;/td&gt;
&lt;td&gt;~0.7–0.9% of one core&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk (data volume, 3 monitors)&lt;/td&gt;
&lt;td&gt;1.4 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restart time (&lt;code&gt;docker restart&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;1.6 s, serving again in under 10 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Translation: Uptime Kuma runs comfortably on a Raspberry Pi, a 10-year-old laptop, or the smallest VPS money can buy. RAM is the only number that matters, and it stays well under 200 MB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gotchas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The monitor is only as available as the machine it runs on.&lt;/strong&gt; Our test box is a workstation that isn't on 24/7 — fine for learning, useless for real alerting. See below.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port 3001 conflicts&lt;/strong&gt;: if something already listens there, change the left side of the mapping (&lt;code&gt;"3002:3001"&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No built-in HTTPS.&lt;/strong&gt; On a LAN that's fine; exposing it to the internet needs a reverse proxy (Caddy/Traefik/nginx) in front — or better, don't expose it and use Tailscale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updates&lt;/strong&gt;: &lt;code&gt;docker compose pull &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;. The named volume keeps your data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Backups
&lt;/h2&gt;

&lt;p&gt;Everything lives in one volume. Snapshot it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; kuma-data:/data &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/backup alpine &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;tar &lt;/span&gt;czf /backup/kuma-backup-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%F&lt;span class="si"&gt;)&lt;/span&gt;.tar.gz &lt;span class="nt"&gt;-C&lt;/span&gt; /data &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cron that weekly and copy it somewhere that isn't the same disk.&lt;/p&gt;

&lt;h2&gt;
  
  
  When NOT to self-host this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your monitoring box isn't always on.&lt;/strong&gt; A monitor that's offline when your site goes down is theatre. If you don't have an always-on machine, run Uptime Kuma on a free or cheap cloud box — &lt;a href="https://freetierwatch-eax.pages.dev/free-tiers/oracle-cloud" rel="noopener noreferrer"&gt;Oracle's Always Free tier&lt;/a&gt; fits it with room to spare, or any ~$4-6/mo VPS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're monitoring the same machine the monitor runs on.&lt;/strong&gt; It can't tell you it's down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need SMS alerting and SLA reports for a client contract&lt;/strong&gt; — paid services earn their fee there.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What we actually ran this on
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Machine:&lt;/strong&gt; Intel Core Ultra 7 255H (16 cores), 30 GB RAM, NVMe — massively overkill; see measurements above for what it actually needs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OS:&lt;/strong&gt; Ubuntu 24.04.5 LTS, x86_64&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker:&lt;/strong&gt; 29.8.1, Compose v5.1.3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uptime Kuma:&lt;/strong&gt; &lt;code&gt;louislam/uptime-kuma:2&lt;/code&gt; (v2, SQLite backend)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Date:&lt;/strong&gt; 2026-10-06&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>selfhosted</category>
      <category>docker</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Supabase vs Neon: I measured both free Postgres tiers from India</title>
      <dc:creator>karthiii13</dc:creator>
      <pubDate>Wed, 07 Oct 2026 09:56:01 +0000</pubDate>
      <link>https://dev.to/karthiii13/supabase-vs-neon-i-measured-both-free-postgres-tiers-from-india-5da8</link>
      <guid>https://dev.to/karthiii13/supabase-vs-neon-i-measured-both-free-postgres-tiers-from-india-5da8</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://freetierwatch-eax.pages.dev/compare/supabase-vs-neon-free-postgres" rel="noopener noreferrer"&gt;FreeTierWatch&lt;/a&gt;, where we hand-verify and track the free tiers of developer services.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you need a free Postgres database for a new project, you are basically choosing between Supabase and Neon right now. Both offer genuinely free tiers with no credit card. Both run real PostgreSQL.&lt;/p&gt;

&lt;p&gt;They solve different problems. Supabase is an all-in-one backend (Postgres plus auth, storage, and edge functions). Neon is pure serverless Postgres focused on branching and scale-to-zero.&lt;/p&gt;

&lt;p&gt;We didn't just read the pricing pages — we created a project on each, connected from India, and measured what actually happens. Numbers below are from our own runs on 2026-10-06.&lt;/p&gt;

&lt;h2&gt;
  
  
  The verdict table
&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;Supabase (Free)&lt;/th&gt;
&lt;th&gt;Neon (Free)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Credit card required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Postgres storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;500 MB per project (2 projects)&lt;/td&gt;
&lt;td&gt;1 GB per project, 20 GB account total&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compute model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Always-on shared instance&lt;/td&gt;
&lt;td&gt;Scale-to-zero, 100 CU-hours/project/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Idle policy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Project &lt;strong&gt;paused after 7 days&lt;/strong&gt; inactivity&lt;/td&gt;
&lt;td&gt;Compute suspends after &lt;strong&gt;5 minutes&lt;/strong&gt; (resumes automatically)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cold start (measured)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;495 ms*&lt;/td&gt;
&lt;td&gt;1,242 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hot query from India (measured)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;5 ms&lt;/strong&gt; (Mumbai)&lt;/td&gt;
&lt;td&gt;58 ms (Singapore)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;India region&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — Mumbai &lt;code&gt;ap-south-1&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;No — Singapore closest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bundled extras&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auth (50k MAU), 1 GB file storage, edge functions&lt;/td&gt;
&lt;td&gt;Branching, 60k MAU auth, object storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None on free&lt;/td&gt;
&lt;td&gt;6-hour restore history (1 GB cap)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;* Supabase's free instance doesn't scale to zero on short timescales — our "cold" number is a fresh connection after 6 minutes idle. Its real pause only kicks in after 7 days of inactivity and requires a manual dashboard restore.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we measured
&lt;/h2&gt;

&lt;p&gt;We created a fresh free project on each platform — Supabase in Mumbai (&lt;code&gt;ap-south-1&lt;/code&gt;), Neon in Singapore (&lt;code&gt;ap-southeast-1&lt;/code&gt;, its closest region to India) — and ran the same script from a machine in India:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cold:&lt;/strong&gt; first connection + &lt;code&gt;SELECT 1&lt;/code&gt; after 6 minutes of idle (beyond Neon's 5-minute suspend)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Warm:&lt;/strong&gt; 5 fresh connections while compute is up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot:&lt;/strong&gt; 5 queries on an already-open connection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The measurement script is &lt;a href="https://github.com/karthiii13/freetierwatch" rel="noopener noreferrer"&gt;in our repo&lt;/a&gt; — run it yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the numbers mean
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Neon pays a real cold-start tax
&lt;/h3&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;cold&lt;/th&gt;
&lt;th&gt;warm connect (median)&lt;/th&gt;
&lt;th&gt;hot query (median)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Neon (Singapore)&lt;/td&gt;
&lt;td&gt;1,242 ms&lt;/td&gt;
&lt;td&gt;431 ms&lt;/td&gt;
&lt;td&gt;58 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase (Mumbai)&lt;/td&gt;
&lt;td&gt;495 ms&lt;/td&gt;
&lt;td&gt;238 ms&lt;/td&gt;
&lt;td&gt;5 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Neon's compute suspends after 5 minutes of inactivity — not configurable on the free plan. The next request pays ~1.2 seconds from India. If your app gets a request every few minutes, every one of those users waits. If it gets steady traffic, the compute stays warm and you never notice — but then you're burning through the 100 CU-hour monthly allowance (0.25 CU × 400 hours = the whole month, so steady traffic fits, but background jobs plus traffic may not).&lt;/p&gt;

&lt;p&gt;Supabase's free instance is a small always-on server. No suspend cycle, no cold-start tax — until the 7-day pause, which is a different beast entirely: the project stops until you log into the dashboard and restore it by hand.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 10x latency gap is geography, not engineering
&lt;/h3&gt;

&lt;p&gt;Supabase's 5 ms vs Neon's 58 ms hot-query latency is almost entirely Mumbai vs Singapore round-trip time. Neither platform is "slower" — Neon just has no India region. If your users are in India, that 50+ ms on every single query is a tax you pay forever. If your users are in the US or EU, this flips and you should re-run our script from where your server will live.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gotcha we hit: Supabase direct connections are IPv6-only
&lt;/h3&gt;

&lt;p&gt;Our first connection attempt to Supabase failed with &lt;code&gt;ENETUNREACH&lt;/code&gt;. The direct connection string (&lt;code&gt;db.&amp;lt;ref&amp;gt;.supabase.co&lt;/code&gt;) resolves to IPv6 only, and most Indian home ISPs don't route IPv6. &lt;strong&gt;Use the session pooler string&lt;/strong&gt; (&lt;code&gt;&amp;lt;ref&amp;gt;.pooler.supabase.com&lt;/code&gt;) — it's IPv4-friendly. If a tutorial just gives you the direct string and you're on IPv4, you'll think the service is down. It isn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verified limits
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Supabase free tier
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;2 active projects, 500 MB Postgres each (including indexes and WAL overhead — usable space is less)&lt;/li&gt;
&lt;li&gt;Auth: 50,000 monthly active users&lt;/li&gt;
&lt;li&gt;Storage: 1 GB files; egress 5 GB/month; 500K edge function invocations&lt;/li&gt;
&lt;li&gt;Paused after 7 days inactivity, restorable from dashboard&lt;/li&gt;
&lt;li&gt;No automated backups — if you drop a table, it's gone&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Neon free tier
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;100 projects, 1 GB Postgres each, 20 GB account-wide cap&lt;/li&gt;
&lt;li&gt;100 CU-hours compute per project per month; autoscaling up to 2 CU&lt;/li&gt;
&lt;li&gt;10 branches per project (database branches work like git branches)&lt;/li&gt;
&lt;li&gt;Egress 5 GB/project/month; 6-hour instant-restore history (capped at 1 GB of changes)&lt;/li&gt;
&lt;li&gt;Run out of CU-hours mid-month and your compute is &lt;strong&gt;suspended until next month&lt;/strong&gt; — data survives, app goes down&lt;/li&gt;
&lt;li&gt;Hit the storage cap and &lt;strong&gt;writes start failing&lt;/strong&gt; until you free space&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: many posts still cite Neon's old "512 MB per branch" limit. The current official number is 1 GB per project — we verified against Neon's plans doc on 2026-10-06.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one should you pick?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Student side project:&lt;/strong&gt; Supabase. Auth and file uploads out of the box means you ship the actual project instead of wiring JWT handling all weekend. Ping it once a week so it doesn't pause (a free cron from GitHub Actions works).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indie hacker production app:&lt;/strong&gt; Neon — if your traffic is sporadic and your users aren't latency-sensitive. Database branching makes migrations genuinely safer: branch, migrate, test, merge. If you use Clerk/Auth0 or your own backend anyway, Supabase's extras are dead weight. But watch the CU-hour budget if you run background jobs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;India-based users:&lt;/strong&gt; Supabase, and it's not close. 5 ms vs 58 ms on every query, measured. Until Neon opens an India region, physics wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  When the answer is "pay for neither"
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You need predictable latency with zero cold starts and zero pause risk → a $5-6/mo VPS running Postgres in Docker beats both free tiers&lt;/li&gt;
&lt;li&gt;Your database is already over 500 MB–1 GB → you're outside both free tiers on day one&lt;/li&gt;
&lt;li&gt;You need real backups and point-in-time recovery guarantees → that's a paid feature everywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What we actually ran this on
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Client machine:&lt;/strong&gt; Linux x86_64, Node.js 24, &lt;code&gt;pg&lt;/code&gt; driver, IPv4-only home connection in India&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase project:&lt;/strong&gt; Mumbai &lt;code&gt;ap-south-1&lt;/code&gt;, session pooler connection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Neon project:&lt;/strong&gt; Singapore &lt;code&gt;ap-southeast-1&lt;/code&gt;, pooled connection string, fixed 0.25 CU&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Method:&lt;/strong&gt; 1 cold run after 360 s idle, 5 warm connections, 5 hot queries per service; medians reported&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Date:&lt;/strong&gt; 2026-10-06&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>postgres</category>
      <category>database</category>
      <category>webdev</category>
      <category>supabase</category>
    </item>
    <item>
      <title>The Free Tier Graveyard: every dev free tier that died, 2022-2026</title>
      <dc:creator>karthiii13</dc:creator>
      <pubDate>Tue, 06 Oct 2026 16:35:52 +0000</pubDate>
      <link>https://dev.to/karthiii13/the-free-tier-graveyard-every-dev-free-tier-that-died-2022-2026-367a</link>
      <guid>https://dev.to/karthiii13/the-free-tier-graveyard-every-dev-free-tier-that-died-2022-2026-367a</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://freetierwatch-eax.pages.dev/compare/free-tier-graveyard" rel="noopener noreferrer"&gt;FreeTierWatch&lt;/a&gt;, where we hand-verify and track the free tiers of developer services.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every entry below broke thousands of apps and invalidated thousands of tutorials. Each one is verified against the provider's own announcement — linked, dated, no folklore.&lt;/p&gt;

&lt;p&gt;If you build on free tiers, this list is why this site exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  The timeline of deaths
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;What died&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nov 28, 2022&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Heroku&lt;/td&gt;
&lt;td&gt;Free dynos, free Postgres, free Redis — all of it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aug 2023&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Railway&lt;/td&gt;
&lt;td&gt;Recurring free tier → one-time $5 trial credit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Feb 2024&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Koyeb&lt;/td&gt;
&lt;td&gt;$5.50/month free credit → single free instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mar 6, 2024&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PlanetScale&lt;/td&gt;
&lt;td&gt;Hobby plan killed (gone Apr 8, 2024)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Oct 2024&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fly.io&lt;/td&gt;
&lt;td&gt;Free allowances removed for new accounts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jul 8, 2025&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Glitch&lt;/td&gt;
&lt;td&gt;App hosting shut down entirely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sep 4, 2025&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Netlify&lt;/td&gt;
&lt;td&gt;Legacy free tier closed; new accounts get ~15 GB effective bandwidth instead of 100 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  2022: Heroku — the extinction event
&lt;/h2&gt;

&lt;p&gt;The free tier that taught a generation to deploy. For over a decade, &lt;code&gt;git push heroku main&lt;/code&gt; was the first deployment command most developers ever ran.&lt;/p&gt;

&lt;p&gt;Salesforce &lt;a href="https://help.heroku.com/RSBRUH58/removal-of-heroku-free-product-plans-faq" rel="noopener noreferrer"&gt;killed free dynos, free Postgres, and free Redis&lt;/a&gt; on November 28, 2022, citing "fraud and abuse." Free databases on personal accounts were &lt;strong&gt;deleted&lt;/strong&gt;, not just paused. Inactive accounts were deleted too, starting a month earlier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it broke:&lt;/strong&gt; countless student projects, portfolio apps, Discord bots, and the Nightscout diabetes-monitoring community (big enough that Heroku's own FAQ has a dedicated entry for it).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson that everyone learned the hard way:&lt;/strong&gt; "free forever" is a pricing decision, and pricing decisions change with ownership. Heroku's free tier died 12 years in — longevity is not a guarantee.&lt;/p&gt;

&lt;h2&gt;
  
  
  2023: Railway — the quiet conversion
&lt;/h2&gt;

&lt;p&gt;Railway replaced its recurring free tier with a &lt;strong&gt;one-time&lt;/strong&gt; $5 trial credit. Once spent, you pay the $5/month Hobby minimum.&lt;/p&gt;

&lt;p&gt;This one still catches people in 2026 because old tutorials never got updated. Our &lt;a href="https://freetierwatch-eax.pages.dev/free-tiers/railway" rel="noopener noreferrer"&gt;Railway data page&lt;/a&gt; exists largely to answer "wait, I thought Railway was free?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; a trial credit dressed as a free tier is the most common soft-kill. Check whether the "free" is &lt;em&gt;recurring&lt;/em&gt; or &lt;em&gt;one-time&lt;/em&gt; before you build.&lt;/p&gt;

&lt;h2&gt;
  
  
  2024: PlanetScale — profitability, announced plainly
&lt;/h2&gt;

&lt;p&gt;PlanetScale's CEO published &lt;a href="https://planetscale.com/blog/planetscale-forever" rel="noopener noreferrer"&gt;"PlanetScale forever"&lt;/a&gt; in March 2024: the company was prioritizing profitability, laying off sales/marketing, and retiring the Hobby plan — with one month's notice.&lt;/p&gt;

&lt;p&gt;To their credit, it's the most honest free-tier death notice ever written: &lt;em&gt;"We do not need to give away endless amounts of free resources in order to keep growing."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it broke:&lt;/strong&gt; thousands of side projects running on free MySQL, with 33 days to migrate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; VC-funded generosity is a customer-acquisition expense. When the market turns, it's the first line item cut. The most generous tier on the market is often the most fragile.&lt;/p&gt;

&lt;h2&gt;
  
  
  2024: Fly.io — the silent sunset
&lt;/h2&gt;

&lt;p&gt;No dramatic blog post here. Fly.io's famous "3 free shared VMs" simply stopped applying to new organizations around October 2024; new signups are pay-as-you-go with a card required.&lt;/p&gt;

&lt;p&gt;This is the hardest kind of death to catch: &lt;strong&gt;nothing was announced loudly, existing users kept their allowances&lt;/strong&gt;, and thousands of tutorials continue to describe a free tier that new users can't get. Our &lt;a href="https://freetierwatch-eax.pages.dev/free-tiers/fly-io" rel="noopener noreferrer"&gt;Fly.io page&lt;/a&gt; tracks the current reality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; grandfathering hides the change. The free tier a tutorial author used in 2023 may not exist for you today, even though their app still runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  2025: Glitch — total shutdown
&lt;/h2&gt;

&lt;p&gt;Glitch didn't shrink its free tier — &lt;a href="https://blog.glitch.com/post/changes-are-coming-to-glitch" rel="noopener noreferrer"&gt;it stopped hosting apps altogether&lt;/a&gt; on July 8, 2025. Projects, profiles, the in-browser editor as a host: gone. Subdomain redirects run through end of 2026 as a courtesy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it broke:&lt;/strong&gt; a decade of creative web experiments, classroom projects, and the lowest-friction "remix and run" culture the web had.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; sometimes the risk isn't the tier — it's the company. Glitch was beloved and still died. Affection is not a business model.&lt;/p&gt;

&lt;h2&gt;
  
  
  2025: Netlify — the stealth nerf
&lt;/h2&gt;

&lt;p&gt;Netlify didn't kill anything. It just moved all &lt;strong&gt;new&lt;/strong&gt; accounts to a credit-based plan (300 credits/month) where bandwidth costs 20 credits/GB — an effective ceiling around &lt;strong&gt;15 GB/month&lt;/strong&gt;, versus the legacy tier's 100 GB. Existing accounts were grandfathered, so most writeups never noticed.&lt;/p&gt;

&lt;p&gt;Full numbers on our &lt;a href="https://freetierwatch-eax.pages.dev/free-tiers/netlify" rel="noopener noreferrer"&gt;Netlify page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; watch for repricing disguised as "simplification." Credits, units, and tokens usually mean the old number got smaller.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern (and how to predict the next death)
&lt;/h2&gt;

&lt;p&gt;Across all seven deaths, the same warning signs repeat:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ownership change&lt;/strong&gt; — Heroku died under Salesforce. Koyeb just joined Mistral AI; Turso is joining Supabase. Acquisitions reset pricing philosophy. We flag these on our data pages the day we see them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Fraud and abuse" language&lt;/strong&gt; in blog posts — the standard prelude to free-tier removal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profitability pivots&lt;/strong&gt; — layoffs + "sustainable business" posts preceded the PlanetScale kill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A new paid tier appears just below the free tier's capability&lt;/strong&gt; — the free tier is now cannibalizing revenue; its days are numbered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grandfathering begins&lt;/strong&gt; — "existing users keep X" means X is already dead; it just hasn't reached you yet.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  If you're building on a free tier today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Export paths beat free capacity.&lt;/strong&gt; Prefer services where leaving is one &lt;code&gt;pg_dump&lt;/code&gt; away. The Heroku deletion hurt people who had no backup habit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat card-required free tiers as short-term loans.&lt;/strong&gt; When the tier dies, the card is already on file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep your data layer portable&lt;/strong&gt; — standard Postgres/MySQL/SQLite, no proprietary APIs you can't re-implement in a weekend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The boring alternative is immune.&lt;/strong&gt; A ~$5/month VPS running Docker has no free tier to lose. When you outgrow free, that's the upgrade that can't be rug-pulled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every service above has a &lt;a href="https://freetierwatch-eax.pages.dev/free-tiers" rel="noopener noreferrer"&gt;tracked data page&lt;/a&gt; with dated verification. When the next one dies — and the pattern says one will — subscribers hear it first.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>hosting</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
