{"id":28,"date":"2026-07-14T22:39:54","date_gmt":"2026-07-14T22:39:54","guid":{"rendered":"https:\/\/www.webdeckpanel.co.uk\/blog\/?p=28"},"modified":"2026-07-14T22:39:54","modified_gmt":"2026-07-14T22:39:54","slug":"webdeck-2-0-7-stable-now-available","status":"publish","type":"post","link":"https:\/\/www.webdeckpanel.co.uk\/blog\/2026\/07\/14\/webdeck-2-0-7-stable-now-available\/","title":{"rendered":"WebDeck 2.0.7 Stable \u2013 Now Available!"},"content":{"rendered":"\n<!-- WebDeck 2.0.2 \u2192 2.0.7 blog post. Paste into a WordPress Custom HTML block. -->\n\n<h2>WebDeck 2.0.2 \u2192 2.0.7: what&#8217;s changed, and why<\/h2>\n\n<p>It&#8217;s been a few releases since we last did a proper round-up, so here&#8217;s everything that&#8217;s\nlanded in WebDeck since 2.0.2 \u2014 what we built, what we fixed, and the reasoning behind each one.<\/p>\n\n<h3>2.0.2 \u2014 Free and Pro, properly<\/h3>\n<p>This is where the licensing model settled. <strong>Free<\/strong> gives you 2 hosting accounts\nand 4 websites with <em>every<\/em> feature included \u2014 no crippled tier, no features locked behind\na paywall on the free plan. <strong>Pro<\/strong> (\u00a312\/month per server) unlocks unlimited accounts\nand websites, plus reseller accounts, with a 14-day trial and no card required.<\/p>\n<p>The rule the whole model is built around: <strong>a licence should never take a customer&#8217;s\nwebsite offline.<\/strong> If a trial ends or a subscription lapses, nothing is suspended or\ndeleted \u2014 every website keeps serving, every mailbox keeps receiving. You simply can&#8217;t create\n<em>new<\/em> accounts until you&#8217;re back under the Free limits or upgrade.<\/p>\n\n<h3>2.0.3 \u2014 A security review, taken seriously<\/h3>\n<p>Following a community review, we went through the 2.0.x codebase and verified every claim\nagainst the real code \u2014 not the description of the bug, the actual code path. Five issues were\nconfirmed and fixed:<\/p>\n<ul>\n  <li>Every server now generates its <strong>own unique SSL private key<\/strong>, locally, never shared<\/li>\n  <li>Panel updates are <strong>cryptographically signed<\/strong>, and unsigned updates are refused<\/li>\n  <li>Stored database passwords use <strong>proper authenticated encryption<\/strong><\/li>\n  <li>Network and licence errors are <strong>logged with their real cause<\/strong>, not swallowed silently<\/li>\n  <li>Each install generates its own <strong>strong, unique signing key<\/strong> on first boot<\/li>\n<\/ul>\n<p><strong>Why it matters:<\/strong> a control panel sits at the centre of your server&#8217;s security.\nOutside scrutiny is useful, not something to be defensive about \u2014 we&#8217;d rather someone find a real\nissue and tell us than not find it at all.<\/p>\n\n<h3>2.0.4 \u2014 Fixing the update system itself<\/h3>\n<p>This one&#8217;s important: we found and fixed a bug where <strong>signed updates could fail to\napply without any visible error<\/strong> \u2014 the panel would check for an update, find one, and\nsilently do nothing. The root cause was in how the update signature was carried through the check;\nit&#8217;s fixed now, and update failures are logged and shown in the panel instead of disappearing.<\/p>\n<p>Also in this release:<\/p>\n<ul>\n  <li><strong>phpMyAdmin single sign-on<\/strong> \u2014 opening it from the panel logs you straight in<\/li>\n  <li>Database password encryption now <strong>survives panel restarts and updates<\/strong><\/li>\n  <li>Missing dependencies are <strong>repaired automatically<\/strong> on boot<\/li>\n  <li>Database passwords no longer appear in the server&#8217;s process list<\/li>\n<\/ul>\n<p><strong>Why it matters:<\/strong> an update button you can&#8217;t trust is worse than no update\nbutton. This makes sure that when you click it, something actually happens \u2014 and if it doesn&#8217;t,\nyou&#8217;re told why.<\/p>\n\n<h3>2.0.5 \u2014 Five more apps, 53 in total<\/h3>\n<p>Added <strong>Typecho<\/strong> and <strong>Grav<\/strong> (lightweight CMSs), <strong>YOURLS<\/strong>\n(your own URL shortener), <strong>LinkAce<\/strong> (a self-hosted bookmark manager) and\n<strong>Chamilo<\/strong> (e-learning). Each installs the same way as the rest of the catalogue \u2014\ndatabase created, permissions set, SSL live from the first request.<\/p>\n\n<h3>2.0.6 \u2014 Email notifications, and closing a real security gap<\/h3>\n<p>The headline feature: <strong>email notifications.<\/strong> WebDeck can now tell you when a\nservice goes down (or gets auto-healed), a backup completes or fails, disk space is running low,\nor a security event happens \u2014 with a toggle for each alert. Your customers get the same, scoped\nto their own sites: SSL, backups, suspension, account changes.<\/p>\n<p>Alongside that, two security fixes:<\/p>\n<ul>\n  <li><strong>phpMyAdmin sign-on hardened<\/strong> \u2014 the panel session token no longer travels in\n  the URL when opening phpMyAdmin. It now uses a single-use, 30-second ticket instead.<\/li>\n  <li><strong>Stronger two-factor authentication<\/strong> \u2014 reused codes are now rejected, and\n  turning 2FA on requires your password, so a stolen session alone can&#8217;t add an authenticator.<\/li>\n<\/ul>\n<p><strong>Why it matters:<\/strong> notifications mean you find out about a problem before a\ncustomer emails you about it. The security fixes close a real gap \u2014 session tokens simply\nshouldn&#8217;t end up in a URL, however convenient it is in the short term.<\/p>\n\n<h3>2.0.7 \u2014 A notification bell, and a mobile fix<\/h3>\n<p>Two things, both requested by people actually using the panel day to day:<\/p>\n<ul>\n  <li><strong>Notification bell<\/strong> \u2014 the same alerts as email, but right there in the panel\n  header, on desktop and mobile, with an unread count. It works even if you&#8217;ve never touched the\n  email settings \u2014 it&#8217;s a separate channel, not dependent on it.<\/li>\n  <li><strong>Mobile menu fixed<\/strong> \u2014 the navigation menu couldn&#8217;t be scrolled on a phone;\n  anything below the first few items was unreachable. It scrolls properly now, and the page\n  behind stays still while the menu&#8217;s open.<\/li>\n<\/ul>\n<p><strong>Why it matters:<\/strong> a control panel gets used from a phone more often than you&#8217;d\nthink \u2014 at 2am, fixing something, standing in a server room that isn&#8217;t yours. It should work\nproperly there.<\/p>\n\n<h3>The short version<\/h3>\n<table style=\"border-collapse:collapse;width:100%;margin:20px 0\">\n  <thead>\n    <tr style=\"border-bottom:2px solid #ccc\">\n      <th style=\"text-align:left;padding:8px 12px\">Version<\/th>\n      <th style=\"text-align:left;padding:8px 12px\">Headline<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr style=\"border-bottom:1px solid #e0e0e0\"><td style=\"padding:8px 12px\"><strong>2.0.2<\/strong><\/td><td style=\"padding:8px 12px\">Free and Pro tiers, 14-day trial<\/td><\/tr>\n    <tr style=\"border-bottom:1px solid #e0e0e0\"><td style=\"padding:8px 12px\"><strong>2.0.3<\/strong><\/td><td style=\"padding:8px 12px\">Security review \u2014 five issues verified and fixed<\/td><\/tr>\n    <tr style=\"border-bottom:1px solid #e0e0e0\"><td style=\"padding:8px 12px\"><strong>2.0.4<\/strong><\/td><td style=\"padding:8px 12px\">Fixed the update system itself, phpMyAdmin SSO<\/td><\/tr>\n    <tr style=\"border-bottom:1px solid #e0e0e0\"><td style=\"padding:8px 12px\"><strong>2.0.5<\/strong><\/td><td style=\"padding:8px 12px\">Five more apps \u2014 53 in total<\/td><\/tr>\n    <tr style=\"border-bottom:1px solid #e0e0e0\"><td style=\"padding:8px 12px\"><strong>2.0.6<\/strong><\/td><td style=\"padding:8px 12px\">Email notifications, phpMyAdmin sign-on hardened, stronger 2FA<\/td><\/tr>\n    <tr><td style=\"padding:8px 12px\"><strong>2.0.7<\/strong><\/td><td style=\"padding:8px 12px\">Notification bell, mobile menu fixed<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Full details on every release are on the <a href=\"https:\/\/www.webdeckpanel.co.uk\/releases\">release notes page<\/a>. If you&#8217;re not running WebDeck yet, it&#8217;s free to download and install in a few minutes \u2014 <a href=\"https:\/\/www.webdeckpanel.co.uk\/downloads\">grab it here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WebDeck 2.0.2 \u2192 2.0.7: what&#8217;s changed, and why It&#8217;s been a few releases since we last did a proper round-up, so here&#8217;s everything that&#8217;s landed in WebDeck since 2.0.2 \u2014\u2026<\/p>\n","protected":false},"author":1,"featured_media":23,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-28","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/posts\/28","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=28"}],"version-history":[{"count":1,"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/posts\/28\/revisions"}],"predecessor-version":[{"id":29,"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/posts\/28\/revisions\/29"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/media\/23"}],"wp:attachment":[{"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=28"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=28"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webdeckpanel.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=28"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}