<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://computesphere.com/docs/changelog</id>
    <title>ComputeSphere Docs Blog</title>
    <updated>2026-10-15T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://computesphere.com/docs/changelog"/>
    <subtitle>ComputeSphere Docs Blog</subtitle>
    <icon>https://computesphere.com/docs/https://computesphere.publicusercontent.com/brand-assets/computesphere-favicon.png</icon>
    <entry>
        <title type="html"><![CDATA[Public PostgreSQL hostnames start with the database's name]]></title>
        <id>https://computesphere.com/docs/changelog/postgresql-public-hostnames</id>
        <link href="https://computesphere.com/docs/changelog/postgresql-public-hostnames"/>
        <updated>2026-10-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[When you turn on public access for a database, its hostname now starts with the database's name, for example orders-api-7k2m9q.us-east-1.db.computesphere.com.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-emerald-50 text-emerald-800 ring-emerald-200 dark:bg-emerald-950/40 dark:text-emerald-200 dark:ring-emerald-900/50">Improved</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">API</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">October 15, 2026</time><span class="sr-only"></span></div>
<p>When you turn on public access for a database, its hostname now starts with the database's name, for example <code>orders-api-7k2m9q.us-east-1.db.computesphere.com</code>.</p>
<p>Hostnames are public: they appear in DNS, so don't put anything sensitive in a database's name.</p>
<p>Existing hostnames don't change. See <a href="https://computesphere.com/docs/datastores/postgresql#connect-from-outside-computesphere">PostgreSQL: public endpoint</a>.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="improved" term="improved"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cache 5 GB and Cache 10 GB]]></title>
        <id>https://computesphere.com/docs/changelog/spherecache-5-10gb</id>
        <link href="https://computesphere.com/docs/changelog/spherecache-5-10gb"/>
        <updated>2026-10-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[SphereCache now goes up to Cache 10 GB.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-[#355dee]/10 text-[#2a4ac3] ring-[#355dee]/30 dark:bg-[#355dee]/20 dark:text-[#a9b7f3] dark:ring-[#355dee]/40">New</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Console</span><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">API</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">October 15, 2026</time><span class="sr-only"></span></div>
<p>SphereCache now goes up to Cache 10 GB.</p>
<ul>
<li><strong>Sizes:</strong> Cache 5 GB at $95/month and Cache 10 GB at $189/month join Cache 256 MB, 1 GB and 3 GB. SphereCache now runs from Cache 256 MB at $9/month up to Cache 10 GB at $189/month.</li>
<li><strong>High availability:</strong> both new sizes offer it, at twice the price.</li>
<li>Cache 20, 40 and 50 GB, and a free cache, are coming soon.</li>
</ul>
<p><a href="https://computesphere.com/docs/datastores/valkey">Read the guide →</a></p>
<p>Available in Sweden and US East. Prices for every size are on the <a href="https://computesphere.com/pricing" target="_blank" rel="noopener noreferrer">pricing page</a>.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="new" term="new"/>
        <category label="console" term="console"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[SphereCache (Valkey)]]></title>
        <id>https://computesphere.com/docs/changelog/spherecache</id>
        <link href="https://computesphere.com/docs/changelog/spherecache"/>
        <updated>2026-10-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[You can now add a managed Valkey cache to any environment, next to your services, at a fixed monthly price.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-[#355dee]/10 text-[#2a4ac3] ring-[#355dee]/30 dark:bg-[#355dee]/20 dark:text-[#a9b7f3] dark:ring-[#355dee]/40">New</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Console</span><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">API</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">October 14, 2026</time><span class="sr-only"></span></div>
<p>You can now add a managed Valkey cache to any environment, next to your services, at a fixed monthly price.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="spherecache-valkey">SphereCache: Valkey<a href="https://computesphere.com/docs/changelog/spherecache#spherecache-valkey" class="hash-link" aria-label="Direct link to SphereCache: Valkey" title="Direct link to SphereCache: Valkey">​</a></h2>
<p>It runs Valkey, the open-source in-memory data store from the Linux Foundation. Valkey client libraries and most existing cache clients connect without changes.</p>
<ul>
<li><strong>Sizes:</strong> from Cache 256 MB at $9/month up to Cache 3 GB at $57/month. High availability (a second copy in another zone, with automatic failover) is available on Cache 3 GB, at twice the price. Larger sizes, up to Cache 50 GB, and a free cache are coming soon.</li>
<li><strong>Data on disk:</strong> paid caches write every change to disk at least once a second, so a restart doesn't empty them.</li>
<li><strong>Connections:</strong> over TLS (<code>rediss://</code>), on a private address that only services in the same environment can reach.</li>
<li><strong>When memory is full:</strong> you choose when you create the cache. Evict the least recently used keys, or refuse writes.</li>
<li><strong>Backups:</strong> every paid cache is backed up daily, and the last 7 copies are kept. To restore one, contact support: we restore it into a new cache.</li>
</ul>
<p><a href="https://computesphere.com/docs/datastores/valkey">Read the guide →</a></p>
<p>Available in Sweden and US East. Prices for every size are on the <a href="https://computesphere.com/pricing" target="_blank" rel="noopener noreferrer">pricing page</a>.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="new" term="new"/>
        <category label="console" term="console"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[SphereQueue (RabbitMQ)]]></title>
        <id>https://computesphere.com/docs/changelog/spherequeue</id>
        <link href="https://computesphere.com/docs/changelog/spherequeue"/>
        <updated>2026-10-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[You can now add a RabbitMQ message broker of your own to any environment, next to your services, at a fixed monthly price.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-[#355dee]/10 text-[#2a4ac3] ring-[#355dee]/30 dark:bg-[#355dee]/20 dark:text-[#a9b7f3] dark:ring-[#355dee]/40">New</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Console</span><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">API</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">October 14, 2026</time><span class="sr-only"></span></div>
<p>You can now add a RabbitMQ message broker of your own to any environment, next to your services, at a fixed monthly price.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="spherequeue-rabbitmq">SphereQueue: RabbitMQ<a href="https://computesphere.com/docs/changelog/spherequeue#spherequeue-rabbitmq" class="hash-link" aria-label="Direct link to SphereQueue: RabbitMQ" title="Direct link to SphereQueue: RabbitMQ">​</a></h2>
<p>A RabbitMQ 4.3 broker of your own, for background jobs, work queues and events between services. Any AMQP client works, Celery included.</p>
<ul>
<li><strong>Sizes:</strong> from Queue 1 (1 vCPU, 2 GB, 20 GB disk) at $49/month to Queue 16. High availability (three copies in three zones, with quorum queues by default) is available on every size, at three times the price.</li>
<li><strong>Connections:</strong> over TLS (<code>amqps://</code>, port 5671), on a private address that only services in the same environment can reach.</li>
<li><strong>Full queues:</strong> each queue holds up to a quarter of the disk. When a queue is full, new messages to it are refused, so the broker's disk never fills.</li>
<li><strong>Backups:</strong> each broker's setup (queues, exchanges, bindings, policies) is backed up daily, and the last 7 copies are kept. Messages aren't backed up. To restore, contact support.</li>
</ul>
<p><a href="https://computesphere.com/docs/datastores/rabbitmq">Read the guide →</a></p>
<p>Available in Sweden and US East. Prices for every size are on the <a href="https://computesphere.com/pricing" target="_blank" rel="noopener noreferrer">pricing page</a>.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="new" term="new"/>
        <category label="console" term="console"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Managed PostgreSQL in Sweden]]></title>
        <id>https://computesphere.com/docs/changelog/postgresql-sweden</id>
        <link href="https://computesphere.com/docs/changelog/postgresql-sweden"/>
        <updated>2026-10-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Create managed PostgreSQL databases in EU (Sweden), eu-north-1. It's open to every account, on every plan from Free to Plus.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-[#355dee]/10 text-[#2a4ac3] ring-[#355dee]/30 dark:bg-[#355dee]/20 dark:text-[#a9b7f3] dark:ring-[#355dee]/40">New</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Console</span><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">API</span><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">CLI</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">October 13, 2026</time><span class="sr-only"></span></div>
<p>Create managed PostgreSQL databases in EU (Sweden), <code>eu-north-1</code>. It's open to every account, on every plan from Free to Plus.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-you-get">What you get<a href="https://computesphere.com/docs/changelog/postgresql-sweden#what-you-get" class="hash-link" aria-label="Direct link to What you get" title="Direct link to What you get">​</a></h2>
<ul>
<li><strong>Every plan.</strong> Free and Flex share CPU. Standard and Plus are dedicated, and Plus has twice the memory per vCPU. <code>csph db instance-types</code> lists each one with its monthly price for your environment's region.</li>
<li><strong>PostgreSQL 16, 17, or 18.</strong> The latest is the default.</li>
<li><strong>High availability from 1 vCPU:</strong> a standby in another zone, with automatic failover.</li>
<li><strong>Backups with point-in-time restore to any moment in the last 7 days.</strong> Backups are stored in the EU.</li>
<li><strong>Private by default.</strong> Services in a Sweden environment reach the database over the environment's private network, and <code>DATABASE_URL</code> is injected for you.</li>
<li><strong>Connect from outside when you choose.</strong> <code>csph db connect</code> and <code>csph db tunnel</code> reach the database from your machine. Turn on the public endpoint for BI tools: only addresses on its allowlist can connect, and TLS is verified.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-started">Get started<a href="https://computesphere.com/docs/changelog/postgresql-sweden#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">csph environment create --name prod --project &lt;project-id&gt; --region eu-north-1</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">csph db instance-types --environment &lt;environment-id&gt;</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">csph db create orders --environment &lt;environment-id&gt; --instance-type "Standard 1"</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>Use csph 0.18.2 or later.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="new" term="new"/>
        <category label="console" term="console"/>
        <category label="api" term="api"/>
        <category label="cli" term="cli"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Build-time variables, pre-deploy commands, and promotion]]></title>
        <id>https://computesphere.com/docs/changelog/build-variables-pre-deploy-promote</id>
        <link href="https://computesphere.com/docs/changelog/build-variables-pre-deploy-promote"/>
        <updated>2026-09-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Choose which variables your build can read, run migrations before a release takes traffic, and ship the exact image you tested in one environment to another without rebuilding it.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-[#355dee]/10 text-[#2a4ac3] ring-[#355dee]/30 dark:bg-[#355dee]/20 dark:text-[#a9b7f3] dark:ring-[#355dee]/40">New</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Console</span><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">API</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">September 30, 2026</time><span class="sr-only"></span></div>
<p>Choose which variables your build can read, run migrations before a release takes traffic, and ship the exact image you tested in one environment to another without rebuilding it.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-runtime-or-both">Build, runtime, or both<a href="https://computesphere.com/docs/changelog/build-variables-pre-deploy-promote#build-runtime-or-both" class="hash-link" aria-label="Direct link to Build, runtime, or both" title="Direct link to Build, runtime, or both">​</a></h2>
<p>Every variable and secret now has a scope: <strong>Build &amp; runtime</strong>, <strong>Runtime only</strong>, or <strong>Build only</strong>. Plain variables default to Build &amp; runtime; secrets default to Runtime only and reach the build only when you opt them in.</p>
<table><thead><tr><th>Build type</th><th>How build-scoped values arrive</th></tr></thead><tbody><tr><td>From source, no Dockerfile</td><td>Environment variables of your build command, any name. Handed over as a build secret, so they aren't written into the image.</td></tr><tr><td>From your Dockerfile</td><td>Plain variables as build args (declare them with <code>ARG</code>); secrets as build secrets at <code>/run/secrets/&lt;KEY&gt;</code> via <code>RUN --mount=type=secret</code>.</td></tr></tbody></table>
<p>The console flags browser-bundle variables (<code>NEXT_PUBLIC_*</code>, <code>VITE_*</code>, and friends) as <em>visible to anyone</em>, warns when a secret is added to the build, and offers <strong>Save &amp; rebuild</strong> when a change only a new build can apply. <a href="https://computesphere.com/docs/deployments/environment#build-runtime-or-both">Read the guide →</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="pre-deploy-commands">Pre-deploy commands<a href="https://computesphere.com/docs/changelog/build-variables-pre-deploy-promote#pre-deploy-commands" class="hash-link" aria-label="Direct link to Pre-deploy commands" title="Direct link to Pre-deploy commands">​</a></h2>
<p>Set <code>pre_deploy_command</code> on a service's build manifest and it runs once per build, in the new image, with the service's variables and secrets and access to its datastores — after the build, before any traffic moves. Exit 0 and the rollout proceeds; anything else fails the build and the current version keeps serving. 30-minute limit, output on the build in the <strong>Builds</strong> tab. <a href="https://computesphere.com/docs/deployments/pre-deploy-commands">Read the guide →</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="promote">Promote<a href="https://computesphere.com/docs/changelog/build-variables-pre-deploy-promote#promote" class="hash-link" aria-label="Direct link to Promote" title="Direct link to Promote">​</a></h2>
<p>Deploy the image running in one environment to another — <code>dev</code> to <code>production</code>, or any pair you use — by digest, with no rebuild. The target keeps its own variables, secrets, and pre-deploy command. If a value baked into the image at build time differs from the target's, the promotion stops and names the variables so you can decide. Available from <strong>Promote to…</strong> in the console and <code>POST /v2/deployments/{id}/promote</code>. <a href="https://computesphere.com/docs/deployments/promote">Read the guide →</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="also">Also<a href="https://computesphere.com/docs/changelog/build-variables-pre-deploy-promote#also" class="hash-link" aria-label="Direct link to Also" title="Direct link to Also">​</a></h2>
<ul>
<li><strong>Cancel build stops the build immediately</strong>, including a running pre-deploy command.</li>
<li><strong>Pushes while auto-deploy is paused</strong> after a rollback now show in the service's activity as <em>"Push to &lt;branch&gt; (&lt;sha&gt;) skipped: auto-deploy is paused"</em> instead of disappearing silently.</li>
</ul>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="new" term="new"/>
        <category label="console" term="console"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Documentation reorganized around tasks]]></title>
        <id>https://computesphere.com/docs/changelog/single-sidebar-docs</id>
        <link href="https://computesphere.com/docs/changelog/single-sidebar-docs"/>
        <updated>2026-05-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[One sidebar, fourteen sections, organized around what you're trying to do — deploy a service, manage data, expose a domain, watch logs. Replaces the previous tab-strip of six sections.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-emerald-50 text-emerald-800 ring-emerald-200 dark:bg-emerald-950/40 dark:text-emerald-200 dark:ring-emerald-900/50">Improved</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Docs</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">May 29, 2026</time><span class="sr-only"></span></div>
<p>One sidebar, fourteen sections, organized around what you're trying to do — deploy a service, manage data, expose a domain, watch logs. Replaces the previous tab-strip of six sections.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-changed">What changed<a href="https://computesphere.com/docs/changelog/single-sidebar-docs#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed">​</a></h2>
<p>The docs site used to split navigation across six top-level tabs (Getting Started, Features, Console, Platform, Support, References). You'd jump between sidebars depending on which tab you landed on, and a single feature could appear in two places with subtly different content.</p>
<p>Now there's one sidebar that travels with you everywhere on <a href="https://computesphere.com/docs/getting-started" target="_blank" rel="noopener noreferrer">computesphere.com/docs</a>. Top-level sections track the customer journey:</p>
<ul>
<li><strong>Introduction</strong> — welcome, quickstart, concepts, API keys</li>
<li><strong>Deployments</strong> — full lifecycle, environments, health checks</li>
<li><strong>Datastores</strong> — Postgres, Valkey, MySQL, RabbitMQ</li>
<li><strong>Storage</strong> — persistent disks, SphereStor, SphereFiles</li>
<li><strong>Networking, Scaling, Observability, Integrations</strong> — task-grouped</li>
<li><strong>Console, CLI, Platform, API errors, Support</strong> — reference</li>
</ul>
<p>URLs didn't change. Bookmarks and AI-agent links keep working.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters">Why this matters<a href="https://computesphere.com/docs/changelog/single-sidebar-docs#why-this-matters" class="hash-link" aria-label="Direct link to Why this matters" title="Direct link to Why this matters">​</a></h2>
<p>Premium dev-tool docs (Render, Vercel, Linear) all use a single task-first sidebar. We've followed suit. Skimming for "how do I add a custom domain?" should not require knowing which tab the author filed it under.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="improved" term="improved"/>
        <category label="docs" term="docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Every API error has a docs page]]></title>
        <id>https://computesphere.com/docs/changelog/api-errors-catalog</id>
        <link href="https://computesphere.com/docs/changelog/api-errors-catalog"/>
        <updated>2026-05-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Every error returned by the ComputeSphere API now ships with a stable code and a direct link to its catalog entry — paste the URL into Claude, Cursor, or ChatGPT and they have full context for debugging.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-[#355dee]/10 text-[#2a4ac3] ring-[#355dee]/30 dark:bg-[#355dee]/20 dark:text-[#a9b7f3] dark:ring-[#355dee]/40">New</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">API</span><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Docs</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">May 22, 2026</time><span class="sr-only"></span></div>
<p>Every error returned by the ComputeSphere API now ships with a stable code and a direct link to its catalog entry — paste the URL into Claude, Cursor, or ChatGPT and they have full context for debugging.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-envelope">The envelope<a href="https://computesphere.com/docs/changelog/api-errors-catalog#the-envelope" class="hash-link" aria-label="Direct link to The envelope" title="Direct link to The envelope">​</a></h2>
<p>Every error response carries the same shape:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">{</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  "type":   "https://docs.computesphere.com/errors/trial_expired",</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  "code":   "trial_expired",</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  "title":  "Trial period ended",</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  "status": 402,</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  "detail": "Your 14-day trial has ended and no active subscription is on file.",</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  "request_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">}</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>Switch on <code>code</code> in your client — <code>title</code> and <code>detail</code> may evolve as we improve copy, <code>code</code> will not.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-catalog">The catalog<a href="https://computesphere.com/docs/changelog/api-errors-catalog#the-catalog" class="hash-link" aria-label="Direct link to The catalog" title="Direct link to The catalog">​</a></h2>
<p>The full catalog lives at <strong><a href="https://computesphere.com/docs/errors"><code>/errors</code></a></strong>. Each entry includes plain-English explanation, action-led fix steps, retry guidance, and code samples in TypeScript, Python, Go, and curl.</p>
<p>You can jump straight to any error page by appending the code: <code>https://docs.computesphere.com/errors/&lt;CODE&gt;</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters">Why this matters<a href="https://computesphere.com/docs/changelog/api-errors-catalog#why-this-matters" class="hash-link" aria-label="Direct link to Why this matters" title="Direct link to Why this matters">​</a></h2>
<p>When something fails at 2 AM, the difference between "an opaque HTTP 500" and "a page that names the cause and shows the fix" is the difference between staying online and waiting on support.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="new" term="new"/>
        <category label="api" term="api"/>
        <category label="docs" term="docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Verify your email before creating projects]]></title>
        <id>https://computesphere.com/docs/changelog/email-verification</id>
        <link href="https://computesphere.com/docs/changelog/email-verification"/>
        <updated>2026-05-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[New signups must verify their email address before creating their first project. Existing accounts are unaffected.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-[#355dee]/10 text-[#2a4ac3] ring-[#355dee]/30 dark:bg-[#355dee]/20 dark:text-[#a9b7f3] dark:ring-[#355dee]/40">New</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Console</span><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">API</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">May 8, 2026</time><span class="sr-only"></span></div>
<p>New signups must verify their email address before creating their first project. Existing accounts are unaffected.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-changed">What changed<a href="https://computesphere.com/docs/changelog/email-verification#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed">​</a></h2>
<p>After signing up, you'll see a banner in the Console with a "Resend verification email" button. Clicking the verification link in your inbox unlocks the rest of the account immediately — across every open tab. You can still explore the Console while verification is pending; project and service creation just waits for the link.</p>
<p>If you call the API before verifying, you'll get a clear <code>email_verification_required</code> error (HTTP 409) with a link to <a href="https://computesphere.com/docs/errors/EMAIL_VERIFICATION_REQUIRED">the docs</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters">Why this matters<a href="https://computesphere.com/docs/changelog/email-verification#why-this-matters" class="hash-link" aria-label="Direct link to Why this matters" title="Direct link to Why this matters">​</a></h2>
<p>Cuts down on signup spam and accidental typos in email addresses — and means support tickets reach the right inbox the first time.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="new" term="new"/>
        <category label="console" term="console"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[14-day free trial on every paid plan]]></title>
        <id>https://computesphere.com/docs/changelog/trial-and-billing</id>
        <link href="https://computesphere.com/docs/changelog/trial-and-billing"/>
        <updated>2026-04-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Every paid plan now starts with a 14-day free trial. Add a card at signup, run your services on us for two weeks, first charge fires on day 15. Cancel anytime in the Console — no charge if you cancel before the trial ends.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-[#355dee]/10 text-[#2a4ac3] ring-[#355dee]/30 dark:bg-[#355dee]/20 dark:text-[#a9b7f3] dark:ring-[#355dee]/40">New</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Console</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">April 30, 2026</time><span class="sr-only"></span></div>
<p>Every paid plan now starts with a 14-day free trial. Add a card at signup, run your services on us for two weeks, first charge fires on day 15. Cancel anytime in the Console — no charge if you cancel before the trial ends.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://computesphere.com/docs/changelog/trial-and-billing#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>14-day free trial</strong> on Hobby ($15/mo), Pro ($29/mo), and Team ($79/mo)</li>
<li><strong>Two Flex spherelets bundled</strong> into the trial — enough to run a small app, a worker, or both</li>
<li><strong>Annual billing</strong> option saves two months — $150/yr, $290/yr, $790/yr respectively</li>
<li><strong>Cancel from the Console</strong> at any time — no chat, no email loop</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters">Why this matters<a href="https://computesphere.com/docs/changelog/trial-and-billing#why-this-matters" class="hash-link" aria-label="Direct link to Why this matters" title="Direct link to Why this matters">​</a></h2>
<p>Trials should feel like trials, not gauntlets. Two weeks is enough to ship a real thing, send it to a teammate, and decide whether to keep going.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="new" term="new"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API v2 — stable endpoints and a published OpenAPI spec]]></title>
        <id>https://computesphere.com/docs/changelog/api-v2</id>
        <link href="https://computesphere.com/docs/changelog/api-v2"/>
        <updated>2026-04-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The new v2 API is live at api.computesphere.com/v2. Predictable response envelope, stable error codes, and a published OpenAPI spec that's the source of truth for every client we ship.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-[#355dee]/10 text-[#2a4ac3] ring-[#355dee]/30 dark:bg-[#355dee]/20 dark:text-[#a9b7f3] dark:ring-[#355dee]/40">New</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">API</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">April 15, 2026</time><span class="sr-only"></span></div>
<p>The new <code>v2</code> API is live at <a href="https://api.computesphere.com/v2" target="_blank" rel="noopener noreferrer"><code>api.computesphere.com/v2</code></a>. Predictable response envelope, stable error codes, and a published OpenAPI spec that's the source of truth for every client we ship.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's new<a href="https://computesphere.com/docs/changelog/api-v2#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>Consistent response envelope</strong> for every endpoint: <code>{object, items|fields, pagination}</code> for lists, <code>{object, …fields}</code> for single resources</li>
<li><strong>Stable error shape</strong> — every failure ships a code from the <a href="https://computesphere.com/docs/errors">error catalog</a> (see the <a href="https://computesphere.com/docs/changelog/api-errors-catalog">errors changelog entry</a> for the envelope)</li>
<li><strong>OpenAPI spec</strong> at <a href="https://computesphere.com/docs/api-reference"><code>/api-reference</code></a> — browse interactively or download the YAML for your own tooling</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="migrating-from-v1">Migrating from v1<a href="https://computesphere.com/docs/changelog/api-v2#migrating-from-v1" class="hash-link" aria-label="Direct link to Migrating from v1" title="Direct link to Migrating from v1">​</a></h2>
<p>The legacy <code>v1</code> API stays online — no deadline, no surprise removal. New endpoints land on <code>v2</code> first; a migration guide is on the way.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters">Why this matters<a href="https://computesphere.com/docs/changelog/api-v2#why-this-matters" class="hash-link" aria-label="Direct link to Why this matters" title="Direct link to Why this matters">​</a></h2>
<p><code>v1</code> grew with us — each endpoint shipped its own envelope, error shape, and pagination dialect. <code>v2</code> is the version we should have shipped first: one envelope, one error shape, no surprises.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="new" term="new"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New quickstart — three CLI commands to a live service]]></title>
        <id>https://computesphere.com/docs/changelog/quickstart-three-step-cli</id>
        <link href="https://computesphere.com/docs/changelog/quickstart-three-step-cli"/>
        <updated>2026-04-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Quickstart is rebuilt around three CLI commands. From csph init to a live service URL on computesphere.app in about a minute, with one-click "Add to Claude" and "Add to Cursor" handoffs for the agent-driven flow.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-emerald-50 text-emerald-800 ring-emerald-200 dark:bg-emerald-950/40 dark:text-emerald-200 dark:ring-emerald-900/50">Improved</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">CLI</span><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Docs</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">April 8, 2026</time><span class="sr-only"></span></div>
<p>The <a href="https://computesphere.com/docs/getting-started/quickstart" target="_blank" rel="noopener noreferrer">Quickstart</a> is rebuilt around three CLI commands. From <code>csph init</code> to a live service URL on <code>computesphere.app</code> in about a minute, with one-click "Add to Claude" and "Add to Cursor" handoffs for the agent-driven flow.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-flow">The flow<a href="https://computesphere.com/docs/changelog/quickstart-three-step-cli#the-flow" class="hash-link" aria-label="Direct link to The flow" title="Direct link to The flow">​</a></h2>
<ol>
<li><strong><code>csph init</code></strong> — scaffold a new service in the current directory</li>
<li><strong><code>csph deploy</code></strong> — push the code, build the image, run the service</li>
<li><strong><code>csph open</code></strong> — open the live URL in your browser</li>
</ol>
<p>That's it. The page also has an Agent Toolbelt at the top — copy the docs into an AI coding tool with one click so it has full context.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters">Why this matters<a href="https://computesphere.com/docs/changelog/quickstart-three-step-cli#why-this-matters" class="hash-link" aria-label="Direct link to Why this matters" title="Direct link to Why this matters">​</a></h2>
<p>The first impression of a platform is the time between "I want to try this" and "this thing is running." Sixty seconds. Three commands. Two clicks for the agent path.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="improved" term="improved"/>
        <category label="cli" term="cli"/>
        <category label="docs" term="docs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Account changes sync across every open tab]]></title>
        <id>https://computesphere.com/docs/changelog/cross-tab-account-sync</id>
        <link href="https://computesphere.com/docs/changelog/cross-tab-account-sync"/>
        <updated>2026-03-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Verify your email in one tab and the other six update instantly. Switch accounts in one tab and the rest follow. No more stale states, no more "log out and back in to refresh."]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-emerald-50 text-emerald-800 ring-emerald-200 dark:bg-emerald-950/40 dark:text-emerald-200 dark:ring-emerald-900/50">Improved</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Console</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">March 5, 2026</time><span class="sr-only"></span></div>
<p>Verify your email in one tab and the other six update instantly. Switch accounts in one tab and the rest follow. No more stale states, no more "log out and back in to refresh."</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-youll-notice">What you'll notice<a href="https://computesphere.com/docs/changelog/cross-tab-account-sync#what-youll-notice" class="hash-link" aria-label="Direct link to What you'll notice" title="Direct link to What you'll notice">​</a></h2>
<ul>
<li><strong>Email verification</strong> unlocks the Console across every open tab the moment the link is clicked</li>
<li><strong>Account switching</strong> propagates immediately — every tab shows the new account's resources, billing, and team</li>
<li><strong>Plan upgrades</strong> reflect across tabs without a refresh</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters">Why this matters<a href="https://computesphere.com/docs/changelog/cross-tab-account-sync#why-this-matters" class="hash-link" aria-label="Direct link to Why this matters" title="Direct link to Why this matters">​</a></h2>
<p>Most people working with cloud infrastructure have at least three tabs open at any moment — Services, Logs, Billing. Drifting states between them was a constant low-grade annoyance. Now they all agree on what's true.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="improved" term="improved"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Better empty states across the Console]]></title>
        <id>https://computesphere.com/docs/changelog/console-empty-states</id>
        <link href="https://computesphere.com/docs/changelog/console-empty-states"/>
        <updated>2026-02-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Every empty page in the Console — no services yet, no alerts, no logs — now opens with a clear next step instead of a blank screen.]]></summary>
        <content type="html"><![CDATA[<div class="not-prose mb-3 flex flex-wrap items-center gap-2 text-xs"><span class="not-prose inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium uppercase tracking-[0.08em] ring-1 ring-inset bg-emerald-50 text-emerald-800 ring-emerald-200 dark:bg-emerald-950/40 dark:text-emerald-200 dark:ring-emerald-900/50">Improved</span><span class="not-prose inline-flex flex-wrap items-center gap-1.5"><span class="inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-medium text-slate-600 bg-slate-100 ring-1 ring-inset ring-slate-200 dark:bg-slate-900/60 dark:text-slate-300 dark:ring-slate-700">Console</span></span><span class="text-slate-300 dark:text-slate-700" aria-hidden="true">·</span><time class="font-medium text-slate-600 dark:text-slate-400">February 12, 2026</time><span class="sr-only"></span></div>
<p>Every empty page in the Console — no services yet, no alerts, no logs — now opens with a clear next step instead of a blank screen.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-changed">What changed<a href="https://computesphere.com/docs/changelog/console-empty-states#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed">​</a></h2>
<p>We swept the Console for every "you don't have any X yet" state and gave each one:</p>
<ul>
<li><strong>A short, specific line</strong> about what this surface is for</li>
<li><strong>A primary action</strong> to take the next step right now</li>
<li><strong>Eventual-consistency aware copy</strong> on log and metric panels — "No logs yet — this can take up to a minute" instead of a misleading dead zone</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters">Why this matters<a href="https://computesphere.com/docs/changelog/console-empty-states#why-this-matters" class="hash-link" aria-label="Direct link to Why this matters" title="Direct link to Why this matters">​</a></h2>
<p>Empty states are the most underrated page on any product. They're the first thing a new account sees, and the only thing an account with zero data ever sees. Making them earn their slot beats every other onboarding tweak combined.</p>]]></content>
        <author>
            <name>Peter Ekhator</name>
            <uri>https://github.com/peterekhator</uri>
        </author>
        <category label="improved" term="improved"/>
        <category label="console" term="console"/>
    </entry>
</feed>