<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>The RespireCloud blog</title>
    <link>https://respirecloud.com/blog/</link>
    <description>Product news, engineering notes, security and migration guides from the team that builds RespireCloud.</description>
    <language>en</language>
    <lastBuildDate>Tue, 20 Oct 2026 09:00:00 GMT</lastBuildDate>
    <atom:link href="https://respirecloud.com/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Our security posture: what is built, audited and still open</title>
      <link>https://respirecloud.com/blog/our-security-posture/</link>
      <guid isPermaLink="true">https://respirecloud.com/blog/our-security-posture/</guid>
      <pubDate>Tue, 20 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>RespireCloud Team</dc:creator>
      <category>Security</category>
      <category>Security</category>
      <category>Audits</category>
      <category>Passkeys</category>
      <description>How RespireCloud limits what a bug can do, what two audits found, how releases are signed and the gaps we know about. Written plainly, with sources.</description>
      <content:encoded><![CDATA[<p>Security claims are cheap, so this post sticks to what you can check. It summarises the <a href="https://respirecloud.com/security/">security page</a> and the <a href="https://respirecloud.com/docs/security-model/">security model</a>, which hold the detail.</p>
<h2 id="least-power-for-the-part-facing-the-internet">Least power for the part facing the internet</h2>
<p>The web panel runs as an unprivileged user. It cannot run commands. Anything that needs root goes to a separate agent that accepts typed, allow listed operations, validates their parameters and runs programs as argument lists. There is no shell string to escape from, and an operation the agent does not know is refused.</p>
<h2 id="sessions-and-approvals">Sessions and approvals</h2>
<p>Sign in with passkeys, a password with a second factor or both. Actions with high or critical risk need a fresh passkey or code at the moment you run them, so a stolen session alone cannot do the damage. A browser kept signed in with a PIN is proven by a key that cannot leave it, together with a cookie that changes at every visit, so a stolen cookie gets nothing. You can end any signed in device from your Security page.</p>
<p>Every firewall change arms a rollback timer. If you do not confirm it, the previous rules come back, so a bad rule cannot lock you out.</p>
<h2 id="a-log-that-shows-tampering">A log that shows tampering</h2>
<p>Changes are written to an audit log in which each entry includes a hash of the one before. Signed checkpoints can be copied off the server. Verifying the chain is an action of its own, and a break is reported as an incident.</p>
<h2 id="updates-you-can-trust">Updates you can trust</h2>
<p>Releases and Store add-ons are signed. The key is built into the program, and the root agent checks a release again before it runs. An older release is not accepted as an update. A release that does not start is replaced by the previous one together with a copy of the database. The installer verifies the release manifest&#39;s signature, size and checksum before it installs anything.</p>
<h2 id="what-was-audited">What was audited</h2>
<p>Four white box reviews on 10 and 11 October produced 15 findings. A security and code audit on 19 October found 15 more, three of them high. A second audit on 20 October, of everything built after the first, found 13, three of them high. None was critical. All are fixed, and the <a href="https://respirecloud.com/blog/how-we-tested-respirecloud/">testing post</a> has the counts by severity.</p>
<h2 id="what-is-still-open">What is still open</h2>
<ul>
<li>The signed release manifest has no expiry date yet, so someone who can block updates could keep an installation on an older release unnoticed.</li>
<li>Package repository keys that the installer adds are not yet pinned by fingerprint.</li>
<li>An independent external penetration test has not started.</li>
</ul>
<p>We would rather you read this list here than learn it later. To tell us about a problem, email <a href="mailto:info@respiresoft.com">info@respiresoft.com</a> with the subject RespireCloud security report.</p>
<h2 id="your-data-stays-yours">Your data stays yours</h2>
<p>RespireCloud is software you install. This website sets no cookies of its own besides an optional partner code, and runs no analytics. Backups are standard restic repositories that go where you choose, and a <a href="https://respirecloud.com/features/recovery/">lab run</a> rebuilt a whole server on a blank node in 312 seconds from backup, with a list of what does not come back.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How we tested RespireCloud before launch</title>
      <link>https://respirecloud.com/blog/how-we-tested-respirecloud/</link>
      <guid isPermaLink="true">https://respirecloud.com/blog/how-we-tested-respirecloud/</guid>
      <pubDate>Mon, 19 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>RespireCloud Team</dc:creator>
      <category>Engineering</category>
      <category>Testing</category>
      <category>Quality</category>
      <category>Security</category>
      <description>Live checks on real servers, two security audits and a list of gaps we publish. The numbers behind RespireCloud's testing, and what is still untested.</description>
      <content:encoded><![CDATA[<p>Most software announcements say &quot;thoroughly tested&quot; and stop. We would rather show the numbers, including the ones that do not look good. RespireCloud has a generated test checklist that lists every action, and what it says today is below.</p>
<h2 id="what-the-checklist-counts">What the checklist counts</h2>
<p>RespireCloud is built from modules, and every module declares its actions in a manifest. A script reads the manifests, the panel routes, the command line and the test files, and writes one row per action. For each row it records two things. A unit test exists or not. And the newest live result: a real call on a real server, recorded as PASS or FAIL with the date, the server and the release.</p>
<p>Nobody edits the file by hand. If it says something, a test file or a result file says it first.</p>
<h2 id="the-numbers">The numbers</h2>
<p>As of this post the checklist has 1393 actions, of which 906 change something.</p>
<div class="table-wrap"><table>
<thead>
<tr>
<th>Measure</th>
<th align="right">Count</th>
</tr>
</thead>
<tbody><tr>
<td>Actions in all modules</td>
<td align="right">1393</td>
</tr>
<tr>
<td>Actions with a unit test</td>
<td align="right">383</td>
</tr>
<tr>
<td>Newest live result is PASS</td>
<td align="right">856</td>
</tr>
<tr>
<td>Newest live result is FAIL</td>
<td align="right">6</td>
</tr>
<tr>
<td>Mutating actions with no test at all</td>
<td align="right">303</td>
</tr>
</tbody></table></div>
<p>The 856 passing results were recorded on real test servers, not on mock objects. Dry run and chained runs are marked as such in the results, so a plan is never counted as a full run.</p>
<h2 id="what-the-live-runs-found">What the live runs found</h2>
<p>Running real calls finds bugs that unit tests miss. In the last weeks, live runs found and fixed problems in the cloud server drivers, among them a request limit that was too small for the start up data a server needs. The bug list has 11 open entries, one of medium severity. We fix them in order, and the list is not hidden.</p>
<h2 id="audits">Audits</h2>
<p>We ran two security and code audits in October. The first, on 19 October, found 15 findings: 3 high, 5 medium, 5 low and 2 informational. The second, on 20 October, covered everything built after the first and found 13: 3 high, 4 medium, 4 low and 2 informational. None was critical, and every finding is fixed. Four white box reviews on 10 and 11 October had earlier produced 15 findings, also fixed, each with a test.</p>
<p>The <a href="https://respirecloud.com/security/">security page</a> has the current state and the two findings we have not closed.</p>
<h2 id="what-we-have-not-done">What we have not done</h2>
<ul>
<li><strong>303 untested mutating actions.</strong> They are listed. Many are rare or administrative, but they are gaps.</li>
<li><strong>An external penetration test.</strong> It has not started. For a hosting panel we think an independent test is necessary, and we will say when it happens.</li>
<li><strong>Customer backups.</strong> The importers have run on archives we built, not on production backups from customers.</li>
</ul>
<h2 id="why-publish-this">Why publish this</h2>
<p>A table with gaps in it is more useful than a claim without one. If you are deciding whether to trust a panel with your servers, you can read what has been run and what has not. Read more about the design in <a href="https://respirecloud.com/docs/security-model/">the security model</a>, or see the <a href="https://respirecloud.com/performance/">performance numbers</a> from our load test.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Moving from cPanel without downtime</title>
      <link>https://respirecloud.com/blog/moving-from-cpanel-without-downtime/</link>
      <guid isPermaLink="true">https://respirecloud.com/blog/moving-from-cpanel-without-downtime/</guid>
      <pubDate>Thu, 15 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>RespireCloud Team</dc:creator>
      <category>Migration</category>
      <category>Migration</category>
      <category>cPanel</category>
      <category>DNS</category>
      <description>A careful way to move hosting accounts from cPanel to RespireCloud: a second server, a dry run, a rollback and a DNS switch that keeps mail flowing.</description>
      <content:encoded><![CDATA[<p>&quot;Without downtime&quot; is a promise about the order of steps, not about luck. If the old server keeps serving until the new one is proven, then visitors never see an outage. This post is the outline of that order. The <a href="https://respirecloud.com/guides/move-from-cpanel/">full guide</a> has every step, and the <a href="https://respirecloud.com/cpanel-alternative/">cPanel alternative page</a> says how the two compare.</p>
<h2 id="start-with-a-second-server">Start with a second server</h2>
<p>Do not install RespireCloud on the cPanel server. The installer looks for another panel and for web, database, mail or DNS servers that someone set up by hand, and it stops when it finds them. A new server of a <a href="https://respirecloud.com/docs/install/">supported system</a> costs a few days of rent, and it is what lets you test first while the old one carries on.</p>
<h2 id="lower-the-time-to-live-ahead-of-time">Lower the time to live ahead of time</h2>
<p>The time to live (TTL) of a DNS record is how long other networks keep an answer. If it is a day, a change takes up to a day to reach everyone. A few days before the move, lower the TTL on the records you will change to a few minutes, then wait at least as long as the old value. On the day, the switch spreads in minutes, and a bad switch can be undone just as fast.</p>
<h2 id="back-up-one-account-and-import-it">Back up one account and import it</h2>
<p>Use cPanel&#39;s own backup script to create an archive of the smallest account you have. RespireCloud&#39;s importer reads it and does three things before changing anything. It checks the archive. It reports what converts and what does not. Then it builds the account in a dry run, so you see the plan.</p>
<p>Only when you say so does it commit. If something is wrong, the rollback removes everything the import created. Read more on the <a href="https://respirecloud.com/features/migrations/">migrations feature page</a>.</p>
<h2 id="test-on-the-new-server-before-dns-points-at-it">Test on the new server before DNS points at it</h2>
<p>Check the site on the new server by editing your own hosts file, send a test mail, open the databases and look at the cron lines the report listed. Mailbox owners will need a new password. Add a backup target and restore one file from it before you rely on it.</p>
<h2 id="switch-then-watch">Switch, then watch</h2>
<p>Change the records. While the short TTL runs out, some visitors reach the old server and some the new one, so keep both online. Mail that lands on the old server in that window can be fetched from it afterwards. When traffic on the old server is gone, keep it a little longer, then retire it.</p>
<h2 id="an-honest-note">An honest note</h2>
<p>RespireCloud is in early access. The importers for cPanel and Plesk have run end to end on archives we built to match each format, not on a customer&#39;s production backup. Treat the first move as a rehearsal: a small account, a copy, and the old server untouched.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Why we built a new control panel</title>
      <link>https://respirecloud.com/blog/why-we-built-a-new-control-panel/</link>
      <guid isPermaLink="true">https://respirecloud.com/blog/why-we-built-a-new-control-panel/</guid>
      <pubDate>Mon, 12 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>RespireCloud Team</dc:creator>
      <category>Product</category>
      <category>Control panel</category>
      <category>Design</category>
      <category>Security</category>
      <description>The reasons behind RespireCloud: previewed changes, a web panel with no root power, open tools underneath and a flat price per server.</description>
      <content:encoded><![CDATA[<p>There are good control panels already. We built another because four things kept bothering us, and none of them is a matter of polish. Each one is a design decision that has to be there from the first line of code.</p>
<h2 id="one-bug-should-not-hand-over-every-site">One bug should not hand over every site</h2>
<p>A hosting panel sits in front of a lot of power: it writes web server configuration, creates system users and reads mail. If the code that answers web requests can also run commands as root, any bug in it can become a takeover of every site on the machine. This has happened to real panels, and it is the first lesson on our <a href="https://respirecloud.com/security/">security page</a>.</p>
<p>So RespireCloud splits the work. The web panel is an unprivileged process. A separate root agent accepts a short list of typed operations and refuses everything else. A request has to name an operation the agent knows, with parameters that pass its schema. There is no place for a shell string to be assembled from user input.</p>
<h2 id="a-change-should-be-something-you-can-read-first">A change should be something you can read first</h2>
<p>Most panels apply a change the moment you press a button. You find out afterwards what it did. In RespireCloud every action can be shown as a plan first: the files it will write, the services it will reload and the risk it carries. You see the difference before it happens.</p>
<p>This is also what makes the <a href="https://respirecloud.com/ai/">assistant</a> safe to use. It does not run commands. It proposes the same plans, and you approve them. High risk actions ask for a fresh passkey or code before they run, and every change is written to an audit log that is chained so tampering shows.</p>
<h2 id="open-tools-underneath">Open tools underneath</h2>
<p>We did not want a panel that you cannot leave. A site is a directory served by nginx. A database is a normal MariaDB or PostgreSQL database. A mailbox is a Maildir. Backups are standard restic repositories. If you stop using RespireCloud, your data is where an experienced administrator would expect it. The <a href="https://respirecloud.com/features/storage/">storage and backups page</a> describes the formats.</p>
<h2 id="a-price-you-can-predict">A price you can predict</h2>
<p>Panels that charge by the number of accounts make growth feel like a penalty, and price rises each year make planning harder. RespireCloud has a free plan for one server, and the paid tiers are one flat price per server. There is no fee per account and no yearly rise. The <a href="https://respirecloud.com/pricing/">pricing page</a> lists the tiers and the add-ons, and what is free on purpose.</p>
<h2 id="from-one-server-to-a-fleet">From one server to a fleet</h2>
<p>The same panel manages a single VPS or many servers. The <a href="https://respirecloud.com/features/cluster/">cluster feature</a> adds roles, load balancers with health checks and moving an account with its mail between servers, and the <a href="https://respirecloud.com/cloud/">cloud servers</a> feature creates servers at several providers from the panel. You do not move to a second tool when you grow.</p>
<h2 id="what-we-are-still-working-on">What we are still working on</h2>
<p>RespireCloud is in early access, and some things are not yet proven in the field. The <a href="https://respirecloud.com/changelog/">changelog</a> shows what changes every week, and the <a href="https://respirecloud.com/features/">status notes on each feature</a> say what is built and what is planned.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Introducing RespireCloud, a server control panel you can read</title>
      <link>https://respirecloud.com/blog/introducing-respirecloud/</link>
      <guid isPermaLink="true">https://respirecloud.com/blog/introducing-respirecloud/</guid>
      <pubDate>Tue, 06 Oct 2026 09:00:00 GMT</pubDate>
      <dc:creator>RespireSoft</dc:creator>
      <category>Announcements</category>
      <category>Launch</category>
      <category>Control panel</category>
      <category>Early access</category>
      <description>RespireCloud is a self hosted control panel for websites, mail, DNS, databases and backups. Here is what it does, what is built and what is still early.</description>
      <content:encoded><![CDATA[<p>RespireCloud is a control panel for the servers you already run, or are about to rent. It manages websites, mail, DNS, SSL certificates, databases, containers, storage and backups from one place, and it is made by <a href="https://respirecloud.com/about/">RespireSoft</a>.</p>
<p>We are announcing it now, in early access, because we would rather be read critically while there is still time to change things. This post says what RespireCloud is, what is built, and what we have not proven yet.</p>
<h2 id="what-it-is">What it is</h2>
<p>You install RespireCloud on a Linux server of your own. It then sets up and looks after the usual hosting stack: nginx and PHP-FPM for sites, Postfix, Dovecot and Rspamd for mail, PowerDNS for DNS, MariaDB, PostgreSQL and Valkey for data, and restic for backups. Every part uses ordinary open tools underneath, so a site is still a folder, a database is still a database and a mailbox is still a Maildir.</p>
<p>The <a href="https://respirecloud.com/features/">feature list</a> has one page per area, each with its status. Nothing is shown as ready that is not.</p>
<h2 id="changes-you-can-see-before-they-happen">Changes you can see before they happen</h2>
<p>The idea that shapes the whole product is that every change is a typed action. The panel can show the same action as a plan first: which files change, which services restart and what could go wrong. You approve the plan, and only then does it run. The same actions are available from the command line and the API, and an assistant can propose them in plain words.</p>
<p>That is why the <a href="https://respirecloud.com/ai/">assistant</a> fits. It turns a request into a plan you approve, and it cannot do anything the panel would not let you do yourself. AI comes with a licence as a monthly allowance, or you can bring your own model key, or use a model on your own server.</p>
<h2 id="built-so-the-web-part-has-little-power">Built so the web part has little power</h2>
<p>Control panels are attractive targets because one bug can reach every site on the server. In RespireCloud the web panel runs as an unprivileged user. Work that needs root goes to a separate agent that accepts only declared, typed operations and runs programs as argument lists, never as shell strings. The <a href="https://respirecloud.com/docs/security-model/">security model</a> explains the design, and we wrote a separate post on <a href="https://respirecloud.com/blog/how-we-tested-respirecloud/">how we tested it</a>.</p>
<h2 id="what-is-not-proven-yet">What is not proven yet</h2>
<p>We would like you to know the gaps before you find them:</p>
<ul>
<li>There is no public download and the production signing keys are not made.</li>
<li>The cPanel and Plesk importers have run end to end on archives we built to match each format, not on a customer&#39;s production backup.</li>
<li>An independent external penetration test has not started.</li>
</ul>
<p>The <a href="https://respirecloud.com/security/">security page</a> and the <a href="https://respirecloud.com/changelog/">changelog</a> keep this list current.</p>
<h2 id="what-it-costs">What it costs</h2>
<p>There is a free plan: one server with the whole base product. Paid tiers are one flat price per server, with no fee per account and no yearly price rise. The <a href="https://respirecloud.com/pricing/">pricing page</a> has the tiers and the add-ons.</p>
<h2 id="what-to-do-next">What to do next</h2>
<p>If you run hosting for yourself, an agency or customers, take the <a href="https://respirecloud.com/tour/">guided tour</a>, then read how it compares with <a href="https://respirecloud.com/compare/cpanel/">cPanel</a>. If you want to try it on a real server, ask for early access and tell us what you run.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
