1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/2a23a0111ec13942-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/637e3c40ca91c7e6-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/6c596dfcddeca1e9-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/723e11e5093b8e80.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="/qb_logo.svg"/><link rel="stylesheet" href="/_next/static/css/ea9137c1a4c46eb8.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/e23fa17f1067f403.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-6afa46b269f8e45e.js"/>
1<script src="/_next/static/chunks/4bd1b696-bad92808725a934a.js" async=""></script>
1<script src="/_next/static/chunks/31255-6984d2bf062b90c7.js" async=""></script>
1<script src="/_next/static/chunks/main-app-6772cbf3a6606acd.js" async=""></script>
1<script src="/_next/static/chunks/52619-f2cabc0d7be67480.js" async=""></script>
1<script src="/_next/static/chunks/15927-36ac3f0d37e73929.js" async=""></script>
1<script src="/_next/static/chunks/96199-0faf705eb3c513e6.js" async=""></script>
1<script src="/_next/static/chunks/76110-09245dc92559070c.js" async=""></script>
1<script src="/_next/static/chunks/95616-a6afabeb6a6b3991.js" async=""></script>
1<script src="/_next/static/chunks/26584-eb7079d2e1668bfe.js" async=""></script>
1<script src="/_next/static/chunks/app/layout-81bd5179b73b1227.js" async=""></script>
1<script src="/_next/static/chunks/f24c8456-530880b0559dd057.js" async=""></script>
1<script src="/_next/static/chunks/59072-3be7456c39dd405b.js" async=""></script>
1<script src="/_next/static/chunks/79323-4cf2a593dd246ba0.js" async=""></script>
1<script src="/_next/static/chunks/22133-7cb0e7a68c7fc473.js" async=""></script>
1<script src="/_next/static/chunks/67589-6d27e2732ca308db.js" async=""></script>
1<script src="/_next/static/chunks/45871-6a2aabb0f2e7f5e1.js" async=""></script>
1<script src="/_next/static/chunks/5912-b9a2a9693b593c73.js" async=""></script>
1<script src="/_next/static/chunks/66824-cc7a50328ca61094.js" async=""></script>
1<script src="/_next/static/chunks/51022-d587611445051e83.js" async=""></script>
1<script src="/_next/static/chunks/app/news/page-c5f3738c390cd62d.js" async=""></script>
1<meta name="next-size-adjust" content=""/><title>News & Announcements - QuickBox Pro</title><meta name="description" content="Stay up to date with the latest QuickBox Pro announcements, feature releases, and important updates."/><meta property="og:title" content="News & Announcements - QuickBox Pro"/><meta property="og:description" content="The latest news, announcements, and release notes from QuickBox Pro."/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="News & Announcements - QuickBox Pro"/><meta name="twitter:description" content="The latest news, announcements, and release notes from QuickBox Pro."/>
1<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script>
1</head><body class="__variable_365cbc __variable_f3ea84 __variable_46451f"><div hidden=""><!--$--><!--/$--></div><main class="min-h-screen bg-[var(--background)] text-[var(--foreground)] relative overflow-x-hidden"><div class="absolute inset-0 overflow-hidden pointer-events-none"><div class="absolute inset-0 bg-[radial-gradient(ellipse_at_40%_20%,rgba(38,174,127,0.08),transparent_60%)]"></div><div class="absolute inset-0 bg-[radial-gradient(ellipse_at_70%_80%,rgba(42,235,203,0.05),transparent_50%)]"></div><div class="absolute inset-0 bg-[linear-gradient(rgba(255,255,255,0.02)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.02)_1px,transparent_1px)] bg-[size:80px_80px]" style="mask-image:radial-gradient(ellipse 80% 40% at 50% 0%, black, transparent)"></div></div><nav class="fixed top-0 left-0 right-0 z-50 transition-all duration-300 bg-transparent" style="transform:translateY(-100px)"><div class="container mx-auto px-6 py-4"><div class="flex items-center justify-between relative"><button class="md:hidden p-2 text-gray-300 hover:text-white transition-colors -ml-2" aria-label="Toggle menu"><svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path></svg></button><div class="flex items-center flex-1 md:flex-initial justify-center md:justify-start"><a class="flex items-center space-x-3" href="/"><img src="/qb_logo.svg" alt="QuickBox" class="h-10 w-auto"/></a></div><div class="hidden md:flex items-center space-x-8 absolute left-1/2 -translate-x-1/2"><div class="relative"><a class="text-gray-300 hover:text-white transition-colors whitespace-nowrap inline-flex items-center gap-1" href="/#features">Features<svg class="w-3.5 h-3.5 transition-transform duration-200 " fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path></svg></a></div><a class="text-gray-300 hover:text-white transition-colors whitespace-nowrap" href="/#pricing">Pricing</a><a class="text-gray-300 hover:text-white transition-colors whitespace-nowrap" href="/#faq">FAQ</a><a class="text-gray-300 hover:text-white transition-colors whitespace-nowrap" href="/news">News</a><a class="text-gray-300 hover:text-white transition-colors whitespace-nowrap" href="/articles">Articles</a><a target="_blank" class="text-gray-300 hover:text-white transition-colors whitespace-nowrap" href="https://discord.gg/mca7RSv5pa">Discord</a><a class="text-gray-300 hover:text-white transition-colors whitespace-nowrap" href="/docs">Docs</a></div><div class="flex items-center space-x-4 flex-shrink-0"><div class="hidden md:block"><div class="w-10 h-10 rounded-full bg-white/10 animate-pulse"></div></div><div class="md:hidden w-10"></div></div></div></div></nav><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><section class="relative pt-32 pb-24 px-6"><div class="container mx-auto max-w-4xl text-center"><div class="animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-[var(--accent)] mx-auto mb-4"></div><p style="color:var(--muted-fg)">Loading announcements...</p></div></section><!--/$--><footer class="border-t" style="border-color:var(--border);background:color-mix(in srgb, var(--dark-bg) 50%, transparent)"><div class="container mx-auto px-6 py-10"><div class="grid sm:grid-cols-2 lg:grid-cols-5 gap-10 mb-10"><div class="sm:col-span-2 lg:col-span-1"><div class="flex items-center mb-3"><img src="/qb_logo.svg" alt="QuickBox Pro" class="h-7 w-auto"/></div><p class="text-[13px] leading-relaxed mb-4" style="color:var(--muted-fg)">Professional media server management trusted by a growing community worldwide.</p><a href="https://discord.gg/mca7RSv5pa" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 px-3.5 py-1.5 rounded-lg text-[13px] font-medium transition-all duration-200 hover:scale-[1.02]" style="background:#5865F2;color:#fff"><svg class="w-3.5 h-3.5" fill="currentColor" viewBox="0 0 24 24"><path d="M20.317 4.37a19.791 19.791 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.736 19.736 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.107 13.107 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18
11.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.299 12.299 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.839 19.839 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"></path></svg>Join Discord</a></div><div><h4 class="text-[13px] font-semibold mb-3 uppercase tracking-wider" style="color:var(--foreground)">Product</h4><ul class="space-y-2"><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/#features">Features</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/pricing">Pricing</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/roadmap">Roadmap</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/articles">Articles</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/news">News</a></li></ul></div><div><h4 class="text-[13px] font-semibold mb-3 uppercase tracking-wider" style="color:var(--foreground)">Documentation</h4><ul class="space-y-2"><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/docs">Overview</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/docs/getting-started">Getting Started</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/docs/applications">Applications</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/docs/cli-reference">CLI Reference</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/docs/troubleshooting">Troubleshooting</a></li></ul></div><div><h4 class="text-[13px] font-semibold mb-3 uppercase tracking-wider" style="color:var(--foreground)">Support</h4><ul class="space-y-2"><li><a target="_blank" class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="https://discord.gg/mca7RSv5pa">Discord Community</a></li><li><a target="_blank" class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="https://github.com/QuickBox/pro-v3">GitHub</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/docs/support">Support Playbook</a></li></ul></div><div><h4 class="text-[13px] font-semibold mb-3 uppercase tracking-wider" style="color:var(--foreground)">Legal</h4><ul class="space-y-2"><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/privacy">Privacy Policy</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/terms">Terms of Service</a></li><li><a class="text-[13px] transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="/refund-policy">Refund Policy</a></li></ul></div></div><div class="pt-6 border-t flex flex-col md:flex-row justify-between items-center gap-4" style="border-color:var(--border)"><p class="text-[13px]" style="color:var(--muted-fg)">© <!-- -->2026<!-- --> QuickBox Pro. All rights reserved.</p><div class="flex items-center gap-3"><a target="_blank" class="transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="https://discord.gg/mca7RSv5pa"><svg class="w-4.5 h-4.5" fill="currentColor" viewBox="0 0 24 24"><path d="M20.317 4.37a19.791 19.791 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.736 19.736 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.107 13.107 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18
11.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.299 12.299 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.839 19.839 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"></path></svg></a><a target="_blank" class="transition-colors hover:text-[var(--accent)]" style="color:var(--muted-fg)" href="https://github.com/QuickBox/pro-v3"><svg class="w-4.5 h-4.5" fill="currentColor" viewBox="0 0 24 24"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path></svg></a></div></div></div></footer></main><!--$--><!--/$--><div class="fixed left-4 right-4 sm:left-auto bottom-4 top-auto xl:bottom-auto xl:top-4 z-[9999] flex flex-col gap-3 pointer-events-none"></div><div class="fixed left-4 right-4 sm:left-auto bottom-4 top-auto xl:bottom-auto xl:top-4 z-[9998] flex flex-col gap-3 pointer-events-none"></div>
1<script src="/_next/static/chunks/webpack-6afa46b269f8e45e.js" id="_R_" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[25398,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"default\"]\n3:I[90261,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"AvatarProvider\"]\n4:I[39460,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"UserSettingsProvider\"]\n5:I[4153,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"NotificationProvider\"]\n6:I[1559,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"ToastProvider\"]\n7:I[17244,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e7392"])</script>
1<script>self.__next_f.push([1,"9.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"ConfirmProvider\"]\n8:I[44975,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"DropdownProvider\"]\n9:I[65847,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"TooltipProvider\"]\na:I[85565,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"ImpersonationBanner\"]\nb:I[62474,[\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"26584\",\"static/chunks/26584-eb7079d2e1668bfe.js\",\"7177\",\"static/chunks/app/layout-81bd5179b73b1227.js\"],\"SiteAnalyticsBeacon\"]\nc:I[9766,[],\"\"]\nd:I[98924,[],\"\"]\nf:I[24431,[],\"OutletBoundary\"]\n11:I[15278,[],\"AsyncMetadataOutlet\"]\n13:I[24431,[],\"ViewportBoundary\"]\n15:I[24431,[],\"MetadataBoundary\"]\n16:\"$Sreact.suspense\"\n18:I[57150,[],\"\"]\n:HL[\"/_nex"])</script>
1<script>self.__next_f.push([1,"t/static/media/2a23a0111ec13942-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/637e3c40ca91c7e6-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/6c596dfcddeca1e9-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/723e11e5093b8e80.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/ea9137c1a4c46eb8.css\",\"style\"]\n:HL[\"/_next/static/css/e23fa17f1067f403.css\",\"style\"]\n"])</script>
1<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"ZK6qjuFXsW83NaVXFidTy\",\"p\":\"\",\"c\":[\"\",\"news?_rsc=_izOLch94P3s73Rs\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"news\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ea9137c1a4c46eb8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/e23fa17f1067f403.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_365cbc __variable_f3ea84 __variable_46451f\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$L9\",null,{\"children\":[[\"$\",\"$La\",null,{}],[\"$\",\"$Lb\",null,{}],[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]}]}]}]}]}]}]}]}]]}],{\"children\":[\"news\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$Le\",null,[\"$\",\"$Lf\",null,{\"children\":[\"$L10\",[\"$\",\"$L11\",null,{\"promise\":\"$@12\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L13\",null,{\"children\":\"$L14\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L15\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$16\",null,{\"fallback\":null,\"children\":\"$L17\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$18\",[]],\"s\":false,\"S\":true}\n"])</script>
1<script>self.__next_f.push([1,"14:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n10:null\n"])</script>
1<script>self.__next_f.push([1,"12:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"News \u0026 Announcements - QuickBox Pro\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Stay up to date with the latest QuickBox Pro announcements, feature releases, and important updates.\"}],[\"$\",\"meta\",\"2\",{\"property\":\"og:title\",\"content\":\"News \u0026 Announcements - QuickBox Pro\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:description\",\"content\":\"The latest news, announcements, and release notes from QuickBox Pro.\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"5\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"6\",{\"name\":\"twitter:title\",\"content\":\"News \u0026 Announcements - QuickBox Pro\"}],[\"$\",\"meta\",\"7\",{\"name\":\"twitter:description\",\"content\":\"The latest news, announcements, and release notes from QuickBox Pro.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script>
1<script>self.__next_f.push([1,"17:\"$12:metadata\"\n"])</script>
1<script>self.__next_f.push([1,"19:I[89379,[\"59233\",\"static/chunks/f24c8456-530880b0559dd057.js\",\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"59072\",\"static/chunks/59072-3be7456c39dd405b.js\",\"79323\",\"static/chunks/79323-4cf2a593dd246ba0.js\",\"22133\",\"static/chunks/22133-7cb0e7a68c7fc473.js\",\"67589\",\"static/chunks/67589-6d27e2732ca308db.js\",\"45871\",\"static/chunks/45871-6a2aabb0f2e7f5e1.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"5912\",\"static/chunks/5912-b9a2a9693b593c73.js\",\"66824\",\"static/chunks/66824-cc7a50328ca61094.js\",\"51022\",\"static/chunks/51022-d587611445051e83.js\",\"32324\",\"static/chunks/app/news/page-c5f3738c390cd62d.js\"],\"default\"]\n"])</script>
1<script>self.__next_f.push([1,"1a:I[51022,[\"59233\",\"static/chunks/f24c8456-530880b0559dd057.js\",\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"59072\",\"static/chunks/59072-3be7456c39dd405b.js\",\"79323\",\"static/chunks/79323-4cf2a593dd246ba0.js\",\"22133\",\"static/chunks/22133-7cb0e7a68c7fc473.js\",\"67589\",\"static/chunks/67589-6d27e2732ca308db.js\",\"45871\",\"static/chunks/45871-6a2aabb0f2e7f5e1.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"5912\",\"static/chunks/5912-b9a2a9693b593c73.js\",\"66824\",\"static/chunks/66824-cc7a50328ca61094.js\",\"51022\",\"static/chunks/51022-d587611445051e83.js\",\"32324\",\"static/chunks/app/news/page-c5f3738c390cd62d.js\"],\"NewsContent\"]\n"])</script>
1<script>self.__next_f.push([1,"1b:T92a,"])</script>
1<script>self.__next_f.push([1,"ð **Your dashboard, your language: translations are back, and now they're per user**\n\n**Seven languages, one click away.** The QuickBox Pro dashboard now speaks English, Deutsch, Dansk, Español, Français, Português (Brasil) and ç®ä½ä¸æ. Click the globe in the top bar, pick your language, and the page switches on the spot. The sign-in page has the same globe, so you can sign in in your own language too.\n\n**Every user picks their own.** One person can run the dashboard in German while another reads it in Chinese, on the same server at the same time. Open your **Profile** and the **Language** card lets you keep a language for this session only, or save it to your account so it follows you to every browser. Admins can set a **Dashboard fallback language** under **Settings \u003e General Settings \u003e Timezone \u0026 Locale** for anyone who hasn't picked one.\n\n**The CLI keeps its own language.** `qb manage lang -o ` still sets the server-wide language for `qb` output and the system locale, and it's now fully separate from the dashboard. Change one and the other stays put, so the server can stay in English for your logs while your users read the dashboard in theirs.\n\n**Help us get the wording right.** English is the source, and the other six are first drafts we built and reviewed internally, not yet by native speakers. If something reads oddly in your language, tell us in Discord or on GitHub and point us to the page.\n\n**Also in this release:** rTorrent 0.16.23 with automatic `.rtorrent.rc` conversion (and back again on a downgrade), exact-version installs for qBittorrent and Transmission, admin-only updates for torrent clients that share a binary, newer PHP for new installs, IPTVBoss updates from its own signed repository, steadier Emby websocket connections, and a round of more accurate update notices.\n\n**Read the full article:** https://v3.quickbox.io/articles/your-dashboard-your-language\n\nDocs:\n- Dashboard language: https://v3.quickbox.io/docs/dashboard/language\n- Your Profile: https://v3.quickbox.io/docs/dashboard/profile\n- General Settings (dashboard fallback language): https://v3.quickbox.io/docs/dashboard/settings/general\n- `qb manage lang` (CLI reference): https://v3.quickbox.io/docs/cli-reference/manage#language-configuration\n- rTorrent: https://v3.quickbox.io/docs/applications/download-clients/rtorrent"])</script>
1<script>self.__next_f.push([1,"1c:Tce2,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (12)\n- `105f44e76` feat(software): detect build-rev rebuilds of compiled .deb apps as updates\n- `14504aff6` feat(i18n): add -o version help for transmission and qbittorrent\n- `311ccefff` feat(rtorrent): make the .rtorrent.rc command conversion reversible for downgrades\n- `52ef2dc95` feat(rtorrent): add 0.16.23 install and in-place rc conversion on update\n- `650b9e0a3` feat(transmission): install the exact version picked with -o\n- `6539a8531` feat(packages): add shared compiled-package version selection helpers\n- `6562b1ba0` feat(rtorrent): add a non-interactive rc-convert verb for the dashboard restore flow\n- `85c566d81` feat(php): target the newest supported PHP major at install time\n- `a95cea7a4` feat(torrents): admin-gate rtorrent and transmission updates\n- `c4714f738` feat(software): detect qbittorrent rebuilds by soname and checksum\n- `cc75419c5` feat(rtorrent): key the .rtorrent.rc command conversion on the command epoch, not a pin\n- `d98089899` feat(qbittorrent): install the exact version picked with -o\n\n### ð Bug Fixes (20)\n- `0d7d00c5d` fix(deluge): hold python3-libtorrent on install, matched to the shared runtime\n- `143c50459` fix(rtorrent): convert .rtorrent.rc for 0.16.23 renamed and removed commands\n- `15e4c7445` fix(php): stop per-app apt-mark hold from freezing within-major php updates\n- `163af854b` fix(rtorrent): backfill stray rc placeholders and make log comment idempotent\n- `25e989616` fix(software): guard per-user backup and rtorrent provisioning by install\n- `45ea4187e` fix(rtorrent): keep the app dashboard row present across an update\n- `4ce3433b8` fix(iptvboss): self-heal the vendor apt source in the update check\n- `5007dc2cb` fix(software): detect held php-fpm so updates skip the reinstall\n- `52af02d82` fix(iptvboss): build pre-upgrade dependency bridge from the candidate\
1n- `53db0fcac` fix(config/emby): pass websocket Upgrade/Connection headers on subdomain proxy\n- `56af90944` fix(updates): publish complete reports and compare APT versions correctly\n- `59647a892` fix(iptvboss): source the dependency bridge from the resolved apt candidate\n- `5ebd963dc` fix(rtorrent): drop unmaintained versions from the install catalog\n- `6a13fda73` fix(updates): align X2Go and noVNC discovery with execution\n- `6f8d86e17` fix(iptvboss): report upgrade failures and preserve installed versions\n- `70f0fb4c2` fix(rtorrent): correct 0.16.23 catalog id and add its seed row\n- `72077995f` fix(updates): verify Quassel and X2Go package updates\n- `7218391cf` fix(transmission): self-heal a missing nginx conf on update and tolerate absent sources\n- `724c22139` fix(php): let within-major php apt updates flow, drop the blanket version holds\n- `7add51a66` fix(rtorrent): convert every execute2 form, not just the brace form\n\n### ð Documentation (1)\n- `dca07e13b` docs(deluge): correct stale libtorrent convergence comment to catalog-tracked 2.0.14\n\n### 𧪠Tests (1)\n- `6e2036961` test(software): cover qbittorrent raw binary update detection\n\n### ð General Changes (1)\n- `bfd1d2133` skip ci[meta] version 3.2.2.6902 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-09-22\n- **ð·ï¸ Version**: 3.2.2.7114\n- **ð Previous Version**: 3.2.2.6902\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"1d:T8a9,"])</script>
1<script>self.__next_f.push([1,"ð§° **Two additions: a one-click fix for a wedged server, and IPTVBoss as a native app**\n\n**Writeback cleanup.** Ever had your load average slowly climb over hours or days while the box stays responsive and nothing you're running is obviously busy? That's often a kernel writeback livelock - a control group dies, the kernel gets stuck re-homing its cached inodes, and two kernel workers spin without the backlog ever draining. It's an upstream Linux 6.12 regression. There's now a **Writeback cleanup** card on the System Dashboard's Hardware Health panel that catches it. Open the card and it runs a read-only check and gives you a plain verdict; when it finds a livelock, one button releases the unreferenced inodes so the drain finishes - no reboot, and it never touches a file that's in use. It's the dashboard face of `qb fix writeback`, so the terminal and the browser do the same thing.\n\n**Native IPTVBoss support.** IPTVBoss is now a first-class QuickBox app. Install it from the dashboard, and QuickBox runs it as a single always-on Xtream Codes server that keeps your playlists and EPG in sync on its own schedule - reverse-proxied, with optional subdomain SSL, and nothing to keep open on a desktop. Your license stays entirely yours; QuickBox never stores or automates it. Manage it right from the App Dashboard row: apply and reload after a settings change, watch what synced and when, back it up, and reach the editor over a desktop remote. And if you want IPTVBoss to pull its sources through a VPN, app-scoped routing on the VPN Control page will send only its traffic through the tunnel while the rest of your server stays put.\n\n**Read the full article:** https://v3.quickbox.io/articles/writeback-cleanup-and-iptvboss\n\nDocs:\n- Writeback cleanup (System Monitoring): https://v3.quickbox.io/docs/dashboard/system-monitoring#writeback-cleanup\n- Writeback livelock troubleshooting: https://v3.quickbox.io/docs/troubleshooting\n- `qb fix writeback` (CLI reference): https://v3.quickbox.io/docs/cli-reference/fix\n- IPTVBoss: https://v3.quickbox.io/docs/applications/media-servers/iptvboss\n- VPN Control and app-scoped routing: https://v3.quickbox.io/docs/dashboard/system-admin/vpn#app-scoped-vpn-routing"])</script>
1<script>self.__next_f.push([1,"1e:Tfe9,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (12)\n- `0aa1e863a` feat(iptvboss): complete CLI autocomplete, TUI menu and lecert surfaces\n- `1d8a257dc` feat(fix): add 'qb fix writeback' for the kernel writeback cleanup livelock\n- `3777fa744` feat(i18n): add the fix delete-safety menu label in all locales\n- `3c7a7cc97` feat(iptvboss): define the CLI lang strings for the app install and update\n- `50626a05d` feat(iptvboss): add server-level IPTVBoss install script and lecert wiring\n- `53382efd2` feat(iptvboss): add SSL configure-success message across all locales\n- `5b3017b41` feat(i18n): add writeback::na counter-unavailable token\n- `72934a556` feat(seed): add IPTVBoss catalog row to full-DB seed artifacts\n- `9182c0f8b` feat(backup): wire iptvboss into full backup/restore/rollback\n- `b261c7682` feat(fix): translate 'qb fix writeback' strings into the six non-English locales\n- `d26be3ee0` feat(iptvboss): add CLI help and message strings across all locales\n- `d32a86b75` feat(iptvboss): wire parser flag, catalog row, delete protection\n\n### ð Bug Fixes (20)\n- `0636cfc56` fix(lecert): write software_custom_url on SSL subdomain add/remove\n- `0c9685f5c` fix(iptvboss): enroll in the software update-availability check\n- `0fbc3191b` fix(menu): surface qb fix delete-safety and dashboard in the tui and autocomplete\n- `11ad5052d` fix(iptvboss): randomize the XC Server port like other apps\n- `13563c6ea` fix(writeback): clamp worker CPU percent at 100\n- `2a6b2995b` fix(lecert): deploy and start the PFX auto-update timer\n- `3138a052f` fix(iptvboss): bridge renamed .deb dependency names so apt cannot purge it\n- `3305c9833` fix(iptvboss): forward proxy scheme on the subdomain vhost\n- `4fa288129` fix(iptvboss): build the dependency bridge before the update upgrade\n- `547b7d811` fix(update): stop enabling rtorrent@ units for users without rtorrent\n- `564becade` fix(iptvboss): resolve the beta .deb through the canonical release resolver\n- `5dd99ec04` fix(support): run the quickSupport ssh login hook under POSIX sh\n- `727760fd6` fix(fix): align translated 'writeback' still-busy and ETA wording with the corrected English\n- `7a390ea3c` fix(jellyfin): create the app install directory before staging\n- `7d9682dfe` fix(logging): stop size-pruning /var/log on update and user ops\n- `8079e9799` fix(software): re
1concile vendor-apt versions from dpkg in the update check\n- `89aacc06e` fix(writeback): report unavailable ext4 count instead of a false 0\n- `8eec0cf2c` fix(delete-safety): reap orphan custom app registration shadowed by a built-in\n- `925dab509` fix(iptvboss): treat a clean stop of the XC Server as success\n- `a128802f6` fix(writeback): correct still-busy and ETA wording to the observed drain\n\n### ð§ Code Refactoring (5)\n- `491a070fc` refactor(iptvboss): reap orphan -nogui units on remove and reinstall too\n- `dbb1117d9` refactor(iptvboss): drop the redundant -nogui processing side\n- `a362c5bb1` refactor(iptvboss): re-home config to install admin and run services as that user\n- `5975d71b3` refactor(lecert): table-drive per-app SSL subdomain targets\n- `d75f6f3cb` refactor(jellyfin): install ffmpeg from the prebuilt per-codename package\n\n### ð Documentation (2)\n- `8074a1183` docs(iptvboss): the sync schedule is set in the desktop GUI or the Server Console\n- `d4fb759e5` docs(writeback): match the man entry to the observed drain\n\n### ð§ Maintenance (4)\n- `726bbf4cf` chore(i18n): reword the Jellyfin ffmpeg failure message for package install\n- `843f1422c` chore(comments): state secret-handling guarantees directly in shipped helper comments\n- `a4a69d594` chore(seed): drop deprecated wsdashboard catalog row from the binary db\n- `d96d351c2` chore(i18n): mirror the Jellyfin ffmpeg build-failure message into all locales\n\n### ð General Changes (2)\n- `22d6d9645` skip ci automated: quality tasks\n- `48c8d3335` skip ci[meta] version 3.2.2.6733 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-09-13\n- **ð·ï¸ Version**: 3.2.2.6892\n- **ð Previous Version**: 3.2.2.6733\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"1f:T66b,"])</script>
1<script>self.__next_f.push([1,"ð¬ **A Reel Media Nerd Hangout: say hello to #watch-recommendations, and the Reel Riddle**\n\nIf you run a media server, you probably have opinions about what to watch next. We built a place for them. **#watch-recommendations** is a new channel in the QuickBox Discord, open to our verified members, for movie and TV talk - what you are watching, what everyone else should queue up this weekend, and a resident film nerd in QBXWatcher who talks back.\n\nHere is the short version. `/rec search` any title and you get a full card with the poster, cast, ratings, and links, plus ð and ð so the community can vote titles up or down; `/rec top` keeps a running board of what this community actually likes. @-mention QBXWatcher and it chats films and TV with you in plain prose and follows the conversation. And then there is **Reel Riddle**: typically once a day the bot hides a movie or show behind four clues that unlock over a few hours, you guess it from the card, and the fewer clues you needed the more points you score - with streaks, a new **ð¬ Reel Riddle** board on `/leaderboard`, four badges to earn, and a reveal that names the solvers and kicks off the trivia.\n\nVerify your license if you have not yet, come find the channel, and come argue about movies with us. The full write-up covers every command, how a round works, and how the scoring shakes out:\n\n**Read the full article:** https://v3.quickbox.io/articles/watch-recommendations-reel-riddle\n\nDocs:\n- Command reference (`/rec`, `/rec riddle`, `/leaderboard`): https://v3.quickbox.io/docs/discord-bot/commands\n- QBXWatcher overview: https://v3.quickbox.io/docs/discord-bot"])</script>
1<script>self.__next_f.push([1,"20:Tad5,"])</script>
1<script>self.__next_f.push([1,"𩺠**The System Dashboard just got a lot better at telling you how your server is doing**\n\nThe System Dashboard is the admin page where you check on the box - it lives at the top of the sidebar under Dashboard \u003e System Dashboard. This release sharpens it end to end: a brand-new hardware panel, a faster and more readable page that finally works on a phone, and real improvements to the two places you go to keep the server current.\n\n**Hardware Health, at a glance.** A new panel on the System Dashboard reads your CPU, memory, and firmware straight from the kernel - temperatures, fans, throttling, online cores, microcode, CPU vulnerabilities, ECC memory counters, and your installed modules. It needs nothing installed, it rolls everything up into one clear status, and it is honest about what it cannot measure - on a virtual machine it says so instead of faking a green light. It grew out of a real diagnosis where a single failing CPU core could only be found by hand-mining kernel logs. Now it is a panel.\n\n**A dashboard that works everywhere.** The whole page got the polish it deserved. No more sideways scrolling on a phone, no more labels cut off mid-word, panel headers that stack sensibly, and status colors tuned so a warning reads clearly on every theme. Diagnostics opens ready to use, so grabbing a snapshot for support is one glance.\n\n**Every update in one place.** The Updates Available table now shows your APT packages and QuickBox's own updates - QuickBox CLI (the core engine) and QuickBox Dashboard (the web interface) - together, each with installed versus available. Filter by source, jump straight to the changelog from either QuickBox row, and the Update APT Dependencies button applies to APT rows only, and says so.\n\n**A changelog that knows Core from Dashboard.** The changelog now tells the CLI core (3.x) apart from the Dashboard (4.x) - separate current and latest markers per component, never mixed, and the combined view sorts by real release date so both interleave in the order they shipped. And if you are a few versions behind, it gathers every pending release under Available in your next update so you can read exactly what is coming before you download it.\n\nThe full walkthrough covers all of it - the Hardware Health panel end to end, the responsive rework, the two-source updates table, and the smarter changelog:\n\n**Read the full article:** https://v3.quickbox.io/articles/hardware-health-and-system-dashboard\n\nDocs:\n- System Monitoring (the System Dashboard and Hardware Health): https://v3.quickbox.io/docs/dashboard/system-monitoring\n- Updates and Changelog: https://v3.quickbox.io/docs/dashboard/system-admin/updates\n- CLI reference (`qb update quickbox`, `qb update dashboard`): https://v3.quickbox.io/docs/cli-reference"])</script>
1<script>self.__next_f.push([1,"21:Te07,"])</script>
1<script>self.__next_f.push([1,"â¿ **This release is about making QuickBox Pro comfortable for everyone to use**\n\nMost releases lead with a feature. This one leads with a principle. We spent the cycle making the whole product easier to actually use - easier to read, easier to drive from the keyboard, and easier to run from the terminal. Two features came along for the ride, and both are worth your time.\n\n**Accessibility, across the dashboard.** We went surface by surface. Text contrast is up to the readable floor everywhere, including the faint labels, the input placeholders, and the red danger text that were the hardest to read. Every control shows a clear focus ring when you reach it with the keyboard, dialog close buttons included, and there is a skip-to-content link at the top of every page. Confirm dialogs now open focused on Cancel, so a stray Enter can never fire something destructive. The icon-only buttons that run your apps carry proper names now, so screen readers announce what they do.\n\n**Search that takes you straight there.** Press Cmd or Ctrl and K anywhere in the dashboard and search now reaches everything - not just pages, but the settings and controls inside them. Eac
1h result is grouped under its real page, and picking one scrolls you straight to that exact section, whether it is on the page you are already on or clear across the dashboard. It is keyboard-first and respects your reduced-motion setting.\n\n**Application Control, rebuilt.** The App Dashboard's Application Control view - the default view where you run your installed software - got the most visible share of this work. Cleaner rows, unmistakable status, controls that announce themselves, and on a phone each app becomes a real touch card instead of a table squeezed onto a small screen.\n\n**The full `qb` menu.** For everyone who lives over SSH: run `qb` with no arguments and you now get a full interactive menu instead of memorizing flags. Nine categories, and you only see the ones your account can use. Pick an action and it walks you through it - choose the user, then the app, then the operation, all as real lists. Destructive actions ask you to confirm first, it is gated by role the whole way, and it is translated across all seven languages. The System category even pulls live dashboard data - telemetry and streaming analytics - straight into the terminal.\n\n**Delete Protection.** Deleting a very large file could once pin a CPU in the kernel and take the whole box down until a hard reboot. Delete Protection paces those large deletes so your server stays responsive the entire time. It is opt-in - an admin turns it on with the Delete Protection switch under Settings \u003e General, which starts protecting your media and download apps and reveals the Delete Protection page. There you get a server-wide switch, a live counter of large deletes safely handled, and a per-app size threshold so a heavy deleter and a lighter app can each carry their own floor. It is on the CLI too, under Manage in the new menu.\n\nThe full walkthrough covers all of it - the accessibility work, the rebuilt Application Control panel, the whole `qb` menu, and Delete Protection end to end:\n\n**Read the full article:** https://v3.quickbox.io/articles/a-more-accessible-quickbox-pro\n\nDocs:\n- App Dashboard and Application Control: https://v3.quickbox.io/docs/dashboard/app-management\n- Delete Protection: https://v3.quickbox.io/docs/dashboard/system-admin/delete-protection\n- Delete Protection troubleshooting: https://v3.quickbox.io/docs/troubleshooting/delete-protection\n- CLI reference: https://v3.quickbox.io/docs/cli-reference"])</script>
1<script>self.__next_f.push([1,"22:T1458,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (20)\n- `048a7d086` feat(delete-safety): forward per-app threshold args through the manage module\n- `1320165e0` feat(delete-safety): per-app size threshold overrides\n- `17f2c8d65` feat(i18n): translate System (v4) render-chrome labels for 6 locales\n- `1baf39dc8` feat(delete-safety): keep an all-time protected-delete total across log rotation\n- `1ea1de2b8` feat(apps): add large-file-delete safety shim for media apps\n- `21c2591db` feat(delete-safety): count and surface large deletes safely handled\n- `2968301b4` feat(delete-safety): add list-apps verb for interactive menu app picker\n- `2cec88641` feat(cli-tui): surface manage db MySQL conversion flags in the menu\n- `31ef1e7ce` feat(menu): wire the seven remaining interactive TUI categories\n- `3285ce060` feat(i18n): add generic invalid-subcommand CLI error string across locales\n- `364a6ab32` feat(menu): localize additional streaming read labels\n- `3dea2e8b4` feat(cli): complete delete-safety bash autocomplete\n- `3e59de163` feat(menu): add System (v4) TUI category backed by the dashboard API\n- `4b077526e` feat(cli-tui): add a ruTorrent plugin row to the software menu\n- `511e0b95e` feat(cli-tui): drop cron-only api heartbeat verb from the menu\n- `536b5f4b9` feat(menu): localize streaming analytics System (v4) labels\n- `64d7727a2` feat(menu): add more streaming read surfaces to the System (v4) category\n- `675861db5` feat(delete-safety): per-app toggle, tunable threshold, persisted state\n- `6b7d0996f` feat(menu): add telemetry surfaces to the System category\n- `6ef5c0ee0` feat(i18n): add delete-safety TUI menu label across all 7 locales\n\n### ð Bug Fixes (20)\n- `04936438f` fix(i18n): list all configured apps in the ssl completion message\n- `1eb586f8f` fix(delete-safety): log the absolute path of each protected delete\n- `2a3297c3b` fix(i18n): mirror fail2ban unban lang keys to all locales\n- `2ae1be5f2` fix(cli): restore interactive menu - pass numeric dialog tags\n- `31e57ffcc` fix(update): validate the devpull payload before replacing the launcher\n- `34ab7d57b` fix(delete-safety): keep the unlink shim loadable in bundled-glibc apps\n- `354d94f05` fix(setup): validate the fetched installer before running it\n- `3607fffd3` fix(software): stop misattributing user_software software_id\n- `38709cdf3` fix(autocomplete): route manage dispatcharr verb flags, not install flags\n- `3f3bdf084` fix(update): reject non-binary download before it overwrites a live binary\n- `491cf2e19` fix(lang): stop offering hungarian in the CLI language selector\n- `580826dae` fix(i18n): restore dropped printf args and add mysql-config strings\n- `6196d5bbf` fix(qbnetwork): resolve network-stats paths for v4 installs\n- `66a2910eb` fix(wireguard): repair manage wireguard calc and add parsing\n- `6a98b3263` fix(lang): only persist locale keys when a valid locale resolved\n- `71ab1a827` fix(menu): show only genuine pending updates in the interactive update list\n- `74f8c8383` fix(autocomplete): surface manage dispatcharr/fail2ban/vnstat completion\n- `7747d112b` fix(update): reclaim dashboard-log sinks with dotfile-safe find\n- `774a8f30a` fix(beta): verify downloaded betapull can load before replacing the launcher\n- `7cd99dfb4` fix(update): port step-error + lshell resolver fixes to dev/beta pullers\n\n### ð§ Code Refactoring (14)\n- `12dd61f54` refactor(i18n): drop orphaned interactive-menu lang keys\n- `31a8784e7` refactor(vnstat): single-source the vnstat build lifecycle\n- `9d45830c5` refactor(autocomplete): also exclude wsdashboard for menu parity\n- `a7c193e46` refactor(autocomplete): consolidate software-exclude lists into one shared variable\n- `5e6e3505e` refactor(cli): modularize the interactive menu into SHC sub-modules\n- `bf561f181` refactor(lang): drop redundant dashboard::log defs from lang bundles\n- `76978ad2f` refactor(system): drop duplicate dashboard::log defs from modules\n- `20462bf43` refactor(lang): retire write-only dashboard-log file sink in lang bundles\n- `ad0b16655` refactor(system): retire write-only dashboard-log file sink\n- `abaaf517f` refactor(nvpn): target v4 stash for generated configs\n- `ec091f064` refactor(wireguard): retire the legacy client-stash mirror\n- `950826a80` refactor(i18n): drop dead dashboard-log chown from lang bundles\n- `b8f861544` refactor(cli): drop dead dashboard-log ownership plumbing\n- `fb97900eb` refactor(fail2ban): share the lshell sentinel self-heal across channels\n\n### ð Documentation (2)\n- `33520af3a` docs(menu): regenerate quickbox reference for the wired categories\n- `ed7460f35` docs(wireguard): correct stale stash-sync comments\n\n### ð§ Maintenance (2)\n- `346287fbe` chore(i18n): remove the dead en cli_lang.backup snapshot\n- `c7a3195c4` chore(delete-safety): fail the shim build on any above-baseline glibc dep\n\n### ð General Changes (3)\n- `d359bd40f` i18n(updater): add lshell_skipped_python to all non-en locales\n- `77e739a1f` perf(cli): resolve log-miner user id once per user\n- `376bd21be` skip ci[meta] version 3.2.2.6234 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-09-01\n- **ð·ï¸ Version**: 3.2.2.6705\n- **ð Previous Version**: 3.2.2.6234\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"23:T819,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (1)\n- `dc5eee736` feat(telemetry): carry latest network speedtest in the heartbeat body\n\n### ð Bug Fixes (13)\n- `32566c976` fix(apt): add a completeness floor to the sury signing-key refresh\n- `661928cf6` fix(release): pass stage gates via job outputs, drop all Actions artifacts\n- `677eeacee` fix(keyring): validate each signing key and guard against a shrinking refresh\n- `72b7ebcc2` fix(api): make heartbeat telemetry error transport-aware\n- `7cbe6e72a` fix(qbittorrent,deluge): default libtorrent pin to 2.0.13 on empty catalog\n- `8b06bd7c5` fix(cli): add missing slash in software access URL banner\n- `8fc2a0aec` fix(update): rewire deployed ttyd/shellinabox units off dropped sshd.service alias\n- `905a37933` fix(nextcloud): repair data-dir writability, guard occ install, set subpath webroot\n- `9c2f09e20` fix(novnc): launch the XFCE session on its own D-Bus so the desktop paints reliably\n- `ce11fb538` fix(nginx): validate the nginx signing key before installing it\n- `ce29a8f5e` fix(setup): use ssh.service and PEP 668 stdlib marker on Ubuntu 24.04\n- `d971168a4` fix(i18n): define four undefined CLI lang functions across all locales\n- `de1c15f68` fix(webconsole): use ssh.service unit name for openssh dependency\n\n### ð§ Code Refactoring (6)\n- `34012f4cb` refactor(cli): drop the retired theme seed from the channel-pull bootstraps\n- `33b9729cb` refactor(cli): remove the retired dashboard theme module\n- `91f327327` refactor(nginx): delegate archive key refresh to the shared installer\n- `24d28402b` refactor(nginx): retire the dead wsdashboard self-proxy and orphan config\n- `d880f8aea` refactor(nginx): strip the /api/qb/ rewrite in the channel pull scripts\n- `3e7f49f45` refactor(nginx): retire the legacy /api/qb/ to /api.php compat rewrite\n\n### ð General Changes (1)\n- `471d0fd65` skip ci[meta] version 3.2.2.6155 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-08-19\n- **ð·ï¸ Version**: 3.2.2.6234\n- **ð Previous Version**: 3.2.2.6155\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"24:T85d,"])</script>
1<script>self.__next_f.push([1,"ð¡ï¸ **New: edit the restricted shell from your dashboard, with Fail2Ban watching its back - plus Ubuntu 24.04 support**\n\nEvery standard user on your server runs inside a restricted shell that keeps them to their own files and torrents without letting them roam the machine. It has always been there doing its job quietly in the background. What is new is that you can now shape it yourself, right from the dashboard, instead of hand-editing a config file over SSH and losing your work on the next update.\n\nYou will find it under **Settings \u003e Security \u003e Restricted Shell**. Tune the allowed and forbidden commands, over-SSH access, file transfer, warnings, the process cap, and the login banner, all as guarded form fields. Every change gets a preview before it lands, you can revert any single field back to the default, and the security-critical settings stay locked so a stray edit can never break the sandbox. Best of all, your policy is stored in the database and survives every `qb update`, where a hand-edited config would have been overwritten.\n\nIt also ties into **Fail2Ban**. If you have Fail2Ban installed, QuickBox ships two shell-confinement jails that read the restricted-shell log and turn repeated abuse into a ban - a forgiving everyday jail that never punishes a single fat-fingered command, and a strict one that bans on a genuine kick or a fork bomb the first time it sees it. You arm them per jail from the Fail2Ban tab under Settings \u003e Security, and they stay off by default until you decide.\n\nAnd a bit of platform news to go with it: QuickBox Pro now installs on **Ubuntu 24.04 LTS (Noble Numbat)**, joining Debian 13, Debian 12, and Ubuntu 22.04 in the supported lineup. Fresh installs only, as always.\n\n**Read the full article:** https://v3.quickbox.io/articles/restricted-shell-editor-and-ubuntu-24-support\n\nDocs:\n- Restricted Shell Policy: https://v3.quickbox.io/docs/dashboard/settings/security/restricted-shell\n- Fail2Ban, including the shell-confinement jails: https://v3.quickbox.io/docs/applications/utilities/fail2ban\n- Getting Started (now with Ubuntu 24.04): https://v3.quickbox.io/docs/getting-started"])</script>
1<script>self.__next_f.push([1,"25:T15c1,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (20)\n- `0cd7d677d` feat(software): add rtorrent 0.15.5/0.15.6/0.15.7/0.16.11 seed rows\n- `17385b374` feat(i18n): translate user-set VNC password CLI strings\n- `20447c6b6` feat(fail2ban): cover the full lshell over-SSH forbidden family\n- `3d37d4b6e` feat(fail2ban): match lshell forbidden SFTP connection line\n- `4d15c8504` feat(rtorrent): render qb help version lists from the compiled-packages catalog\n- `504a6b9b5` feat(logs): prune accumulating app logs that were never cleaned up\n- `557ef10e5` feat(fail2ban): translate the lshell jail-restore error in de, fr, es, pt, dk, zh-cn\n- `5a1afb38c` feat(rtorrent): rotate the execute log and make logs dashboard-readable\n- `5d2a75318` feat(fail2ban): translate the lshell jail-absent status line in de, fr, es, pt, dk, zh-cn\n- `62dd0da1b` feat(lshell): harden the limited-shell defaults with fail-closed exec protection\n- `6773aa8a7` feat(transmission): default fresh installs to v4, keep major on update\n- `765ed3b18` feat(rutorrent): ensure plugin system dependencies on install\n- `8c0f22414` feat(update): re-apply dashboard lshell policy overrides after base config copy\n- `92aa00fde` feat(software): seed rtorrent 0.15.5/0.15.6/0.15.7/0.16.11 in full-db dumps\n- `a115be03f` feat(fail2ban): add lshell restricted-shell jails and filters\n- `b29b1e4bc` feat(i18n): translate the terminal-required VNC password error\n- `b7769a8ec` feat(permissions): keep dashboard log-read grant self-healing\n- `c061a2c16` feat(novnc): user-set VNC password decoupled from the account password\n- `d0c3adbeb` feat(i18n): translate lshell policy re-apply messages to all locales\n- `e8f255643` feat(ombi): export request history for dashboard backfill\n\n### ð Bug Fixes (20)\n- `014df6117` fix(i18n): translate ombi API key export skip notice\n- `0bf56e88e` fix(update): return 0 from lshell stage so a clean install does not abort\n- `0d06fb4e0` fix(rtorrent): resolve legacy libtorrent soname per codename from manifest\n- `24a489fa4` fix(update): make the limited-shell update fail loud, not silent\n- `265f596fb` fix(tautulli): repair boot enablement on update so the service survives reboot\n- `280d38672` fix(novnc): require a terminal for interactive VNC password entry so it cannot spin\n- `2ac960000` fix(tautulli): print the mode-correct access URL on install and reinstall\n- `318d2cd9c` fix(rutorrent): surface plugin failures and land _cloudflare deps\n- `361a89a6b` fix(qbittorrent): pin libtorrent to the version the binary needs\n- `364bdec67` fix(fail2ban): make the lshell jail toggle upgrade-safe\n- `37a896e17` fix(rtorrent): map current stable versions so default install resolves\n- `3b877055e` fix(rtorrent): resolve xmlrpc-c install on ubuntu 24\n- `3dd05c14d` fix(l
1shell): drop python3 and screen from the default allowed shell whitelist\n- `40688f4b2` fix(rutorrent): translate the plugin-directory guard message\n- `40c2e1c0b` fix(flaresolverr): install chromium on Ubuntu noble as well as jammy\n- `5dda00dd2` fix(update): re-assert wireguard maintenance cron on every update\n- `5e052386c` fix(netdata): correct the apt source line so the package downloads\n- `604060174` fix(fail2ban): make the lshell toggle honor the dashboard drop-in\n- `6508adfa4` fix(qbittorrent): pin the resolved version on every compiled-dep download\n- `67d5d58be` fix(update): fetch lshell from the release proxy in the dev and beta pull scripts\n\n### ð§ Code Refactoring (3)\n- `15628f3fd` refactor(rutorrent): align _cloudflare PEP 668 check to the house helper\n- `ee0190a0b` refactor(sudoers): remove the redundant dashboard sudoers file\n- `ee0f40897` refactor(netdata): install from the official apt repository on all distros\n\n### ð§ Maintenance (14)\n- `020dfeae5` chore(dashboard): stop deploying and purge the PHP dashboard tree\n- `2d9025d2a` chore(dashboard): stop assuming php8.1-fpm exists in settings modules\n- `408f6db44` chore(dashboard): remove dead PHP-dashboard writes from software scripts\n- `458857266` chore(build): drop dead PHP-dashboard asset cleanup from the release build\n- `55e3c073e` chore(dashboard): remove deprecated /srv/quickbox handling\n- `642fa63c0` chore(dashboard): remove url.override.php writes from software installs\n- `6e7f99b63` chore(release): rebuild the betapull channel binary\n- `6f721e1d4` chore(dashboard): remove orphaned url.override machinery + template\n- `714909dff` chore(i18n): remove orphaned PHP localization loaders\n- `7580fc732` chore(release): rebuild the encrypted betapull channel binary\n- `8c249ef34` chore(dashboard): purge PHP dashboard footprint from dev pull scripts\n- `b7dc5c1b0` chore(dashboard): drop php-fpm reload from netdata and wireguard installs\n- `d3476e939` chore(dashboard): drop dead changelog deploy from the update pipeline\n- `fecf70fa6` chore(db): sync the compiled database with the rtorrent version rows\n\n### ð General Changes (6)\n- `5dbb6ca58` i18n(rtorrent): drop the stale version literal from the ruTorrent help note in all locales\n- `d470cf3a7` i18n(rtorrent): use the correct Danish word for the default version label\n- `3b6dfe563` i18n(rtorrent): render qb help version lists from the compiled-packages catalog\n- `2a33b50b8` i18n(manager): translate the ruTorrent plugin-directory guard key\n- `fa4d4d451` i18n(manager): translate 7 ruTorrent plugin lang keys into all locales\n- `eea103e32` skip ci[meta] version 3.2.2.5871 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-08-11\n- **ð·ï¸ Version**: 3.2.2.6155\n- **ð Previous Version**: 3.2.2.5871\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"26:T483,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (1)\n- `4d566694e` feat(jellyfin): show service journal on startup-config failure\n\n### ð Bug Fixes (8)\n- `1f935e2ea` fix(qbittorrent): install bundled libtorrent by version, not soname presence\n- `21c398c06` fix(qbittorrent): treat a held libtorrent as installed by the version gate\n- `6727f4ef9` fix(deluge): keep shared service units on non-last-user removal\n- `6aeff094b` fix(qbittorrent): restore stock libtorrent runtime after remove\n- `996b7389d` fix(deluge): keep shared libtorrent when qBittorrent is installed\n- `9ee536203` fix(qbittorrent): keep shared libtorrent when any user has Deluge\n- `b34f968b0` fix(deluge): only purge shared packages on the last Deluge user\n- `cfdb17446` fix(installer): never prompt or auto-reboot during unattended installs\n\n### ð General Changes (2)\n- `fad3ac965` i18n(jellyfin): translate recent-service-log key into all locales\n- `68f6e0c31` skip ci[meta] version 3.2.2.5851 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-08-03\n- **ð·ï¸ Version**: 3.2.2.5870\n- **ð Previous Version**: 3.2.2.5851\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"27:Tbae,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (5)\n- `2530aeac5` feat(i18n): add the nginx signing key skip message for every language\n- `410238685` feat(i18n): translate the nginx upgrade messages for every language\n- `7ca7d161a` feat(i18n): add the nginx no-candidate skip message for every language\n- `cf4981f3f` feat(integrity): verify the dashboard release signature on first install\n- `f5047ea8c` feat(i18n): thelounge Node engine-check messages in 6 locales\n\n### ð Bug Fixes (20)\n- `090b093c9` fix(apt): stop a failed signing-key download from breaking apt for the whole box\n- `09d04800d` fix(transmission): fail loud when settings.json cannot be written\n- `0bb711b78` fix(transmission): localize the settings-write-failure message\n- `0d6a66311` fix(nginx): fetch the replacement nginx before removing the installed one\n- `129f00249` fix(nginx): stop a failed signing key download from breaking apt\n- `2ea92e533` fix(i18n): translate the Jellyfin settings and port messages\n- `475170006` fix(dlindex): emit alias path in-shell and reject unquotable chars\n- `4b545fd2b` fix(nginx): keep the running nginx when no newer one can be installed\n- `4d13057e6` fix(apt): restore the key-count check after its removal proved unsafe\n- `56d49eaa7` fix(apt): reject a key file that arrived missing some of its keys\n- `5e8978da6` fix(apt): refresh the PHP archive signing key before the update fetches indexes\n- `73886f389` fix(ombi): re-sync exported API key and enforce settings DB perms\n- `753a6638c` fix(install): deny unverifiable v4-dashboard payload on fresh install\n- `837a4e9db` fix(setup): seed the full application list on a new install\n- `87d40e839` fix(nginx): converge dpkg only when apt refuses the archive nginx removal\n- `935c000be` fix(transmission): repair v4 update path so the service starts\n- `96ad92009` fix(i18n): translate the package source signing key failure\n- `982a57efe` fix(update): restore missing dashboard app catalog entries on update\n- `9df6d36a2` fix(transmission): reconcile settings.json rpc port on v4 update\n- `9f78b6a23` fix(transmission): own the whole rebuilt config tree on update\n\n### ð§ Code Refactoring (2)\n- `f60dd3d0c` refactor(apt): drop the key-count check the armor check already covers\n- `9a938eb4b` refactor(nginx): align the updater's nginx install with the installer's\n\n### ð Documentation (2)\n- `938b26d74` docs(thelounge): list reachable Node-resolution exit codes on dependency install\n- `e1674f3b8` docs(plex): point the archived apt method at the safe key install\n\n### ð§ Maintenance (1)\n- `ff6084ae6` chore(version): advance the build number for the language file updates\n\n### ð General Changes (2)\n- `947e438fd` ci(release): fetch changelog via contents API instead of full repo clone\n- `7d0343151` skip ci[meta] version 3.2.2.5704 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-07-29\n- **ð·ï¸ Version**: 3.2.2.5851\n- **ð Previous Version**: 3.2.2.5704\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"28:Tbec,"])</script>
1<script>self.__next_f.push([1,"ð¦ **New: move files between your own servers, and keep your metric history for good**\n\nTwo new tools are live in the dashboard, and both fix something that used to send you back to the terminal.\n\n**Inter-Instance Transfer.** If you run more than one QuickBox Pro server, you can now move a whole folder tree straight from one to another, right from the dashboard. No SSH, no `rsync` to babysit, no third-party relay. You find it in the sidebar under **Transfer**. Pick a folder on one server, choose which of your own servers it goes to, and say whether you are migrating everything or spreading the load. The receiving server reviews the offer and, once you approve it, pulls the data across - resumable if the connection drops, and checksum-verified when it lands. There is also a live cockpit on the **System Dashboard** with a sender-to-receiver map and a row per transfer, so you can watch it all move.\n\nIt is built to be private. Transfers only happen between servers on your own account, the authorization is a signed, single-use grant that expires in 12 hours, the two servers verify each other with mutual TLS, and no server's address is ever shown anywhere in the dashboard. One straight answer, because we would rather tell you than have you wonder: because the servers talk directly, the receiving machine does learn the address it dials - that is the trade for having no relay in the middle. What is guaranteed is that the other person never sees an address in the interface, and an intercepted grant is useless without the receiver's key.\n\nIt ships off by default, and it is an administrator feature - an admin turns it on once under **Settings \u003e General**.\n\n**The Telemetry History Store.** Ever opened your system charts after a restart and found the history gone? Not anymore. The System Dashboard now keeps a durable, on-server record of your metrics, so the CPU, memory, network, and disk history charts stay gap-free across restarts, dashboard updates, and even a reinstall. It tracks nine metrics, keeps them at four resolutions (raw for 48 hours, per-minute for 30 days, per-hour for a year, per-day for as long as you want), and gives you a card per metric showing exactly how much history you are holding. When you want to start fresh, there is a clear-history button behind a confirm.\n\nWorth being clear on one thing: this store lives entirely on your server and never sends anything anywhere. It is your box keeping its own records for you, separate from the account telemetry that reports to your dashboard.\n\nBoth of these are fully written up. The deep dive covers the whole transfer workflow, the security model, and every part of the history store:\n\n**Read the full article:** https://v3.quickbox.io/articles/inter-instance-transfer-and-telemetry-store\n\nDocs:\n- Inter-Instance Transfer: https://v3.quickbox.io/docs/dashboard/system-admin/transfers\n- System Dashboard (cockpit and history store): https://v3.quickbox.io/docs/dashboard/system-monitoring\n- CLI reference: https://v3.quickbox.io/docs/cli-reference/transfer"])</script>
1<script>self.__next_f.push([1,"29:T633,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (6)\n- `436b636d2` feat(fail2ban): managed transfer-peer allowlist mechanism\n- `80e88f5a1` feat(transfer): translate peer-allow/deny/list CLI strings to 6 locales\n- `816de0e14` feat(i18n): translate CLI-core sync status into 6 locales\n- `9bbf70f64` feat(update): sync CLI core after a standalone dashboard update\n- `caaa6ccca` feat(i18n): translate CLI-core channel sync message into 6 locales\n- `d7dd4e09f` feat(transfer): add qb transfer peer-allow/peer-deny/peer-list commands\n\n### ð Bug Fixes (6)\n- `6c8349550` fix(update): tighten dashboard CLI-core version normalization\n- `72497c1d1` fix(transfer): emit bare peer-list output on the non-tty machine path\n- `8d257fe23` fix(update): dashboard CLI-core sync defers to the channel updater on dev/beta\n- `d64a2687a` fix(update): sync dashboard CLI-core update across all channels\n- `dfa1a70be` fix(update): scope dashboard CLI-core sync to the stable channel\n- `f6a7f152e` fix(install): keep apt-listbugs from aborting dependency installs\n\n### ð§ Maintenance (3)\n- `06487d936` chore(system): remove internal cross-references from script comments\n- `67b413f8b` chore(system): reword roadmap label in dbFix description comment\n- `ca60dab6f` chore(software): strip internal tracker refs from seerr and jdownloader comments\n\n### ð General Changes (1)\n- `0d622d77b` skip ci[meta] version 3.2.2.5658 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-07-09\n- **ð·ï¸ Version**: 3.2.2.5704\n- **ð Previous Version**: 3.2.2.5658\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"2a:Tfc2,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (20)\n- `03b3707f0` feat(i18n): add Danish Unmanic translations\n- `03c06188a` feat(i18n): mirror Audiobookshelf lang keys to all non-English locales\n- `0d307cb4f` feat(listenarr): add install, remove, and update lifecycle\n- `20243bcef` feat(i18n): add unmanic ffmpeg install-failure message to all locales\n- `232494628` feat(ombi): stable/beta release channel selection\n- `3df321271` feat(users): provision per-user personal storage directory\n- `3eb965ebf` feat(cli): add Unmanic tab-completion flags\n- `43e424d10` feat(users): move personal storage dir under .QuickBox namespace\n- `4ddd0ca3b` feat(audiobookshelf): add install script with per-user Node 20 build-from-source lifecycle\n- `4fde8ba3c` feat(audiobookshelf): add config templates, seed row, and dependencies entry\n- `50abfa275` feat(listenarr): wire update checking, tab-completion, and CLI help\n- `598451c97` feat(backups): translate nginx backup messages for all locales\n- `62144993a` feat(i18n): add German Unmanic translations\n- `7431dbcae` feat(fail2ban): back up system-wide configs to admin .QuickBox tree\n- `755c92863` feat(listenarr): add service unit, nginx subpath template, deps, and catalog row\n- `80a56e9ee` feat(i18n): add Listenarr update port-resolve failure message to all locales\n- `878ed2f89` feat(ssl): register Unmanic as a lecert reverse-proxy target\n- `8beb151bc` feat(backups): back up rutorrent global and per-user configs\n- `9620fb117` feat(i18n): add Spanish Unmanic translations\n- `9c4d3d72b` feat(i18n): add missing quota and ruTorrent PHP messages to all locales\n\n### ð Bug Fixes (20)\n- `0954a67a6` fix(listenarr): complete and harden the web client subpath integration\n- `1647cc5a2` fix(backups): stamp backups with creation time so listings show the right date\n- `17659c341` fix(rtorrent): full backup of config, session, and watch dirs\n- `1c0a1fc90` fix(updates): respect Ombi release channel in update checks\n- `1ed6b8d5a` fix(backups): correct bazarr4k seed config path to config.yaml\n- `276f1ebe7` fix(backups): resolve Plex custom config dir explicitly and surface rollback errors\n- `28390acbe` fix(storage): converge .QuickBox to user-owned on update + provisioning\n- `34ea6b466` fix(storage): only normalize newly-created storage parent dirs\n- `3b7413723` fix(build): heredoc-aware comment stripping in release artifacts\n- `4139b23c7` fix(listenarr): resolve the live web port on update and stop doubled console output\n- `4179ea1f0` fix(i18n): stop Listenarr messages printing twice in non-English locales\n- `41fcf6501` fix(backups): exclude servarr regenerable metadata from config backups\n- `46efc60de` fix(permmon): use standard bash shebang so release encryption compiles\n- `5a6f89fcc` fix(backups): correct jellyseerr/overseerr config rollback path\n- `6b8c115db` fix(backups): give rutorrent global and per-user backups distinct names\n- `712a02d47` fix(backups): scope media server config in full app backup\n- `7614240ef` fix(storage): make per-user personal storage dir private from other users\n- `7b0a75795` fix(lang): add rollback extract-error strings across locales\n- `8561bdf95` fix(unmanic): guarantee ffmpeg/ffprobe at install time\n- `8a02e4d28` fix(backups): register the backup module in the update manifest\n\n### ð§ Code Refactoring (3)\n- `b1110ef3e` refactor(backups): move backup operations into a dedicated module\n- `d9fb52e87` refactor(storage): user-own .QuickBox in software backup/restore/default/rollback\n- `fa0313700` refactor(storage): user-own .QuickBox backups in mflibs backup helpers\n\n### ð Documentation (1)\n- `db4cc2914` docs(help): add dedicated Unmanic help entry\n\n### ð§ Maintenance (1)\n- `0afce565f` chore(build): enable comment stripping for the five largest software scripts\n\n### ð General Changes (1)\n- `d1b4393df` skip ci[meta] version 3.2.2.5407 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-06-19\n- **ð·ï¸ Version**: 3.2.2.5615\n- **ð Previous Version**: 3.2.2.5407\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"2b:T478,"])</script>
1<script>self.__next_f.push([1,"Dispatcharr is now a full member of the QuickBox Pro lineup. It is a self-hosted IPTV proxy that merges your M3U and Xtream Codes sources into one channel lineup, matches EPG guide data, transcodes with FFmpeg, records with a built-in DVR, and presents itself to Plex, Emby, and Jellyfin as an HDHomeRun tuner.\n\nInstall and manage it right from the dashboard under Software, the same as the rest of your apps. Every user gets their own fully isolated stack, and the install dialog has options for the beta branch and for publishing on your own subdomain with SSL.\n\nThe part most people will care about is Plex. QuickBox does the hard work for you: Dispatcharr channels tune in Plex out of the box, the What's Streaming Dashboard shows the correct guide for every channel automatically, and a built-in self-heal keeps Plex's channel map in sync when you renumber your lineup. Emby and Jellyfin work with no extra steps at all. App-Scoped VPN routing over WireGuard or OpenVPN is built in too.\n\nRead the full announcement, with setup walkthroughs and links to every guide:\nhttps://v3.quickbox.io/articles/dispatcharr-joins-the-quickbox-pro-lineup"])</script>
1<script>self.__next_f.push([1,"2c:T16dd,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (20)\n- `037635d63` feat(ssl): accept explicit --dns and --dns-provider flags on plex and seerr\n- `03d88a529` feat(lecert): register --dispatcharr flag and wire subdomain provisioning\n- `058c250b7` feat(plex): translate PlexPass credentials-fallback notice for all locales\n- `12defbb78` feat(ombi): subdomain and SSL support via -d, --dns, --dns-provider\n- `1a435acfc` feat(dispatcharr): gate system ops on quickbox admin and detect pg version drift\n- `1b751e85f` feat(nginx): translate dpkg-inconsistent migration warning\n- `2cf9d4e0b` feat(dispatcharr): accept explicit --dns and --dns-provider flags\n- `3004b5813` feat(vpn): per-app routing survives reboot and dashboard install parity\n- `3a671824a` feat(network): add librespeed-cli install lang keys to non-English locales\n- `3bf146cd2` feat(wireguard): translate 5 server-gateway lang keys to 6 locales\n- `445651cb6` feat(dispatcharr): ship Plex-compatible HDHR output profile by default\n- `45725310a` feat(dispatcharr): switch redis and postgres to unix sockets\n- `51d0dc8bc` feat(plex): pull the PlexPass build at install when the PlexPass channel is chosen\n- `62b00953f` feat(dispatcharr): translate duplicate guide-id strings to 6 locales\n- `65da4374e` feat(ssl): accept explicit --dns and --dns-provider flags on emby and jellyfin\n- `680bfb00d` feat(komga): explicit '--dns' / '--dns-provider' flags + auto-detect parity\n- `6de1de083` feat(app-routing): retry boot reconcile on failure and add periodic timer\n- `73667350d` feat(vpn): immediate server-wide gateway-mode reconcile entry point\n- `7b04a9423` feat(vpn): translate openvpn port-in-use message\n- `80ff74ed4` feat(i18n): drop duplicate stdout emission from credentials lang keys\n\n### ð Bug Fixes (20)\n- `02418c398` fix(dispatcharr): build venv on Python 3.13 instead of system python3\n- `0571d46a8` fix(plex): resolve update channel from on-disk marker instead of database\n- `087c2e585` fix(plex): use the box dashboard port for the /system document route\n- `0b94c8d90` fix(dispatcharr): restart pg and redis on install for stale-state idempotency\n- `124fd4227` fix(install): write deb822 apt sources on Ubuntu 24.04 (noble)\n- `14a97a15f` fix(dispatcharr): gate pg wait on systemd is-active and bump timeout to 60s\n- `17e11979d` fix(dispatcharr): keep shared redis-server running\n- `203a4d1c1` fix(software): make install database idempotent on reinstall\n- `2573d3a94` fix(dispatcharr): isolate node per user and fix venv/pg readiness gaps\n- `3294ed766` fix(vpn): let gateway-reconcile bypass the per-user install guard\n- `38260bd1a` fix(dispatcharr): resolve torch CPU wheel and add post-deps django check\n- `396d33a8c` fix(dispatcharr): set only Host and X-Forwarded-Proto on proxied location blocks\n- `3c5437b1f` fix(vpn): honor explicit -lp port and make remove idempotent\n- `43f0c93d2` fix(dispatcharr): track upstream release tags on stable installs\n- `498b04bcc` fix(dispatcharr): trim base system packages from app dependencies\n- `4c735994c` fix(vpn): write gateway-mode directives on their own lines\n- `5339f55ed` fix(vnstat): emit trailing JSON summary from reconciler\n- `533df5425` fix(install): allow Ubuntu 24.04 (noble) in the distro validator\n- `55f6b3ca4` fix(install): correct mflibs source path in finalize error message\n- `571c0df86` fix(lecert): define missing dispatcharr subdomain success lang function\n\n### ð§ Code Refactoring (9)\n- `56fe73379` refactor(i18n): normalize fr language-file metadata headers\n- `1b0e20896` refactor(i18n): normalize es language-file metadata headers\n- `dd05ae302` refactor(i18n): normalize dk language-file metadata headers\n- `010a0e51c` refactor(users): split the user utility into per-subcommand modules\n- `5edb70a2a` refactor(software): remove wsdashboard management\n- `f94467e88` refactor(update): collapse duplicated version-check blocks into a registry\n- `abb5fb79b` refactor(dispatcharr): slim the install script and record the second backend port\n- `cedbc98bd` refactor(dns): route SSL apps through shared provider auto-detect\n- `eba630e62` refactor(fix): consolidate multi-version python repair and harden module checks\n\n### ð§ Maintenance (17)\n- `014e030d9` chore(i18n): translate dlindex fix strings to 6 locales\n- `09c1fc254` chore(i18n): translate lecert dispatcharr ports message to 6 locales\n- `4e8898fbf` chore(dlindex): route remove and reinstall through the dlindex helper\n- `50d48d314` chore(i18n): translate dispatcharr admin-gate messages to 6 locales\n- `61494429f` chore(i18n): translate dispatcharr postgres-missing message to 6 locales\n- `776a15403` chore(i18n): translate dispatcharr subdomain mode messages to 6 locales\n- `798c7dc13` chore(betapull): regenerate encrypted asset from validated source\n- `79a741f01` chore(i18n): translate dispatcharr deps install failure to 6 locales\n- `7b759609f` chore(software): seed software_information row for dispatcharr\n- `8a533262e` chore(i18n): translate vnstat reconciler strings to 6 locales\n- `98eaad03f` chore(i18n): translate dispatcharr first-install admin-only message to 6 locales\n- `a26f666b5` chore(i18n): translate lecert dispatcharr subdomain success message to 6 locales\n- `b83708d35` chore(i18n): mirror dispatcharr install-failure messages to 6 locales\n- `d13348e18` chore(i18n): translate dispatcharr source-patch failure to 6 locales\n- `def5ed838` chore(i18n): mirror dispatcharr admin credentials key to 6 locales\n- `f873ff170` chore(deps): promote heavy reusable daemons to base dependencies\n- `faf506072` chore(i18n): translate dispatcharr initdb failure message to 6 locales\n\n### ð General Changes (1)\n- `e3331c511` skip ci[meta] version 3.2.2.4815 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-06-09\n- **ð·ï¸ Version**: 3.2.2.5407\n- **ð Previous Version**: 3.2.2.4815\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"2d:Tca9,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (14)\n- `328443b6` feat(i18n): add release signature and integrity lang keys to all locales\n- `35150263` feat(dlindex): harden nginx templates and add nzbget/sabnzbd\n- `40af8c0c` feat(fail2ban): flag-gated opt-in jail auto-protect on install\n- `4cd591ae` feat(pull): re-source mflibs after lib refresh + add sibling-shell reload hint\n- `5ee366f9` feat(updater): verify release signature before applying a core update\n- `7cb38a0f` feat(update): translate atomic-update pipeline strings into 6 locales\n- `82d572b9` feat(qbpermmon): enforce ACLs on custom download paths under /mnt and /media\n- `863f9620` feat(fix): translate fix-guard validation string into 6 locales\n- `90db718a` feat(fail2ban): translate manage-CLI validation strings into 6 locales\n- `a355ef1e` feat(update): make v3 self-update atomic with staging, gating, and rollback\n- `b5751b7c` feat(build): add release integrity manifest generator and signing step\n- `c2cfd583` feat(dlindex): wire quickbox::dlindex::rebuild into all 6 clients\n- `d31da04d` feat(fail2ban): repeat-offender jail and 1h default ban\n- `fefdc8d0` feat(dlindex): add quickbox::dlindex::rebuild helper to mflibs\n\n### ð Bug Fixes (20)\n- `002fd6fd` fix(php): reliable mcrypt detection and age-based pool backup pruning\n- `14eec641` fix(fail2ban): harden install against missing apt conffiles\n- `2fd5e10b` fix(fail2ban): translate self-heal placeholder messages across locales\n- `4ef6cd76` fix(fail2ban): tighten over-broad filter patterns to prevent false-positive bans\n- `51ce3a10` fix(fail2ban): harden manage-CLI config apply with gate, rollback, and parse fixes\n- `5252e1d1` fix(dbfix): per-app column map, json fd restore, dead code removal\n- `5cd95a93` fix(qbpermmon): always enforce ACL on custom download paths\n- `6014bbb5` fix(pull): re-attach reloaded shell to '/dev/tty' and drop manual-source hint\n- `6200f4db` fix(update): verify v4-dashboard artifact signature before install\n- `647ebcb4` fix(pull): restore post-update shell reload by skipping tee on tty\n- `6602785c` fix(fail2ban): fix non-matching app filters and correct log targets\n- `6b9b884d` fix(fail2ban): fix plex/seerr format bugs and document phpMyAdmin log gap\n- `7ac27a86` fix(pull): auto re-source bashrc on next prompt after qb update\n- `aac56c99` fix(pull): capture TTY at start so post-update shell reload survives 'tee' redirect\n- `aad67b91` fix(fail2ban): accept -1 as permanent bantime in manage config\n- `abab86a8` fix(fix): guard repair modules against empty or invalid username\n- `ae25cfff` fix(pull): source ~/.bashrc at end of update\n- `b3428042` fix(fail2ban): translate permanent-ban CLI strings into 6 locales\n- `bca8ac60` fix(pull): source '~/.bashrc' after update\n- `bf949017` fix(devpull): always run php check, no held-package gate\n\n### ð§ Code Refactoring (1)\n- `e1f5ce7d` refactor(betapull): delegate php setup to qb fix php\n\n### ð General Changes (2)\n- `45a4a9cc` revert(pull): drop useless in-script 'source ~/.bashrc'\n- `440f9df3` skip ci[meta] version 3.2.2.4675 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-05-27\n- **ð·ï¸ Version**: 3.2.2.4811\n- **ð Previous Version**: 3.2.2.4675\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"2e:T10d7,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (20)\n- `05e7e258` feat(fail2ban): add v4-dashboard login jail, drop legacy v3 dashboard jail\n- `06c2aec7` feat(app-routing): add boot-time VPN namespace reconcile unit\n- `0debbf56` feat(rclone): route logs-op header through lang system\n- `0ffd6c10` feat(fail2ban): add config files to qbpermmon system enforcement matrix\n- `12014918` feat(fail2ban): add per-app jail/filter library config directory\n- `162c6b99` feat(fail2ban): translate CLI manager directives across all locales\n- `1658aab6` feat(rclone): add uloz.to lang keys, help text, and autocomplete\n- `1bf43bc9` feat(qbpermmon): event-driven reactor with notify watchdog and hardened service unit\n- `1fad77ef` feat(update): write 'logPath' to job state + emit 'QB_DONE' marker at pipeline exit\n- `224d0f4c` feat(rclone): add logs-header function to 6 non-en locales\n- `24b19d28` feat(update): route pipeline log to v4 dashboard log file during dashboard updates\n- `3bcfda22` feat(wireguard): install reconcile unit during WireGuard setup\n- `3be48b6f` feat(rclone): add companion-op lang keys to 6 non-en locales\n- `3e25f272` feat(rclone): add install-flag lang keys to en locale\n- `46eb5216` feat(fail2ban): add ignoreip allowlist helpers for support sessions\n- `5c7169f8` feat(update): backfill reconcile unit on existing WireGuard installs\n- `5daa4208` feat(fail2ban): add flag-driven config path for dashboard install modal\n- `681cd297` feat(rclone): add install error keys to 6 non-en locales\n- `695b17a4` feat(rclone): add companion-op lang keys to en core locale\n- `69ec606f` feat(qbpermmon): standalone test harness for matrix enforce restore behavior\n\n### ð Bug Fixes (20)\n- `00557640` fix(software): select highest-version release for asset downloads\n- `0540a364` fix(seerr): assign software_title to prevent .config removal on uninstall\n- `0a2414ab` fix(app-routing): wire reconcile unit to bundled node and project env\n- `0bcfd300` fix(update): stream dashboard update output via script typescript file\n- `0c12b6b8` fix(db): remove v4-dashboard skip noise from update and fix flows\n- `1471b4f3` fix(rclone): use canonical ulozto config field names (username/password)\n- `1b761dde` fix(update): silent service restarts in message::complete to clean up modal output\n- `1d0b9f8e` fix(update): chown v4 log to qbxdashboard at dispatch init to recover from rotation\n- `1fb005e0` fix(mylar3): assign software_title and fix update path mismatch\n- `1ffc7eb7` fix(update): stream dashboard update output directly from log file\n- `2100d1c1` fix(update): write systemd-run typescript to mflibs log so UI relay sees full flow\n- `212bfb03` fix(tautulli): convert to per-user templated systemd unit\n- `237e94c1` fix(apps): switch unsafe sed delimiters from / to | for password and URL path substitutions\n- `25cb4d81` fix(qbpermmon): debounce by matrix entry and skip enforce when perms match\n- `2e971a56` fix(update): resolve dashboardUpdate exit 200 chdir failure under systemd-run\n- `2ec0b2c3` fix(backup): split joined flag+value args in autobackup call (batch 4/4)\n- `2f693866` fix(update): resolve admin user from DB so v4 relay tails the correct log file\n- `330977b5` fix(rclone): validate credential flags before dependencies run\n- `3309de6f` fix(update): resolve admin user from DB before setting log path in dispatcher\n- `36f1c943` fix(rclone): wire uloz credentials for switch-provider op\n\n### ð§ Code Refactoring (3)\n- `49ee187e` refactor(fail2ban): wire new config directory into install and settings\n- `61fa5dcc` refactor(qbpermmon): drop unused service unit directives\n- `3ac72114` refactor(install): quiet apt in quickbox::install::dependencies helper\n\n### ð Documentation (1)\n- `c7c035ed` docs(fail2ban): document install options in the CLI help menu\n\n### ð§ Maintenance (2)\n- `06eae707` chore(betapull): include onSave-generated docs for betapull\n- `73e8adf0` chore(betapull): refresh encrypted artifact alongside v4 log routing\n\n### ð General Changes (2)\n- `d1fe12a2` perf(qbpermmon): halve sweep interval to 30s for faster permission recovery\n- `fcfd4314` skip ci[meta] version 3.2.2.4283 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-05-22\n- **ð·ï¸ Version**: 3.2.2.4675\n- **ð Previous Version**: 3.2.2.4283\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"2f:Tb7a,"])</script>
1<script>self.__next_f.push([1,"### What's new\n\n**Plex Media Server is now a first-class streaming backend in QuickBox Pro**, alongside the existing Emby and Jellyfin integrations. The What's Streaming Dashboard (WSDashboard) auto-detects a Plex install, auto-populates the server URL and token after install, and treats Plex sessions on full parity with the other two media servers - sessions, watch analytics, history, top items, intents, libraries, the per-item detail page, and the admin Playback Mirror all work against Plex out of the box.\n\nThis is the single biggest streaming-side expansion since WSDashboard launched.\n\n### Other improvements in this release\n\n- **Rate / vote from item cards.** Mark a five-star rating or heart-toggle a favorite directly from the streaming item card on Emby, Jellyfin, and Plex.\n- **Mark watched / unwatched** from item cards on Emby and Jellyfin.\n- **Responsiveness pass.** Denser layouts, better mobile and tablet behavior, and glassmorphic consistency across the System Dashboard widgets.\n- **History and Analytics polish.** Better contrast on the Watch History title cells, Live TV channel logos render at the correct fit, episode rows now display the show poster instead of per-episode screenshots, and admins can pin which media types appear in their Top Watched panel - saved per user.\n- **Playback Mirror parity.** The admin floating mirror dock now works against all three media servers and pre-rolls the upstream transcoder so the mirror opens in sync with the source user's stream instead of trailing behind.\n\n### How to get it\n\nRun `qb update quickbox` once the next public release is available, or wait for the dashboard auto-update to pick it up.\n\nIf you have not installed Plex yet, the canonical install passes the target user (and optionally a [plex.tv claim token](https://plex.tv/claim) for one-step server claim):\n\n```bash\nqb install plex -u username -pct 'claim-xxxxxxxxxxxxxxxxxxxx'\n```\n\nThe `-u` flag is required. The `-pct` token is optional but recommended - when present, the CLI reads it from Plex's own `Preferences.xml` after install and writes the resulting `X-Plex-Token` into the dashboard automatically. No settings-page round trip. The full set of install flags (`-u`, `-pct`, `-D` for a custom data directory, `-d` for a reverse-proxy domain) is documented at `https://v3.quickbox.io/docs/applications/media-servers/plex`.\n\n### Where to read more\n\nA full walkthrough of the new Plex support and the rest of the dashboard improvements is being published at `https://v3.quickbox.io/articles/plex-media-server-now-supported-quickbox-wsdashboard` Tuesday morning. Check back then for the deep dive - what works on parity, what is server-specific, and how the new dashboard surfaces fit together.\n\n---\n\nThank you for sticking with QuickBox Pro. Plex support has been one of the most requested integrations since the Streaming Dashboard shipped, and we are thrilled to finally have it in your hands."])</script>
1<script>self.__next_f.push([1,"30:T423,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (1)\n- `3eeceb7d` feat(plex): wrap claim curl in ip netns exec when VPN app-routing active\n\n### ð Bug Fixes (1)\n- `fad9b3f4` fix(release): drop sourceguardian and src/dashboard from build pipeline\n\n### ð§ Code Refactoring (1)\n- `c3833e40` refactor(wbSettings): drop redundant php-fpm restart from webroot module\n\n### ð Documentation (2)\n- `704f31cd` docs(devres): drop stale src/dashboard references from README\n- `763af4f7` docs(meta): mark src/dashboard deprecated in .github docs and instructions\n\n### ð§ Maintenance (3)\n- `1da66bc3` chore(devres): regenerate betapull obfuscated source and binary\n- `4f786438` chore(version): bump wbSettings + README via onSave\n- `635b8d59` chore(deprecation): remove deprecated src/dashboard php tree\n\n### ð General Changes (1)\n- `1bf0b80e` skip ci[meta] version 3.2.2.4268 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-05-07\n- **ð·ï¸ Version**: 3.2.2.4274\n- **ð Previous Version**: 3.2.2.4268\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"31:T8e5,"])</script>
1<script>self.__next_f.push([1,"### Update\n\n**The fix is now live.** Release `3.2.2.4268` is available in the public channel and includes the corrected install logic. Running `qb update quickbox` will pull it down â no manual intervention required. Fresh installs of rTorrent / ruTorrent will work correctly after updating.\n\n### Status\n\nWe have been notified of and have identified an issue affecting **fresh installs** of `rtorrent` and `rutorrent` where ruTorrent fails to connect to rTorrent after install. The fix has been committed and is currently in the **beta channel** undergoing final testing before public release.\n\nIf you are an existing rTorrent / ruTorrent user, **you are not affected** â your client connection remains intact and no action is required on your part.\n\n### Scope\n\n- **Affected:** new installs of rTorrent + ruTorrent on a server that has not previously had them installed.\n- **Not affected:** existing installs, reinstalls on top of a working configuration, or any other application in the QuickBox catalog.\n- **Where it surfaces:** ruTorrent loads in the browser but reports it cannot reach rTorrent (no torrents listed, settings panel blank or erroring).\n\nThe issue was originally replicated on Debian 13, but the root cause is **not Debian 13 specific** â the fix applies across all supported distributions (Debian 11, 12, 13 and Ubuntu 22.04+).\n\n### What's next\n\n- The fix is in beta and being run through final verification across our supported distribution matrix.\n- Once verification clears, it will roll out as a standard `qb update quickbox` release. No manual intervention will be required â running the update will pick up the corrected install logic for any future rTorrent / ruTorrent installations.\n- Beta squad members can pull the fix now via `betapull`.\n\n### Reference\n\n- Fix commit: `b0bfd72e` â `fix(rtorrent): rutorrent â rtorrent connectivity on Debian 13`\n\nIf you have already attempted a fresh install of rTorrent / ruTorrent and run into the connectivity symptom, please reach out in the support channel and we'll get you sorted while the patched release goes through final testing.\n\n---\n\nThank you for your patience while we get this through QA properly. Catching it in beta before a wider release is exactly what the testing pipeline is for."])</script>
1<script>self.__next_f.push([1,"32:T865,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (11)\n- `0485dbcb4` feat(setup): install fancyindex dynamic module on fresh install\n- `113081b38` feat(lang): parity user-perms backfill keys across 6 locales\n- `327dc9c2f` feat(lang): parity pipeline-nginx fancyindex keys\n- `42d987088` feat(lang): add pipeline-nginx fancyindex keys (en)\n- `54fb8be4a` feat(lang): add 'rtorrent::runtime::migrate::acl_backfilled' key\n- `572ac43d0` feat(system/pipeline-nginx): build fancyindex module on update\n- `58c112741` feat(system/pipeline-nginx+devpull+betapull): persist fancyindex build log + split failure messages\n- `5a38916c3` feat(lang): parity round-2 fancyindex keys across 6 locales\n- `6fbedce8e` feat(system/fix): add user-perms backfill for qbusers home-dir ACL\n- `b29976142` feat(user): default 'g:qbusers:rwX' ACL on home dirs\n- `e91e59486` feat(developer_resources): parity fancyindex module build to devpull + betapull\n\n### ð Bug Fixes (10)\n- `200593470` fix(flood,rtorrent): close shim socket access for cross-group consumers (#188)\n- `4cb7a9dcc` fix(flood): cascade rtorrent restarts to shim and close first-start race\n- `4cf33a2e8` fix(flood): drop wrong-target admin gate + guard update for missing user\n- `4fab12dcc` fix(system/fix): drop bash strict-mode breaking mflibs in user-perms\n- `697e6a52c` fix(system/nginx): drop unsupported 'fancyindex_name_length' from snippet\n- `77f055834` fix(system/pipeline-nginx+devpull+betapull): remove '.so' short-circuit in 'fancyindex_compat'\n- `c330325b4` fix(system/software): emit rutorrent update entry when version differs\n- `c6e937d9c` fix(system/pipeline-nginx+devpull+betapull): redeploy fancyindex snippet\n- `ce24ae50d` fix(rtorrent): backfill 'qbusers' rw ACL on '.rtorrent.rc'\n- `f75825afa` fix(rtorrent): hoist users_all + reload nginx after install (#188)\n\n### ð General Changes (2)\n- `9e4c5737f` ci(release): move cleanup job to self-hosted runner\n- `4a138e07f` skip ci[meta] version 3.2.2.4178 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-04-25\n- **ð·ï¸ Version**: 3.2.2.4252\n- **ð Previous Version**: 3.2.2.4178\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"33:T75f,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (3)\n- `3ddbd3212` feat(lang): translate the new qbittorrent nginx healer messages into six languages\n- `6e163ffa9` feat(lang): add rtorrent::runtime::migrate::stripped key across locales\n- `c39bd4862` feat(lang): translate the rtorrent \"package not found\" warning into the other 6 languages\n\n### ð Bug Fixes (13)\n- `00a571b41` fix(rtorrent): replace mflibs::log misuse with shell::text + lang lookup in runtime migrate\n- `17de9731f` fix(mflibs): canonicalize dual-write paths to prevent user_software duplicates\n- `2e06eb657` fix(qbittorrent): silence nginx warning about duplicate retry values\n- `665abfd79` fix(qbittorrent): 'qb update qbittorrent' now self-heals the old nginx warning\n- `79b5197b1` fix(rtorrent): add idempotent runtime migration for existing installs\n- `7b39ae4a7` fix(rtorrent): remove dead permission-staging lines from rtorrent.rc template\n- `847be6930` fix(headphones): let systemd manage the Headphones runtime folder\n- `93da6aa5e` fix(rtorrent): show the \"package not found\" warning to users instead of silently swallowing it\n- `abb3e4e52` fix(rtorrent): migrate SCGI runtime dir to systemd RuntimeDirectory\n- `b4f6ea7bc` fix(db): emit NULL for empty port values in user_software writers\n- `cab190aba` fix(rtorrent): stop accumulating extra '#' on tracker_error line during reinstalls\n- `dd1766365` fix(rtorrent): reinstalls now restart the flood bridge automatically\n- `fe62d5b98` fix(software): app installs no longer create duplicate database rows\n\n### ð§ Maintenance (1)\n- `19b1fc434` chore(version): bump for rtorrent SCGI runtime dir fix\n\n### ð General Changes (1)\n- `7c505c1d7` skip ci[meta] version 3.2.2.4047 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-04-13\n- **ð·ï¸ Version**: 3.2.2.4154\n- **ð Previous Version**: 3.2.2.4047\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"34:T494,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (2)\n- `c22425da9` feat(software): integrate packages.lst cache for torrent client version resolution\n- `eddeb30e1` feat(packages): add packages.lst fetcher/parser/cache module\n\n### ð Bug Fixes (7)\n- `08d6fbbd4` fix(setup): create 'sites-enabled'/'sites-available' dirs and remove conflicting 'conf.d/default.conf'\n- `0b4724833` fix(nginx): use 'fastcgi_params' instead of 'fastcgi.conf' in snippet\n- `593630f39` fix(software): replace fragile 'software_id' DELETE with 'software_name' pattern in 5 scripts\n- `5d9dd3733` fix(ombi): preserve databases and config on reinstall\n- `779999e02` fix(mflibs): correct field separator in compiled-packages query + cache permissions\n- `9a7039e40` fix(rtorrent): separate reinstall from remove to prevent user data destruction\n- `e6b60540f` fix(nextcloud): harden php8.4 install, permission model, and 'occ' reliability\n\n### ð General Changes (1)\n- `5819f0bc5` skip ci[meta] version 3.2.2.3975 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-04-07\n- **ð·ï¸ Version**: 3.2.2.3989\n- **ð Previous Version**: 3.2.2.3975\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"35:T98b,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (5)\n- `44b8e1d10` feat(nginx): add nginx.org stable repo to setup and update pipeline\n- `5a7112380` feat(lang): add --staging, --dry-run flags and CF_Account_ID to lecert help\n- `617515c2f` feat(fix): add multi-version PHP management with hold/unhold to phpFix\n- `777abb372` feat(nextcloud): replace hardcoded PHP 8.4 error strings with lang keys\n- `9a9e95076` feat(lecert): wire --staging and --dry-run flags to acme.sh execution\n\n### ð Bug Fixes (14)\n- `02845b4e0` fix(user): align default group and conditional php-fpm restart in user::create\n- `083f109a5` fix(php-fpm): change reload to restart for PHP-FPM in phpFix and install scripts\n- `0be4e6d97` fix(nextcloud): harden PHP 8.4 migration â apt cache refresh, exit code checks, conflict resolution\n- `25252def9` fix(tautulli): resolve update crash from stale '__pycache__' namespace packages\n- `2c6a46a81` fix(qb): fix Pass 3 break-on-unknown-arg and remove dead export\n- `3ff20828e` fix(nginx): extract 'fancyindex_compat' into standalone function that runs unconditionally\n- `6f5af4115` fix(nginx): sync 'devpull' and 'betapull' with pipeline nginx upgrade + http2 migration\n- `99a6135bd` fix(lecert): replace hardcoded English with lang keys, add help for staging and dry-run flags\n- `a9ed2cf76` fix(software): add marker file auto-detect for 4 apps missing channel persistence on update\n- `be76e3704` fix(lecert): replace fatal kills with return codes in subdomain helpers\n- `db808f1b6` fix(sabnzbd): auto-detect beta channel from marker file during updates\n- `e60a4b740` fix(software): harden PHP-FPM pool security and install script compliance\n- `f9083d287` fix(php-fpm): change reload to restart across all system and software scripts\n- `fb95f5b00` fix(nginx): disable fancyindex directives and includes when module is unavailable\n\n### ð§ Code Refactoring (1)\n- `bbceaf63a` refactor(lecert): remove PHP refs, extract helpers, fix nginx http2 deprecation\n\n### ð§ Maintenance (1)\n- `2387bcaaa` chore(nginx): update dependencies for nginx.org package and remove fancyindex 'load_module'\n\n### ð General Changes (2)\n- `faf364dba` i18n(lecert): add lang keys for staging and dry-run messages\n- `e47ef1328` skip ci[meta] version 3.2.2.3858 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-04-01\n- **ð·ï¸ Version**: 3.2.2.3970\n- **ð Previous Version**: 3.2.2.3858\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"36:T81e,"])</script>
1<script>self.__next_f.push([1,"### ð Bug Fixes (18)\n- `054d9329d` fix(i18n): migrate /srv/quickbox/db/ to /opt/quickbox/db/ in help.sh across 7 locales\n- `3e161618d` fix(rutorrent): harden PHP 8.1 install + add FPM socket verification\n- `3e3d59148` fix(system): migrate /srv/quickbox/db/ and /srv/quickbox/custom/ paths in system scripts, config, and bin files\n- `4653d60cd` fix(rutorrent): remove PHP packages from dependencies file, fix held-package failures on trixie\n- `5addbd60b` fix(quota): fix quota-aware disk display across ruTorrent, v4 dashboard, and sudoers\n- `6b3dab260` fix(jellystat): gate deprecated process_menu.php write behind v4 check\n- `6e53bfbbc` fix(system): remove constants.php dependency across system scripts, software, and dev resources\n- `8afe7204f` fix(software): migrate /srv/quickbox/db/ and /srv/quickbox/custom/ to /opt/quickbox/\n- `8f172e528` fix(diskspace): remove DB quota dependency, default diskMount to /, add PHP_AUTH_USER fallback\n- `a0ec8063c` fix(filebot): replace dead Oracle PPA with distro-conditional Java, fix post-processing flag handling\n- `b5ec4f2d8` fix(software): gate deprecated processmenu.php writes behind v4 check in 7 software scripts\n- `bec246233` fix(fail2ban): migrate log path from /srv/quickbox/logs/ to /opt/quickbox/logs/\n- `d6eb4f3e5` fix(logs): migrate /srv/quickbox/logs/ to /opt/quickbox/logs/\n- `d7b0a954d` fix(quota): improve fstab handling + add mount completion messages\n- `f0460e3bd` fix(quota): replace broken sed escaping with awk field-based fstab transform\n- `f573ffab3` fix(system): gate themeSettings /srv/quickbox/ ops behind v4 check, migrate changelog paths\n- `f6317d6f3` fix(i18n): migrate /srv/quickbox/logs/ to /opt/quickbox/logs/ across 7 locales\n- `fb9540720` fix(rutorrent): restore per-user quota support in diskspace plugin\n\n### ð General Changes (1)\n- `cfe7b9d24` skip ci[meta] version 3.2.2.3554 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-03-26\n- **ð·ï¸ Version**: 3.2.2.3710\n- **ð Previous Version**: 3.2.2.3554\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"37:T543,"])</script>
1<script>self.__next_f.push([1,"### Update\n\nThe installer and updater compatibility issues have been resolved. The core fix addresses glibc compatibility on Debian 11 (bullseye) systems where the SHC-compiled install and update scripts were failing with `GLIBC_2.33`/`GLIBC_2.34` errors. The release pipeline now compiles these scripts inside a Debian 11 container, ensuring the resulting binaries are compatible with all supported distributions (Debian 11+, Ubuntu 22.04+).\n\nAdditionally, glibc detection has been added to the v3 update pipeline. Systems running older glibc versions are now automatically identified and flagged for compatibility mode, allowing the v4-dashboard installer to select the correct Node.js builds for the target system.\n\nBoth the installer and updater should now function correctly across all supported platforms. If you continue to experience issues, please reach out in the support channel.\n\n---\n\nWe have had several reports with the new update process as well as the new installer. These issues were occurring due to the new modular setup of both of these core utilities. The root cause has been identified and fixed -- the CI release pipeline was compiling encrypted scripts on a system with a newer glibc than what Debian 11 provides, producing binaries that could not load on older systems. Installs and updates should be much more stable now."])</script>
1<script>self.__next_f.push([1,"38:T4c7,"])</script>
1<script>self.__next_f.push([1,"### ð Bug Fixes (9)\n- `058067d99` fix(setup): remove 'ERR' from orchestrator trap that broke fresh installs\n- `1a5d26a7d` fix(ci): restore 'QUALITY_STAGE=1' in 'variables.env' clobbered by prior commit\n- `241361ea6` fix(setup): remove 'set -Eeuo pipefail' from all 7 installer modules\n- `26961570c` fix(update): fix 'pipeline-download' zip extraction picking '.git/' on flat archives\n- `4ffc781c8` fix(setup): move 'set -Eeuo pipefail' after mflibs init in all 7 installer modules\n- `a07f37402` fix(setup): fix mflibs extraction picking '.git/' instead of repo contents\n- `b626d5bf2` fix(setup): remove dead 'v4_db' declaration from orchestrator and quote '$rc'\n- `c4dfc4ccc` fix(setup): fix variable scoping bugs in 'setup_system' and 'setup_dashboard' modules\n- `d783dcc10` fix(setup): fix beta module download URL to match pipeline push destination\n\n### ð§ Code Refactoring (1)\n- `e4748642e` refactor(setup): modularize 'quickbox_install' into 7 standalone SHC-encrypted modules\n\n### ð General Changes (1)\n\n- Version bump to 3.2.2.3489\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-03-24\n- **ð·ï¸ Version**: 3.2.2.3489\n- **ð Previous Version**: 3.2.2.3455\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"39:T1514,"])</script>
1<script>self.__next_f.push([1,"It's official. After nearly **two years** of development, countless late nights, and more refactoring than I care to admit... the **v4 Dashboard** is live. Today. Right now.\n\nIf you've been following along, you know this has been a long road. What started as a plan to modernize the old PHP dashboard turned into a complete ground-up rebuild; a brand new application built on a modern stack that's faster, more capable, and honestly, more fun to use than anything we've ever shipped. This isn't a patch job. This is the real deal.\n\nI'm not going to lie, seeing this finally go live feels surreal. This project has been a labor of love, built piece by piece between everything else that keeps QuickBox running. And now it's yours.\n\n### What's New in v4\n\nI could write a novel about everything that's changed, but here are a few highlights to get you excited:\n\n- **Real-Time System Telemetry** â CPU, memory, network, and disk stats streaming live to your browser. No more SSH-ing in just to check if your server is behaving.\n- **Completely Redesigned Application Management** â Install, update, remove, and configure your applications from a clean, modern interface. Version tracking, update badges, and one-click operations for everything.\n- **Streaming Dashboard** â For those running Emby or Jellyfin and *Plex (coming soon! Follow the [Roadmap](https://v3.quickbox.io/roadmap))*, you now have a dedicated streaming dashboard that shows active sessions, library stats, and stream health, all built right into the dashboard.\n- **Notification System** â Smart notifications for updates, system events, and application status changes. Get notified when something needs your attention, not when it doesn't.\n- **Dark Mode \u0026 Multiple Themes** â Four complete theme palettes to choose from. The dashboard finally looks as good as the servers it manages.\n\nAnd that's just scratching the surface.\n\n### The Update Is Automatic\n\nHere's the important part: **you don't need to do anything special to get v4.** When you run your regular QuickBox updates, the dashboard will automatically migrate from v3 to v4. No manual commands, no extra steps. It just happens.\n\nYour existing credentials carry over. Your settings carry over. Your installed applications... all still there. The transition is seamless.\n\n**One thing to note:** Because this is an entirely new framework, your dashboard URL will change. After the update, you'll access your dashboard at:\n\n```\nhttps://your-server-or-domain/login\n```\n\nThe old PHP dashboard paths (`.php`) will no longer work, so **update your bookmarks** accordingly.\n\n### v3 Core \u0026 v4 Dashboard: Separate But United\n\nOne of the bigger architectural changes worth knowing about: **the v3 CLI core and the v4 Dashboard are now independent of each other.** They still work together (the CLI manages your server and the dashboard gives you the interface), but they update separately.\n\nWhat this means for you:\n\n- **Dashboard updates are independent.** When a new dashboard version drops, it updates on its own without touching the core.\n- **Core updates are independent.** CLI improvements and package updates ship on their own schedule.\n- **Running `qb update quickbox` handles everything.** It checks for available updates to both the core and the dashboard and applies whatever's available. If only the dashboard has a new version, only the dashboard updates. If both do, both update. Simple.\n\nThis separation gives us the flexibility to ship improvements faster on both sides without one blocking the other.\n\n### Your New Home: v3.quickbox.io\n\nIf you haven't already made the move, now's the time. **[v3.quickbox.io](https://v3.quickbox.io)** is the new home for everything QuickBox Pro; account management, subscriptions, documentation, and support.\n\nIf you're coming from the old quickbox.io, you can migrate your account, API keys, and order history using our **[Migration Utility](https://v3.quickbox.io/docs/v3-portal/migration-utility)**. It's quick, it's painless, and
1your existing pricing is grandfathered. You won't pay a cent more.\n\nFor the full details on the platform transition, check out our earlier announcement: [QuickBox Pro Platform Evolution: Moving to v3.quickbox.io](https://quickbox.io/announcements/quickbox-pro-platform-evolution-moving-to-v3-quickbox-io/).\n\n### Thank You, All of You\n\nThis dashboard is the product of nearly **a decade** of feedback from the QuickBox community. Every feature request, every support ticket, every \"wouldn't it be cool if...\" conversation in Discord... it all went into shaping what v4 became. The ideas, the patience, the loyalty through every phase of this project; that's what built this.\n\nTo the **Beta Squad**, thank you for putting v4 through its paces in the final stretch. Your testing and bug reports in those last months before launch were invaluable. And to **every single user** who has been part of this community over the years, whether you joined last week or you've been here since the beginning, this dashboard exists because of you. Your feedback over the years is what drove every decision behind v4.\n\nThank you.\n\n### What's Next\n\nThis is just the beginning. The v4 dashboard and the new platform give us a foundation we can build on for years to come. There's a lot more in the pipeline, and I can't wait to show you what's next.\n\nWelcome to the new era of QuickBox Pro.\n\n~ JMSolo ð"])</script>
1<script>self.__next_f.push([1,"3a:T1c41,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (20)\n- `042a29ee7` feat(update): add conditional dashboard update check to pipeline-dashboard\n- `0d5aed53d` feat(seerr): add v3 dashboard migration UI for jellyseerr and overseerr\n- `104e96dd6` feat(i18n): add dashboard version check translations for all CLI locales\n- `16741ce88` feat(seerr): add unified media request manager\n- `1c0dea9e9` feat(update): channel-aware routing and post-update environment reload\n- `223dd8804` feat(seerr): add coordination rules\n- `2261bf373` feat(php): per-app PHP isolation â remove system-level PHP entirely\n- `2fcfbb2ca` feat(software): trigger v4 dashboard API after software check completes\n- `457a3a62d` feat(setup): add --beta flag to bootstrap installer for test-v3 channel\n- `4c8bea585` feat(software): migrate jellyseerr and overseerr updates to seerr\n- `5079b9c29` feat(iris): add v4-dashboard dual-compatibility to MOTD and database resolution\n- `5154909dd` feat(update): auto-install v4-dashboard when not detected during updates\n- `682aef762` feat(znc): add programmatic install mode for dashboard integration\n- `6925564f2` feat(nextcloud): isolated PHP 8.4 environment for Nextcloud\n- `78f970ef3` feat(system): add v4-dashboard guards to update, fix, and devpull scripts\n- `906f24a5b` feat(software): add upstream package availability detection for Servarr apps\n- `957f4d05f` feat(update): add conditional dashboard update check to devpull and betapull\n- `9eb5f9930` feat(mflibs): sync database writes to v4 dashboard databases\n- `b5a904420` feat(user): read username policy from database instead of hardcoded validation\n- `c542d64d2` feat(rtorrent): add rTorrent/libtorrent '0.16.7' as default build version\n\n### ð Bug Fixes (20)\n- `0156cfe07` fix(wireguard): removal count guard skips cleanup when DB row already gone\n- `040a66eb0` fix(system): resolve v4-dashboard guard bugs in update scripts\n- `04c657797` fix(software): correct truncated mflibs imports and metadata mismatches\n- `071f5e5e8` fix(nginx): add custom domain guard and betapull apps-http provisioning\n- `07c6695f7` fix(ci): replace 'gh' CLI with 'curl' in artifact cleanup step\n- `0a93666ff` fix(manage): rewrite SQLiteâMariaDB conversion with v4-aware discovery layer\n- `0b6c3c407` fix(manage): always update 'constants.php' during provider switch â v3 backward compatibility\n- `0cdad7482` fix(central): remove '2\u003e\u00261' stderr redirect from central API curl calls, migrate to v4 proxy\n- `0e91f8a38` fix(jellyfin,lidarr): preserve beta selection on update and fix branch detection\n- `11cd3847a` fix(manage): enable v4 auto-migration after provider switch in 'dbSettings'\n- `13be1d661` fix(netdata): restore 'sysctl.conf' to correct path on removal\n- `154af2a20` fix(core): use '\"${args@}
1\"' for arg dispatch in 'qb' binary + fix seerr backup quoting\n- `19e41135a` fix(devpull): update proxy URLs from release-proxy.php to release-proxy-v4.php\n- `1ab5cdd2b` fix(software): add 'LIMIT 1' to all 'software_port' queries to prevent duplicate-row crashes\n- `1b30678b9` fix(system): remove netdata from update pipeline, relocate bandwidth polling, fix shell cd\n- `1e5007d8a` fix(iris): stabilize module system â security, reliability, and cleanup\n- `1fedabaf6` fix(nextcloud): move MIME type handling to Nextcloud nginx config, add '.js.map' support\n- `232cdab21` fix(tautulli): resolve missing Python modules after update\n- `276a8b11b` fix(apiSettings): use v4 paths for software update files when v4-dashboard is installed\n- `29e4cbe2b` fix(software): resolve stale-read race condition in version check producing empty 'software_current_version'\n\n### â¨ï¸ Critical Fixes (1)\n- `c42fe61e0` hotfix(software): fix port mismatch in seerr install and port collision detection\n\n### ð§ Code Refactoring (20)\n- `41569cf1b` refactor(i18n): replace hardcoded dashboard version check strings with lang functions\n- `aa7ed6900` refactor(software): replace hardcoded English in legacy netdata 'qb-poll_netstats' with translation calls\n- `79ba89af0` refactor(bin): replace last hardcoded 'printf' in 'qb-vnstat' with translation call\n- `d41def010` refactor(bin): replace final hardcoded English in 'qb-vnstat' with translation calls\n- `31b2cc336` refactor(bin): replace hardcoded English in 'nvpn_conf_gen' with translation calls\n- `ee5531383` refactor(system): replace hardcoded English in remaining LOW priority files with translation calls\n- `f51b58682` refactor(system): replace remaining straggler hardcoded strings with translation calls\n- `73f41370e` refactor(system): replace hardcoded English in LOW priority files with translation calls\n- `021b44a15` refactor(system): replace hardcoded English in MEDIUM priority modules with translation calls\n- `dffb96242` refactor(manage): replace remaining hardcoded English in 'apiSettings' with translation calls\n- `546637d4c` refactor(system): replace hardcoded English in HIGH priority system files with translation calls\n- `24728b2e2` refactor(software): replace hardcoded English strings with translation function calls\n- `7b6ae4427` refactor(system): replace hardcoded English strings with translation function calls\n- `8b46e730c` refactor(pipeline): split 1854-line monolith into 9 standalone SHC-compatible sub-modules\n- `63a93c063` refactor(devpull): remove automatic dashboard updates from dev pull\n- `a9b435d22` refactor(manage): extract API settings into dedicated module and fix self-update download lists\n- `c9d289663` refactor(update): extract shared pipeline from fix and quickboxUpdate into common module\n- `e2c3e9e63` refactor(phpFix): remove dead 'quickbox::dashboard::log' function\n- `02033
11d06` refactor(devpull): modernize download, theme, and cleanup logic\n- `2add12e08` refactor(system): modularize update system and add dashboard support\n\n### ð Translations (3)\n- `0ef238f89` translation(cli): propagate 463 new translation functions to zh-cn locale + pt core.sh version bump\n- `42a71ff2c` translation(cli): propagate 463 new translation functions to de, es, fr, pt, dk locales\n- `0b4f1a85b` translation(cli): add English baseline keys for hardcoded system strings\n\n### ð§ Maintenance (8)\n- `1bd3a9a77` chore(seerr): bump to v1.0.4 with migration support and updated docs\n- `2940cab16` chore(version): bump versions for seerr and quickbox edits\n- `2e0c32e66` chore(dev-tools): recompile 'betapull' encrypted binary\n- `3f9f5ef6d` chore(cleanup): remove dead code qbUpdate3 and companion files\n- `4d0919af7` chore(dev): update betapull compiled artifacts\n- `688d085ff` chore(version): re-run onSave with correct absolute paths\n- `85246102a` chore(prepull): add v4-dashboard pre-release update support\n- `996297158` chore: cleanup - release prep work\n\n### ð¨ Style Changes (1)\n- `99148447e` style(dashboardUpdate): apply 'shfmt' formatting and 'shellcheck' annotations\n\n### ð General Changes (4)\n- `7641d91cd` dev(chore): minor testing cleanup(s)\n- `dc0ad78e5` dev(chore): settings adjust per library discovery\n- `2509dd38a` dev(task): adds database functions\n- `0bb6e9394` skip ci[meta] version 3.2.2.3074 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-03-24\n- **ð·ï¸ Version**: 3.2.2.3455\n- **ð Previous Version**: 3.2.2.3074\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"3b:T5b4,"])</script>
1<script>self.__next_f.push([1,"### ð§© New Features (2)\n- `78fe3853f` feat(system/news): enhanced 'qb news --all' display with timestamps, separators, and word-wrap\n- `798d210f2` feat(system/news): multi-file announcements with seen tracking\n\n### ð Bug Fixes (8)\n- `27a7851ed` fix(system/update): ensure fresh binary and mflibs downloads\n- `28de163c8` fix(system/fix): resolve binary download race and duplicate params\n- `5395a2cea` fix(system): refactors changelog generation for accuracy\n- `78fe3853f` feat(system/news): enhanced 'qb news --all' display with timestamps, separators, and word-wrap\n- `815d8b89e` fix(scripts/changelog): restore backticks and keep full commit message\n- `a7f20c712` fix(system): resolve latest release tag per channel\n- `b060e17f1` fix(system): stabilize update and fix download flows\n- `d6bef6be0` fix(system/news): drop legacy news_output parsing\n\n### 𧪠Tweaks \u0026 Minor Changes (1)\n- `20cf0cdc6` tweak(system/iris): improves color output\n\n### ð General Changes (4)\n- `b733bce9c` dev(task): extract previous version from changelog for announce files\n- `ba34af87d` dev(chore): updated copy year across project files\n- `6c8af0f1e` dev(chore): updated tag stacking on version runner discovery\n- `fb62b38b4` skip ci[meta] version 3.2.2.2743 released upstream - eta ~10 minutes\n\n---\n\n**Release Information**:\n- **ð
Release Date**: 2026-01-23\n- **ð·ï¸ Version**: 3.2.2.3074\n- **ð Previous Version**: 3.2.2.2743\n- **ð Release Type**: production"])</script>
1<script>self.__next_f.push([1,"e:[\"$\",\"main\",null,{\"className\":\"min-h-screen bg-[var(--background)] text-[var(--foreground)] relative overflow-x-hidden\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute inset-0 overflow-hidden pointer-events-none\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute inset-0 bg-[radial-gradient(ellipse_at_40%_20%,rgba(38,174,127,0.08),transparent_60%)]\"}],[\"$\",\"div\",null,{\"className\":\"absolute inset-0 bg-[radial-gradient(ellipse_at_70%_80%,rgba(42,235,203,0.05),transparent_50%)]\"}],[\"$\",\"div\",null,{\"className\":\"absolute inset-0 bg-[linear-gradient(rgba(255,255,255,0.02)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.02)_1px,transparent_1px)] bg-[size:80px_80px]\",\"style\":{\"maskImage\":\"radial-gradient(ellipse 80% 40% at 50% 0%, black, transparent)\"}}]]}],[\"$\",\"$L19\",null,{}],[\"$\",\"$16\",null,{\"fallback\":[\"$\",\"section\",null,{\"className\":\"relative pt-32 pb-24 px-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"container mx-auto max-w-4xl text-center\",\"children\":[[\"$\",\"div\",null,{\"className\":\"animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-[var(--accent)] mx-auto mb-4\"}],[\"$\",\"p\",null,{\"style\":{\"color\":\"var(--muted-fg)\"},\"children\":\"Loading announcements...\"}]]}]}],\"children\":[\"$\",\"$L1a\",null,{\"items\":[{\"filename\":\"news_announce.20260922-2251\",\"type\":\"news\",\"title\":\"Your Dashboard, Your Language\",\"date\":\"September 22, 2026\",\"timestamp\":\"20260922-2251\",\"preview\":\"ð Your dashboard, your language: translations are back, and now they're per user Seven languages, one click away. The QuickBox Pro dashboard now speaks English, Deutsch, Dansk, Español, Français, Por...\",\"content\":\"$1b\"},{\"filename\":\"version_announce_3.2.2.7114.20260922-2233\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.7114\",\"date\":\"September 22, 2026\",\"timestamp\":\"20260922-2233\",\"preview\":\"feat(software): detect build-rev rebuilds of compiled .deb apps as updates feat(i18n): add -o version help for transmission and qbittorrent feat(rtorrent): make the .rtorrent.rc command conversion r...\",\"content\":\"$1c\",\"version\":\"3.2.2.7114\"},{\"filename\":\"news_announce.20260915-0314\",\"type\":\"news\",\"title\":\"Writeback Cleanup, and Native IPTVBoss Support\",\"date\":\"September 15, 2026\",\"timestamp\":\"20260915-0314\",\"preview\":\"ð§° Two additions: a one-click fix for a
1wedged server, and IPTVBoss as a native app Writeback cleanup. Ever had your load average slowly climb over hours or days while the box stays responsive and not...\",\"content\":\"$1d\"},{\"filename\":\"version_announce_3.2.2.6902.20260914-2343\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.6902\",\"date\":\"September 14, 2026\",\"timestamp\":\"20260914-2343\",\"preview\":\"feat(update): run core-first when the CLI is behind on 'qb update dashboard' feat(i18n): add dashboard corefirst lang key to 6 locales fix(update): tag dev-channel CLI changelogs as dev, not beta f...\",\"content\":\"### ð§© New Features (2)\\n- `90c769979` feat(update): run core-first when the CLI is behind on 'qb update dashboard'\\n- `9cdf17c48` feat(i18n): add dashboard core_first lang key to 6 locales\\n\\n### ð Bug Fixes (2)\\n- `0576ac562` fix(update): tag dev-channel CLI changelogs as dev, not beta\\n- `baab25b5e` fix(update): stop a standalone dashboard update re-running a full core update\\n\\n### ð General Changes (1)\\n- `d104d076e` skip ci[meta] version 3.2.2.6892 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-09-14\\n- **ð·ï¸ Version**: 3.2.2.6902\\n- **ð Previous Version**: 3.2.2.6892\\n- **ð Release Type**: production\",\"version\":\"3.2.2.6902\"},{\"filename\":\"version_announce_3.2.2.6892.20260914-0126\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.6892\",\"date\":\"September 14, 2026\",\"timestamp\":\"20260914-0126\",\"preview\":\"feat(iptvboss): complete CLI autocomplete, TUI menu and lecert surfaces feat(fix): add 'qb fix writeback' for the kernel writeback cleanup livelock feat(i18n): add the fix delete-safety menu label i...\",\"content\":\"$1e\",\"version\":\"3.2.2.6892\"},{\"filename\":\"news_announce.20260907-2107\",\"type\":\"news\",\"title\":\"A Reel Media Nerd Hangout: #watch-recommendations and the Reel Riddle\",\"date\":\"September 7, 2026\",\"timestamp\":\"20260907-2107\",\"preview\":\"ð¬ A Reel Media Nerd Hangout: say hello to #watch-recommendations, and the Reel Riddle If you run a media server, you probably have opinions about what to watch next. We built a place for them. #watch...\",\"content\":\"$1f\"},{\"filename\":\"news_announce.20260905-1754\",\"type\":\"news\",\"title\":\"Hardware Health, and a Sharper System Dashboard\",\"date\":\"September 5, 2026\",\"timestamp\":\"20260905-1754\",\"preview\":\"𩺠The System Dashboard just got a lot better at telling you how your server is doing The System Dashboard is the admin page where you check on the box - it lives at the top of the sidebar under Dashb...\",\"content\":\"$20\"},{\"filename\":\"version_announce_3.2.2.6733.20260905-1748\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.6733\",\"date\":\"September 5, 2026\",\"timestamp\":\"20260905-1748\",\"preview\":\"fix(setup): export GITTERMINALPROMPT=0 so no git op can hang on a prompt fix(apps): keep airsonic and filebot on the newest OpenJDK 17+ alternative fix(apps): install distro OpenJDK for Java apps, d...\",\"content\":\"### ð Bug Fixes (6)\\n- `27d608074` fix(setup): export GIT_TERMINAL_PROMPT=0 so no git op can hang on a prompt\\n- `6941de786` fix(apps): keep airsonic and filebot on the newest OpenJDK 17+ alternative\\n- `9d92eba38` fix(apps): install distro OpenJDK for Java apps, drop the dead Java PPA\\n- `b7a26799a` fix(setup): stop the iris clone prompting on a blocked network\\n- `b835371d0` fix(setup): fix installer rollback exit-code collision and harden fancyindex clones\\n- `d1c33fb42` fix(setup): make librespeed-cli install non-fatal on a fresh install\\n\\n### ð General Changes (1)\\n- `a98ffe686` skip ci[meta] version 3.2.2.6705 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-09-05\\n- **ð·ï¸ Version**: 3.2.2.6733\\n- **ð Previous Version**: 3.2.2.6705\\n- **ð Release Type**: production\",\"version\":\"3.2.2.6733\"},{\"filename\":\"news_announce.20260901-2158\",\"type\":\"news\",\"title\":\"A More Accessible QuickBox Pro\",\"date\":\"September 1, 2026\",\"timestamp\":\"20260901-2158\",\"preview\":\"â¿ This release is about making QuickBox Pro comfortable for everyone to use Most releases lead with a feature. This one leads with a principle. We spent the cycle making the whole product easier to ac...\",\"content\":\"$21\"},{\"filename\":\"version_announce_3.2.2.6705.20260901-2151\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.6705\",\"date\":\"September 1, 2026\",\"timestamp\":\"20260901-2151\",\"preview\":\"feat(delete-safety): forward per-app threshold args through the manage module feat(delete-safety): per-app size threshold overrides feat(i18n): translate System (v4) render-chrome labels for 6 local...\",\"content\":\"$22\",\"version\":\"3.2.2.6705\"},{\"filename\":\"version_announce_3.2.2.6234.20260819-1556\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.6234\",\"date\":\"August 19, 2026\",\"timestamp\":\"20260819-1556\",\"preview\":\"feat(telemetry): carry latest network speedtest in the heartbeat body fix(apt): add a completeness floor to the sury signing-key refresh fix(release): pass stage gates via job outputs, drop all Acti...\",\"content\":\"$23\",\"version\":\"3.2.2.6234\"},{\"filename\":\"news_announce.20260811-1527\",\"type\":\"news\",\"title\":\"Take control of the restricted shell, and hello Ubuntu 24.04\",\"date\":\"August 11, 2026\",\"timestamp\":\"20260811-1527\",\"preview\":\"ð¡ï¸ New: edit the restricted shell from your dashboard, with Fail2Ban watching its back - plus Ubuntu 24.04 support Every standard user on your server runs inside a restricted shell that keeps them to...\",\"content\":\"$24\"},{\"filename\":\"version_announce_3.2.2.6155.20260811-1454\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.6155\",\"date\":\"August 11, 2026\",\"timestamp\":\"20260811-1454\",\"preview\":\"feat(software): add rtorrent 0.15.5/0.15.6/0.15.7/0.16.11 seed rows feat(i18n): translate user-set VNC password CLI strings feat(fail2ban): cover the full lshell over-SSH forbidden family feat(fail...\",\"content\":\"$25\",\"ver
1sion\":\"3.2.2.6155\"},{\"filename\":\"version_announce_3.2.2.5871.20260803-2134\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.5871\",\"date\":\"August 3, 2026\",\"timestamp\":\"20260803-2134\",\"preview\":\"fix(installer): point install summary at the correct dashboard URL skip ci[meta] version 3.2.2.5870 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-08-03 ð·ï¸ Version...\",\"content\":\"### ð Bug Fixes (1)\\n- `3571be613` fix(installer): point install summary at the correct dashboard URL\\n\\n### ð General Changes (1)\\n- `1d93cc72c` skip ci[meta] version 3.2.2.5870 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-08-03\\n- **ð·ï¸ Version**: 3.2.2.5871\\n- **ð Previous Version**: 3.2.2.5870\\n- **ð Release Type**: production\",\"version\":\"3.2.2.5871\"},{\"filename\":\"version_announce_3.2.2.5870.20260803-2103\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.5870\",\"date\":\"August 3, 2026\",\"timestamp\":\"20260803-2103\",\"preview\":\"feat(jellyfin): show service journal on startup-config failure fix(qbittorrent): install bundled libtorrent by version, not soname presence fix(qbittorrent): treat a held libtorrent as installed by ...\",\"content\":\"$26\",\"version\":\"3.2.2.5870\"},{\"filename\":\"version_announce_3.2.2.5851.20260729-2347\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.5851\",\"date\":\"July 29, 2026\",\"timestamp\":\"20260729-2347\",\"preview\":\"feat(i18n): add the nginx signing key skip message for every language feat(i18n): translate the nginx upgrade messages for every language feat(i18n): add the nginx no-candidate skip message for ever...\",\"content\":\"$27\",\"version\":\"3.2.2.5851\"},{\"filename\":\"news_announce.20260710-0154\",\"type\":\"news\",\"title\":\"Inter-Instance Transfer and the Telemetry History Store\",\"date\":\"July 10, 2026\",\"timestamp\":\"20260710-0154\",\"preview\":\"ð¦ New: move files between your own servers, and keep your metric history for good Two new tools are live in the dashboard, and both fix something that used to send you back to the terminal. Inter-Ins...\",\"content\":\"$28\"},{\"filename\":\"version_announce_3.2.2.5704.20260709-1500\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.5704\",\"date\":\"July 9, 2026\",\"timestamp\":\"20260709-1500\",\"preview\":\"feat(fail2ban): managed transfer-peer allowlist mechanism feat(transfer): translate peer-allow/deny/list CLI strings to 6 locales feat(i18n): translate CLI-core sync status into 6 locales feat(upda...\",\"content\":\"$29\",\"version\":\"3.2.2.5704\"},{\"filename\":\"version_announce_3.2.2.5658.20260620-1919\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.5658\",\"date\":\"June 20, 2026\",\"timestamp\":\"20260620-1919\",\"preview\":\"fix(user-perms): home root qbusers ACL to traverse+read, not group-write fix(i18n): user-perms ACL normalization strings in 6 locales fix(fail2ban): correct emby and jellyfin jail log globs chore(f...\",\"content\":\"### ð Bug Fixes (3)\\n- `5de07216f` fix(user-perms): home root qbusers ACL to traverse+read, not group-write\\n- `b824b9ed3` fix(i18n): user-perms ACL normalization strings in 6 locales\\n- `c52c5923a` fix(fail2ban): correct emby and jellyfin jail log globs\\n\\n### ð§ Maintenance (1)\\n- `a618e2373` chore(fail2ban): remove dev and validation notes from shipped filter configs\\n\\n### ð General Changes (1)\\n- `df4ceea78` skip ci[meta] version 3.2.2.5615 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-06-20\\n- **ð·ï¸ Version**: 3.2.2.5658\\n- **ð Previous Version**: 3.2.2.5615\\n- **ð Release Type**: production\",\"version\":\"3.2.2.5658\"},{\"filename\":\"version_announce_3.2.2.5615.20260619-1358\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.5615\",\"date\":\"June 19, 2026\",\"timestamp\":\"20260619-1358\",\"preview\":\"feat(i18n): add Danish Unmanic translations feat(i18n): mirror Audiobookshelf lang keys to all non-English locales feat(listenarr): add install, remove, and update lifecycle feat(i18n): add unmanic...\",\"content\":\"$2a\",\"ver
1sion\":\"3.2.2.5615\"},{\"filename\":\"news_announce.20260609-1556\",\"type\":\"news\",\"title\":\"Dispatcharr joins the QuickBox Pro lineup\",\"date\":\"June 9, 2026\",\"timestamp\":\"20260609-1556\",\"preview\":\"Dispatcharr is now a full member of the QuickBox Pro lineup. It is a self-hosted IPTV proxy that merges your M3U and Xtream Codes sources into one channel lineup, matches EPG guide data, transcodes wi...\",\"content\":\"$2b\"},{\"filename\":\"version_announce_3.2.2.5407.20260609-1354\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.5407\",\"date\":\"June 9, 2026\",\"timestamp\":\"20260609-1354\",\"preview\":\"feat(ssl): accept explicit --dns and --dns-provider flags on plex and seerr feat(lecert): register --dispatcharr flag and wire subdomain provisioning feat(plex): translate PlexPass credentials-fallb...\",\"content\":\"$2c\",\"version\":\"3.2.2.5407\"},{\"filename\":\"version_announce_3.2.2.4815.20260528-0101\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4815\",\"date\":\"May 28, 2026\",\"timestamp\":\"20260528-0101\",\"preview\":\"fix(quota): correct find depth for php-fpm drop-in self-heal skip ci[meta] version 3.2.2.4811 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-05-27 ð·ï¸ Version: 3.2....\",\"content\":\"### ð Bug Fixes (1)\\n- `d46a0de9` fix(quota): correct find depth for php-fpm drop-in self-heal\\n\\n### ð General Changes (1)\\n- `1ffbfd4f` skip ci[meta] version 3.2.2.4811 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-05-27\\n- **ð·ï¸ Version**: 3.2.2.4815\\n- **ð Previous Version**: 3.2.2.4811\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4815\"},{\"filename\":\"version_announce_3.2.2.4811.20260527-2052\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4811\",\"date\":\"May 27, 2026\",\"timestamp\":\"20260527-2052\",\"preview\":\"feat(i18n): add release signature and integrity lang keys to all locales feat(dlindex): harden nginx templates and add nzbget/sabnzbd feat(fail2ban): flag-gated opt-in jail auto-protect on install ...\",\"content\":\"$2d\",\"version\":\"3.2.2.4811\"},{\"filename\":\"version_announce_3.2.2.4675.20260522-1830\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4675\",\"date\":\"May 22, 2026\",\"timestamp\":\"20260522-1830\",\"preview\":\"feat(fail2ban): add v4-dashboard login jail, drop legacy v3 dashboard jail feat(app-routing): add boot-time VPN namespace reconcile unit feat(rclone): route logs-op header through lang system feat(...\",\"content\":\"$2e\",\"version\":\"3.2.2.4675\"},{\"filename\":\"news_announce.20260511-1812\",\"type\":\"news\",\"title\":\"Plex Media Server is now supported in the Streaming Dashboard\",\"date\":\"May 11, 2026\",\"timestamp\":\"20260511-1812\",\"preview\":\"Plex Media Server is now a first-class streaming backend in QuickBox Pro, alongside the existing Emby and Jellyfin integrations. The What's Streaming Dashboard (WSDashboard) auto-detects a Plex instal...\",\"content\":\"$2f\"},{\"filename\":\"version_announce_3.2.2.4283.20260508-0713\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4283\",\"date\":\"May 8, 2026\",\"timestamp\":\"20260508-0713\",\"preview\":\"fix(plex): pre-create user config dirs before first start to fix reinstall crash fix(plex): use SIGKILL not graceful stop in tokenclaim to eliminate install delay fix(plex): correct Preferences.xml ...\",\"content\":\"### ð Bug Fixes (3)\\n- `b6b6dbcf` fix(plex): pre-create user config dirs before first start to fix reinstall crash\\n- `dfad5cb2` fix(plex): use SIGKILL not graceful stop in tokenclaim to eliminate install delay\\n- `e6ca81bb` fix(plex): correct Preferences.xml path in tokenclaim and stop plex before sed\\n\\n### ð General Changes (1)\\n- `fd8a2a18` skip ci[meta] version 3.2.2.4280 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-05-08\\n- **ð·ï¸ Version**: 3.2.2.4283\\n- **ð Previous Version**: 3.2.2.4280\\n- **ð Release Type**: production\",\"ver
1sion\":\"3.2.2.4283\"},{\"filename\":\"version_announce_3.2.2.4280.20260508-0452\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4280\",\"date\":\"May 8, 2026\",\"timestamp\":\"20260508-0452\",\"preview\":\"fix(plex): strip dead PHP url.override refs and daemon-reload after deb install fix(setup): install iptables-persistent for v4 firewall persistence fix(plex): reload systemd before tokenclaim system...\",\"content\":\"### ð Bug Fixes (3)\\n- `71c1585d` fix(plex): strip dead PHP url.override refs and daemon-reload after deb install\\n- `8590262a` fix(setup): install iptables-persistent for v4 firewall persistence\\n- `cf13d88f` fix(plex): reload systemd before tokenclaim systemctl start to silence unit-changed warning\\n\\n### ð General Changes (1)\\n- `4efc80d3` skip ci[meta] version 3.2.2.4276 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-05-07\\n- **ð·ï¸ Version**: 3.2.2.4280\\n- **ð Previous Version**: 3.2.2.4276\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4280\"},{\"filename\":\"version_announce_3.2.2.4276.20260507-2210\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4276\",\"date\":\"May 7, 2026\",\"timestamp\":\"20260507-2210\",\"preview\":\"fix(userPermsFix): backfill qbusers ACL on plex config trees fix(plex): grant qbusers ACL on plex:plex install tree skip ci[meta] version 3.2.2.4274 released upstream - eta 10 minutes --- Release In...\",\"content\":\"### ð Bug Fixes (2)\\n- `9395bce0` fix(userPermsFix): backfill qbusers ACL on plex config trees\\n- `c3237bcb` fix(plex): grant qbusers ACL on plex:plex install tree\\n\\n### ð General Changes (1)\\n- `05ded86a` skip ci[meta] version 3.2.2.4274 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-05-07\\n- **ð·ï¸ Version**: 3.2.2.4276\\n- **ð Previous Version**: 3.2.2.4274\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4276\"}
1,{\"filename\":\"version_announce_3.2.2.4274.20260507-2128\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4274\",\"date\":\"May 7, 2026\",\"timestamp\":\"20260507-2128\",\"preview\":\"feat(plex): wrap claim curl in ip netns exec when VPN app-routing active fix(release): drop sourceguardian and src/dashboard from build pipeline refactor(wbSettings): drop redundant php-fpm restart ...\",\"content\":\"$30\",\"version\":\"3.2.2.4274\"},{\"filename\":\"version_announce_3.2.2.4268.20260430-1425\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4268\",\"date\":\"April 30, 2026\",\"timestamp\":\"20260430-1425\",\"preview\":\"feat(lang): parity flood scgi-heal key across 6 locales fix(rtorrent): rutorrent â rtorrent connectivity on Debian 13 refactor(devpull): align deps and gate php check with setupsources refactor(bet...\",\"content\":\"### ð§© New Features (1)\\n- `8a8da5b20` feat(lang): parity flood scgi-heal key across 6 locales\\n\\n### ð Bug Fixes (1)\\n- `b0bfd72ec` fix(rtorrent): rutorrent â rtorrent connectivity on Debian 13\\n\\n### ð§ Code Refactoring (2)\\n- `311d150b5` refactor(devpull): align deps and gate php check with setup_sources\\n- `edc576ac5` refactor(betapull): align deps and gate php check with setup_sources\\n\\n### ð§ Maintenance (1)\\n- `c593d4099` chore(docs): regenerate developer_resources docs after dep alignment\\n\\n### ð General Changes (1)\\n- `0b5ae29ca` skip ci[meta] version 3.2.2.4252 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-30\\n- **ð·ï¸ Version**: 3.2.2.4268\\n- **ð Previous Version**: 3.2.2.4252\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4268\"},{\"filename\":\"news_announce.20260429-1727\",\"type\":\"news\",\"title\":\"Fresh rTorrent / ruTorrent install â connectivity issue identified\",\"date\":\"April 29, 2026\",\"timestamp\":\"20260429-1727\",\"preview\":\"The fix is now live. Release is available in the public channel and includes the corrected install logic. Running will pull it down â no manual intervention required. Fresh installs of rTorrent / ru...\",\"content\":\"$31\"},{\"filename\":\"version_announce_3.2.2.4252.20260425-1809\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4252\",\"date\":\"April 25, 2026\",\"timestamp\":\"20260425-1809\",\"preview\":\"feat(setup): install fancyindex dynamic module on fresh install feat(lang): parity user-perms backfill keys across 6 locales feat(lang): parity pipeline-nginx fancyindex keys feat(lang): add pipeli...\",\"content\":\"$32\",\"version\":\"3.2.2.4252\"},{\"filename\":\"version_announce_3.2.2.4178.20260419-0312\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4178\",\"date\":\"April 19, 2026\",\"timestamp\":\"20260419-0312\",\"preview\":\"fix(seerr): mirror transactional-update and engine-resolution lang keys across locales (qbx-docs#159) fix(seerr): drop deprecated PHP dashboard URL override write (qbx-docs#159) fix(seerr): resolve ...\",\"content\":\"### ð Bug Fixes (3)\\n- `ba3c37479` fix(seerr): mirror transactional-update and engine-resolution lang keys across locales (qbx-docs#159)\\n- `db55bb1ad` fix(seerr): drop deprecated PHP dashboard URL override write (qbx-docs#159)\\n- `ff5a82220` fix(seerr): resolve node engine from upstream package.json (qbx-docs#159)\\n\\n### â¨ï¸ Critical Fixes (1)\\n- `74645941f` hotfix(seerr): make update transactional with rollback (qbx-docs#159)\\n\\n### ð General Changes (1)\\n- `edda14982` skip ci[meta] version 3.2.2.4166 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-18\\n- **ð·ï¸ Version**: 3.2.2.4178\\n- **ð Previous Version**: 3.2.2.4166\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4178\"},{\"filename\":\"version_announce_3.2.2.4166.20260414-0645\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4166\",\"date\":\"April 14, 2026\",\"timestamp\":\"20260414-0645\",\"preview\":\"fix(medusa): resolve install hang on fresh servers fix(seerr): add i18n parity for 'portresolvefailed' abort message fix(seerr): stop update path from writing 'softwareport=0' into 'env.conf', nginx...\",\"content\":\"### ð Bug Fixes (4)\\n- `268f04c76` fix(medusa): resolve install hang on fresh servers\\
1n- `a2f25ec97` fix(seerr): add i18n parity for 'port_resolve_failed' abort message\\n- `ad31bd96c` fix(seerr): stop update path from writing 'software_port=0' into 'env.conf', nginx, and DB\\n- `e5ba9184b` fix(system): unify update check for merged 'seerr' package\\n\\n### ð General Changes (1)\\n- `650a2210c` skip ci[meta] version 3.2.2.4156 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-14\\n- **ð·ï¸ Version**: 3.2.2.4166\\n- **ð Previous Version**: 3.2.2.4156\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4166\"},{\"filename\":\"version_announce_3.2.2.4156.20260414-0239\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4156\",\"date\":\"April 14, 2026\",\"timestamp\":\"20260414-0239\",\"preview\":\"fix(rtorrent): auto-inject SCGI socket when migrate finds it missing skip ci[meta] version 3.2.2.4154 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-04-13 ð·ï¸ Versi...\",\"content\":\"### ð Bug Fixes (1)\\n- `e863a4874` fix(rtorrent): auto-inject SCGI socket when migrate finds it missing\\n\\n### ð General Changes (1)\\n- `73de35458` skip ci[meta] version 3.2.2.4154 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-13\\n- **ð·ï¸ Version**: 3.2.2.4156\\n- **ð Previous Version**: 3.2.2.4154\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4156\"},{\"filename\":\"version_announce_3.2.2.4154.20260414-0043\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4154\",\"date\":\"April 14, 2026\",\"timestamp\":\"20260414-0043\",\"preview\":\"feat(lang): translate the new qbittorrent nginx healer messages into six languages feat(lang): add rtorrent::runtime::migrate::stripped key across locales feat(lang): translate the rtorrent \\\"package...\",\"content\":\"$33\",\"version\":\"3.2.2.4154\"},{\"filename\":\"version_announce_3.2.2.4047.20260410-1851\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4047\",\"date\":\"April 10, 2026\",\"timestamp\":\"20260410-1851\",\"preview\":\"fix(flood): repair rtorrent socket destruction on rTorrent 0.16.x install skip ci[meta] version 3.2.2.4042 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-04-10 ð·ï¸ ...\",\"content\":\"### ð Bug Fixes (1)\\n- `5fff29db8` fix(flood): repair rtorrent socket destruction on rTorrent 0.16.x install\\n\\n### ð General Changes (1)\\n- `dc62573b3` skip ci[meta] version 3.2.2.4042 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-10\\n- **ð·ï¸ Version**: 3.2.2.4047\\n- **ð Previous Version**: 3.2.2.4042\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4047\"},{\"filename\":\"version_announce_3.2.2.4042.20260409-1930\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4042\",\"date\":\"April 9, 2026\",\"timestamp\":\"20260409-1930\",\"preview\":\"feat(fix): add '--json' output mode to 'qb fix database' fix(seerr): derive softwareinternalport after port autogen for multi-user installs skip ci[meta] version 3.2.2.4039 released upstream - eta 1...\",\"content\":\"### ð§© New Features (1)\\n- `90c36c8e1` feat(fix): add '--json' output mode to 'qb fix database'\\n\\n### ð Bug Fixes (1)\\n- `48a85b42a` fix(seerr): derive software_internal_port after port autogen for multi-user installs\\n\\n### ð General Changes (1)\\n- `62b0ae1bc` skip ci[meta] version 3.2.2.4039 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-09\\n- **ð·ï¸ Version**: 3.2.2.4042\\n- **ð Previous Version**: 3.2.2.4039\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4042\"},{\"filename\":\"version_announce_3.2.2.4039.20260409-0403\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4039\",\"date\":\"April 9, 2026\",\"timestamp\":\"20260409-0403\",\"preview\":\"feat(lang): rework duplicatesfound and mirror backendskipsymlink fix(db): correct userinformation JOIN in truth-aware reconciler skip ci[meta] version 3.2.2.4029 released upstream - eta 10 minutes -...\",\"content\":\"### ð§© New Features (1)\\n- `86cfc7f08` feat(lang): rework duplicates_found and mirror backend_skip_symlink\\n\\n### ð Bug Fixes (1)\\n- `5472cfcce` fix(db): correct user_information JOIN in truth-aware reconciler\\n\\n### ð General Changes (1)\\n- `3c6e67bc4` skip ci[meta] version 3.2.2.4029 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-08\\n- **ð·ï¸ Version**: 3.2.2.4039\\n- **ð Previous Version**: 3.2.2.4029\\n- **ð Release Type**: production\",\"ver
1sion\":\"3.2.2.4039\"},{\"filename\":\"version_announce_3.2.2.4029.20260409-0010\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4029\",\"date\":\"April 9, 2026\",\"timestamp\":\"20260409-0010\",\"preview\":\"feat(fix/db): truth-aware 'usersoftware' duplicate reconciler feat(lang): mirror truth-aware reconciler keys across 6 locales feat(lang): add truth-aware reconciler keys for dbFix feat(autocomplete...\",\"content\":\"### ð§© New Features (4)\\n- `58a50dbeb` feat(fix/db): truth-aware 'user_software' duplicate reconciler\\n- `783290b07` feat(lang): mirror truth-aware reconciler keys across 6 locales\\n- `afee2aae4` feat(lang): add truth-aware reconciler keys for dbFix\\n- `d219d3c64` feat(autocomplete): add flag completion for 'qb fix database'\\n\\n### ð Bug Fixes (3)\\n- `8f3e75aac` fix(sonarr): resolve Debian 13 install hang and drop Mono-era deps\\n- `ad16e9677` fix(lang): extend 'install::service::timeout' to embed journalctl hint\\n- `ae9fe8e73` fix(autocomplete): resolve 'qb update' completions and guard empty subscripts\\n\\n### ð§ Code Refactoring (1)\\n- `1fe4a3833` refactor(fix/db): consume v4 '/api/system/apps/:appId/config' for truth\\n\\n### ð General Changes (1)\\n- `5cff0a587` skip ci[meta] version 3.2.2.4006 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-08\\n- **ð·ï¸ Version**: 3.2.2.4029\\n- **ð Previous Version**: 3.2.2.4006\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4029\"},{\"filename\":\"version_announce_3.2.2.4006.20260407-1959\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.4006\",\"date\":\"April 7, 2026\",\"timestamp\":\"20260407-1959\",\"preview\":\"feat(lecert): add '--ombi' flag to 'qb' CLI argument parser feat(lecert): add ombi SSL install and remove blocks feat(lecert): add ombi SSL lang keys for all locales feat(lecert): add ombi subdomai...\",\"content\":\"### ð§© New Features (4)\\n- `14f14b3f8` feat(lecert): add '--ombi' flag to 'qb' CLI argument parser\\n- `788056e90` feat(lecert): add ombi SSL install and remove blocks\\n- `8cc621541` feat(lecert): add ombi SSL lang keys for all locales\\n- `f28a881f3` feat(lecert): add ombi subdomain nginx template\\n\\n### ð Bug Fixes (2)\\n- `076652175` fix(cron): reduce quickbox update check frequency to twice daily\\n- `c6fd3c44c` fix(lecert): add --ombi to shared quickbox library argument parser\\n\\n### ð General Changes (1)\\n- `f25567d3b` skip ci[meta] version 3.2.2.3995 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-07\\n- **ð·ï¸ Version**: 3.2.2.4006\\n- **ð Previous Version**: 3.2.2.3995\\n- **ð Release Type**: production\",\"version\":\"3.2.2.4006\"},{\"filename\":\"version_announce_3.2.2.3995.20260407-1742\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3995\",\"date\":\"April 7, 2026\",\"timestamp\":\"20260407-1742\",\"preview\":\"fix(devpull): remove 'php8.1-fpm' from service restart array fix(phpmyadmin): add PHP 8.1 package assurance to update path fix(rutorrent): add PHP 8.1 package assurance to update path fix(dbSetting...\",\"content\":\"### ð Bug Fixes (6)\\n- `00b27d2cb` fix(devpull): remove 'php8.1-fpm' from service restart array\\n- `011fff8e8` fix(phpmyadmin): add PHP 8.1 package assurance to update path\\n- `073686f18` fix(rutorrent): add PHP 8.1 package assurance to update path\\n- `252d3036f` fix(dbSettings): remove unguarded PHP operations from DB conversion\\n- `2e079c721` fix(ombi): remove unguarded PHP operations from MariaDB conversion\\n- `be7ac2114` fix(devpull): remove PHP management duplicated by 'qb fix php'\\n\\n### ð General Changes (1)\\n- `7fafa1c1b` skip ci[meta] version 3.2.2.3989 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-07\\n- **ð·ï¸ Version**: 3.2.2.3995\\n- **ð Previous Version**: 3.2.2.3989\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3995\"},{\"filename\":\"version_announce_3.2.2.3989.20260407-1526\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3989\",\"date\":\"April 7, 2026\",\"timestamp\":\"20260407-1526\",\"preview\":\"feat(software): integrate packages.lst cache for torrent client version resolution feat(packages): add packages.lst fetcher/parser/cache module fix(setup): create 'sites-enabled'/'sites-available' d...\",\"content\":\"$34\",\"version\":\"3.2.2.3989\"},{\"filename\":\"version_announce_3.2.2.3975.20260405-0021\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3975\",\"date\":\"April 5, 2026\",\"timestamp\":\"20260405-0021\",\"preview\":\"fix(nextcloud): harden php8.4 install, permission model, and 'occ' reliability skip ci[meta] version 3.2.2.3975 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-04-04...\",\"content\":\"### ð Bug Fixes (1)\\n- `e6b60540f` fix(nextcloud): harden php8.4 install, permission model, and 'occ' reliability\\n\\n### ð General Changes (1)\\n- `5819f0bc5` skip ci[meta] version 3.2.2.3975 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-04\\n- **ð·ï¸ Version**: 3.2.2.3975\\n- **ð Previous Version**: 3.2.2.3975\\n- **ð Release Type**: production\",\"ver
1sion\":\"3.2.2.3975\"},{\"filename\":\"version_announce_3.2.2.3975.20260403-2059\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3975\",\"date\":\"April 3, 2026\",\"timestamp\":\"20260403-2059\",\"preview\":\"fix(lecert): smart repair system and soft failure cert loop fix(transmission): add missing 'softwaretitle' declaration causing 502 on install fix(lecert): replace 'certready' array gate with cert fi...\",\"content\":\"### ð Bug Fixes (5)\\n- `0d3cebe44` fix(lecert): smart repair system and soft failure cert loop\\n- `1262a0d55` fix(transmission): add missing 'software_title' declaration causing 502 on install\\n- `4c46fbd39` fix(lecert): replace 'cert_ready' array gate with cert file existence checks\\n- `b4bbd650d` fix(transmission): correct '*_deb_name' â '*_deb_package' references in update path\\n- `d2e14d35f` fix(lecert): make subdomain nginx config resilient to DB lookup failures\\n\\n### ð§ Code Refactoring (1)\\n- `23cd6fd29` refactor(lecert): extract DNS credential functions into 'qb-dns' helper\\n\\n### ð General Changes (1)\\n- `e0de291a6` skip ci[meta] version 3.2.2.3973 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-03\\n- **ð·ï¸ Version**: 3.2.2.3975\\n- **ð Previous Version**: 3.2.2.3973\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3975\"},{\"filename\":\"version_announce_3.2.2.3973.20260402-0217\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3973\",\"date\":\"April 2, 2026\",\"timestamp\":\"20260402-0217\",\"preview\":\"fix(nginx): resolve upgrade failures from Debian 'nginx-extras' to nginx.org fix(nginx): resolve upgrade failures from Debian 'nginx-extras' to nginx.org fix(lecert): correct seerr subdomain 'proxyp...\",\"content\":\"### ð Bug Fixes (3)\\n- `2bb24e875` fix(nginx): resolve upgrade failures from Debian 'nginx-extras' to nginx.org\\n- `38910597e` fix(nginx): resolve upgrade failures from Debian 'nginx-extras' to nginx.org\\n- `f5920ce16` fix(lecert): correct seerr subdomain 'proxy_pass' port mismatch\\n\\n### ð General Changes (1)\\n- `e161f6978` skip ci[meta] version 3.2.2.3970 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-01\\n- **ð·ï¸ Version**: 3.2.2.3973\\n- **ð Previous Version**: 3.2.2.3970\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3973\"},{\"filename\":\"version_announce_3.2.2.3970.20260402-0045\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3970\",\"date\":\"April 2, 2026\",\"timestamp\":\"20260402-0045\",\"preview\":\"fix(nginx): resolve upgrade failures from Debian 'nginx-extras' to nginx.org skip ci[meta] version 3.2.2.3970 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-04-01 \\ud83c...\",\"content\":\"### ð Bug Fixes (1)\\n- `2bb24e875` fix(nginx): resolve upgrade failures from Debian 'nginx-extras' to nginx.org\\n\\n### ð General Changes (1)\\n- `e161f6978` skip ci[meta] version 3.2.2.3970 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-04-01\\n- **ð·ï¸ Version**: 3.2.2.3970\\n- **ð Previous Version**: 3.2.2.3970\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3970\"},{\"filename\":\"version_announce_3.2.2.3970.20260401-2221\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3970\",\"date\":\"April 1, 2026\",\"timestamp\":\"20260401-2221\",\"preview\":\"feat(nginx): add nginx.org stable repo to setup and update pipeline feat(lang): add --staging, --dry-run flags and CFAccountID to lecert help feat(fix): add multi-version PHP management with hold/un...\",\"content\":\"$35\",\"version\":\"3.2.2.3970\"},{\"filename\":\"version_announce_3.2.2.3858.20260327-2021\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3858\",\"date\":\"March 27, 2026\",\"timestamp\":\"20260327-2021\",\"preview\":\"fix(setup): graceful fallback to self-signed cert when lecert fails fix(autocomplete): restore global flags from qb binary arg processing fix(filebot): quote $@ to prevent license content word-split...\",\"content\":\"### ð Bug Fixes (5)\\n- `30cf0f5d6` fix(setup): graceful fallback to self-signed cert when lecert fails\\
1n- `3b3df5262` fix(autocomplete): restore global flags from qb binary arg processing\\n- `9d89b7aa7` fix(filebot): quote $@ to prevent license content word-splitting\\n- `c0cdb2a1c` fix(autocomplete): audit and correct all software flag completions\\n- `cfe831ee1` fix(args): quote $@ in all software and system scripts to prevent word-splitting\\n\\n### ð§ Code Refactoring (1)\\n- `da9af75a2` refactor(autocomplete): table-driven software flags, add missing commands\\n\\n### ð General Changes (1)\\n- `144398221` skip ci[meta] version 3.2.2.3710 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-27\\n- **ð·ï¸ Version**: 3.2.2.3858\\n- **ð Previous Version**: 3.2.2.3710\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3858\"},{\"filename\":\"version_announce_3.2.2.3710.20260326-2122\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3710\",\"date\":\"March 26, 2026\",\"timestamp\":\"20260326-2122\",\"preview\":\"fix(i18n): migrate /srv/quickbox/db/ to /opt/quickbox/db/ in help.sh across 7 locales fix(rutorrent): harden PHP 8.1 install + add FPM socket verification fix(system): migrate /srv/quickbox/db/ and ...\",\"content\":\"$36\",\"version\":\"3.2.2.3710\"},{\"filename\":\"version_announce_3.2.2.3554.20260326-0600\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3554\",\"date\":\"March 26, 2026\",\"timestamp\":\"20260326-0600\",\"preview\":\"chore(dev): cleanup temp test files minor --- Release Information: ð
Release Date: 2026-03-26 ð·ï¸ Version: 3.2.2.3554 ð Previous Version: 3.2.2.3553 ð Release Type: production\",\"content\":\"### ð§ Maintenance (1)\\n- `83975ebe` chore(dev): cleanup temp test files\\n\\n### ð General Changes (1)\\n- `5d2cbb06` minor\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-26\\n- **ð·ï¸ Version**: 3.2.2.3554\\n- **ð Previous Version**: 3.2.2.3553\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3554\"},{\"filename\":\"version_announce_3.2.2.3551.20260326-0522\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3551\",\"date\":\"March 26, 2026\",\"timestamp\":\"20260326-0522\",\"preview\":\"fix(system): correct log directory writability check in qb and quickbox module fix(update): guard lang source fallback and manpage pandoc dependency Version bump to 3.2.2.3551 --- Release Information...\",\"content\":\"### ð Bug Fixes (2)\\n- `a0267e3d3` fix(system): correct log directory writability check in qb and quickbox module\\n- `dabd5716d` fix(update): guard lang source fallback and manpage pandoc dependency\\n\\n### ð General Changes (1)\\n\\n- Version bump to 3.2.2.3551\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-26\\n- **ð·ï¸ Version**: 3.2.2.3551\\n- **ð Previous Version**: 3.2.2.3549\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3551\"},{\"filename\":\"version_announce_3.2.2.3549.20260326-0316\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3549\",\"date\":\"March 26, 2026\",\"timestamp\":\"20260326-0316\",\"preview\":\"fix(system): ensure '/home' directory has '755' permissions across all entry points skip ci[meta] version 3.2.2.3549 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-...\",\"content\":\"### ð Bug Fixes (1)\\n- `4cea2b73` fix(system): ensure '/home' directory has '755' permissions across all entry points\\n\\n### ð General Changes (1)\\n- `e6fe436d` skip ci[meta] version 3.2.2.3549 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-25\\n- **ð·ï¸ Version**: 3.2.2.3549\\n- **ð Previous Version**: 3.2.2.3545\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3549\"},{\"filename\":\"version_announce_3.2.2.3545.20260326-0216\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3545\",\"date\":\"March 26, 2026\",\"timestamp\":\"20260326-0216\",\"preview\":\"fix(software): fix radarr update pipeline and remap develop to nightly fix(system): elevate quickSupport to level 11 and migrate deprecated paths fix(software): migrate quota paths from deprecated /...\",\"content\":\"### ð Bug Fixes (3)\\n- `5d0a38199` fix(software): fix radarr update pipeline and remap develop to nightly\\n- `ac0ae4ebd` fix(system): elevate quickSupport to level 11 and migrate deprecated paths\\n- `bb9f58557` fix(software): migrate quota paths from deprecated /srv/quickbox/ to /opt/quickbox/\\n\\
1n### ð General Changes (1)\\n- `96159fca9` skip ci[meta] version 3.2.2.3527 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-25\\n- **ð·ï¸ Version**: 3.2.2.3545\\n- **ð Previous Version**: 3.2.2.3527\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3545\"},{\"filename\":\"version_announce_3.2.2.3527.20260325-2106\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3527\",\"date\":\"March 25, 2026\",\"timestamp\":\"20260325-2106\",\"preview\":\"feat(update): add glibc compatibility detection for v4-dashboard artifacts skip ci[meta] version 3.2.2.3509 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-03-25 ð·ï¸...\",\"content\":\"### ð§© New Features (1)\\n- `d7eaefa0f` feat(update): add glibc compatibility detection for v4-dashboard artifacts\\n\\n### ð General Changes (1)\\n- `a0eec5f58` skip ci[meta] version 3.2.2.3509 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-25\\n- **ð·ï¸ Version**: 3.2.2.3527\\n- **ð Previous Version**: 3.2.2.3509\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3527\"},{\"filename\":\"version_announce_3.2.2.3509.20260325-1922\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3509\",\"date\":\"March 25, 2026\",\"timestamp\":\"20260325-1922\",\"preview\":\"fix(cli): harden dual-source API validation for QBPAPIKEY override recovery skip ci[meta] version 3.2.2.3507 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-03-25 ð·...\",\"content\":\"### ð Bug Fixes (1)\\n- `342ae3c57` fix(cli): harden dual-source API validation for QBP_API_KEY override recovery\\n\\n### ð General Changes (1)\\n- `8a8bce933` skip ci[meta] version 3.2.2.3507 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-25\\n- **ð·ï¸ Version**: 3.2.2.3509\\n- **ð Previous Version**: 3.2.2.3507\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3509\"},{\"filename\":\"version_announce_3.2.2.3507.20260325-1751\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3507\",\"date\":\"March 25, 2026\",\"timestamp\":\"20260325-1751\",\"preview\":\"feat(cli): add 'QBPAPIKEY' env var override for API key limbo recovery skip ci[meta] version 3.2.2.3506 released upstream - eta 10 minutes --- Release Information: ð
Release Date: 2026-03-25 ð·ï¸ Ver...\",\"content\":\"### ð§© New Features (1)\\n- `e86a1025` feat(cli): add 'QBP_API_KEY' env var override for API key limbo recovery\\n\\n### ð General Changes (1)\\n- `59f08d42` skip ci[meta] version 3.2.2.3506 released upstream - eta ~10 minutes\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-25\\n- **ð·ï¸ Version**: 3.2.2.3507\\n- **ð Previous Version**: 3.2.2.3506\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3507\"},{\"filename\":\"version_announce_3.2.2.3506.20260325-1716\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3506\",\"date\":\"March 25, 2026\",\"timestamp\":\"20260325-1716\",\"preview\":\"fix(installer): stop overriding version with stale archive value chore(ci): quality stage reset Version bump to 3.2.2.3506 --- Release Information: ð
Release Date: 2026-03-25 ð·ï¸ Version: 3.2.2.3506...\",\"content\":\"### ð Bug Fixes (1)\\n- `a3006068a` fix(installer): stop overriding version with stale archive value\\n\\n### ð§ Maintenance (1)\\n- `4967b3049` chore(ci): quality stage reset\\n\\n### ð General Changes (1)\\n\\n- Version bump to 3.2.2.3506\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-25\\n- **ð·ï¸ Version**: 3.2.2.3506\\n- **ð Previous Version**: 3.2.2.3504\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3506\"},{\"filename\":\"version_announce_3.2.2.3504.20260325-1542\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3504\",\"date\":\"March 25, 2026\",\"timestamp\":\"20260325-1542\",\"preview\":\"fix(update): validate bootstrap, use local version, guard missing files fix(update): add retry with backoff to all central proxy downloads and support dual API keys fix(update): remove dead 'qb-wsd'...\",\"content\":\"### ð Bug Fixes (3)\\n- `04445af25` fix(update): validate bootstrap, use local version, guard missing files\\n- `54c85a591` fix(update): add retry with backoff to all central proxy downloads and support dual API keys\\n- `af047ec77` fix(update): remove dead 'qb-wsd' symlink from 'pipeline-dashboard'\\n\\n### ð General Changes (1)\\n\\n- Version bump to 3.2.2.3504\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-25\\n- **ð·ï¸ Version**: 3.2.2.3504\\n- **ð Previous Version**: 3.2.2.3496\\n- **ð Release Type**: production\",\"ver
1sion\":\"3.2.2.3504\"},{\"filename\":\"news_announce.20260325-1515\",\"type\":\"news\",\"title\":\"Update resolved\",\"date\":\"March 25, 2026\",\"timestamp\":\"20260325-1515\",\"preview\":\"The installer and updater compatibility issues have been resolved. The core fix addresses glibc compatibility on Debian 11 (bullseye) systems where the SHC-compiled install and update scripts were fai...\",\"content\":\"$37\"},{\"filename\":\"version_announce_3.2.2.3496.20260325-0459\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3496\",\"date\":\"March 25, 2026\",\"timestamp\":\"20260325-0459\",\"preview\":\"fix(update): refresh updater lang files during bootstrap download Version bump to 3.2.2.3496 --- Release Information: ð
Release Date: 2026-03-24 ð·ï¸ Version: 3.2.2.3496 ð Previous Version: 3.2.2.349...\",\"content\":\"### ð Bug Fixes (1)\\n- `68fd72c29` fix(update): refresh updater lang files during bootstrap download\\n\\n### ð General Changes (1)\\n\\n- Version bump to 3.2.2.3496\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-24\\n- **ð·ï¸ Version**: 3.2.2.3496\\n- **ð Previous Version**: 3.2.2.3494\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3496\"},{\"filename\":\"version_announce_3.2.2.3494.20260325-0354\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3494\",\"date\":\"March 25, 2026\",\"timestamp\":\"20260325-0354\",\"preview\":\"fix(update): bootstrap missing modules from central before exec chore(ci): quality stage reset chore(update): remove test patterns Version bump to 3.2.2.3494 --- Release Information: ð
Release Date...\",\"content\":\"### ð Bug Fixes (1)\\n- `196c6acd9` fix(update): bootstrap missing modules from central before exec\\n\\n### ð§ Maintenance (2)\\n- `417893dbf` chore(ci): quality stage reset\\n- `bbd80f8b0` chore(update): remove test patterns\\n\\n### ð General Changes (1)\\n\\n- Version bump to 3.2.2.3494\\n\\n---\\n\\n**Release Information**:\\n- **ð
Release Date**: 2026-03-24\\n- **ð·ï¸ Version**: 3.2.2.3494\\n- **ð Previous Version**: 3.2.2.3489\\n- **ð Release Type**: production\",\"version\":\"3.2.2.3494\"},{\"filename\":\"version_announce_3.2.2.3489.20260324-2335\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3489\",\"date\":\"March 24, 2026\",\"timestamp\":\"20260324-2335\",\"preview\":\"fix(setup): remove 'ERR' from orchestrator trap that broke fresh installs fix(ci): restore 'QUALITYSTAGE=1' in 'variables.env' clobbered by prior commit fix(setup): remove 'set -Eeuo pipefail' from ...\",\"content\":\"$38\",\"version\":\"3.2.2.3489\"},{\"filename\":\"news_announce.20260324-1839\",\"type\":\"news\",\"title\":\"The v4 Dashboard Is Here\",\"date\":\"March 24, 2026\",\"timestamp\":\"20260324-1839\",\"preview\":\"It's official. After nearly two years of development, countless late nights, and more refactoring than I care to admit... the v4 Dashboard is live. Today. Right now. If you've been following along, yo...\",\"content\":\"$39\"},{\"filename\":\"version_announce_3.2.2.3455.20260324-1809\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3455\",\"date\":\"March 24, 2026\",\"timestamp\":\"20260324-1809\",\"preview\":\"feat(update): add conditional dashboard update check to pipeline-dashboard feat(seerr): add v3 dashboard migration UI for jellyseerr and overseerr feat(i18n): add dashboard version check translation...\",\"content\":\"$3a\",\"version\":\"3.2.2.3455\"},{\"filename\":\"version_announce_3.2.2.3074.20260123-2105\",\"type\":\"version\",\"title\":\"QuickBox Pro v3.2.2.3074\",\"date\":\"January 23, 2026\",\"timestamp\":\"20260123-2105\",\"preview\":\"feat(system/news): enhanced 'qb news --all' display with timestamps, separators, and word-wrap feat(system/news): multi-file announcements with seen tracking fix(system/update): ensure fresh binary ...\",\"content\":\"$3b\",\"version\":\"3.2.2.3074\"}]}]}],\"$L3c\"]}]\n"])</script>
1<script>self.__next_f.push([1,"3d:I[30836,[\"59233\",\"static/chunks/f24c8456-530880b0559dd057.js\",\"52619\",\"static/chunks/52619-f2cabc0d7be67480.js\",\"15927\",\"static/chunks/15927-36ac3f0d37e73929.js\",\"96199\",\"static/chunks/96199-0faf705eb3c513e6.js\",\"76110\",\"static/chunks/76110-09245dc92559070c.js\",\"59072\",\"static/chunks/59072-3be7456c39dd405b.js\",\"79323\",\"static/chunks/79323-4cf2a593dd246ba0.js\",\"22133\",\"static/chunks/22133-7cb0e7a68c7fc473.js\",\"67589\",\"static/chunks/67589-6d27e2732ca308db.js\",\"45871\",\"static/chunks/45871-6a2aabb0f2e7f5e1.js\",\"95616\",\"static/chunks/95616-a6afabeb6a6b3991.js\",\"5912\",\"static/chunks/5912-b9a2a9693b593c73.js\",\"66824\",\"static/chunks/66824-cc7a50328ca61094.js\",\"51022\",\"static/chunks/51022-d587611445051e83.js\",\"32324\",\"static/chunks/app/news/page-c5f3738c390cd62d.js\"],\"default\"]\n"])</script>
1<script>self.__next_f.push([1,"3c:[\"$\",\"$L3d\",null,{}]\n"])</script>
1<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"03fcdd011324418c9e0cbf243d983f4f","spa":2}' crossorigin="anonymous"></script>
1 2</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.