1<!doctype html> 2<!--suppress ALL --> 3<html lang="en" class="h-full wa-dark wa-theme-default wa-brand-green"> 4 <head> 5 <meta charset="utf-8" /> 6 <link rel="icon" href="./favicon.png" /> 7 <meta name="viewport" content="width=device-width, initial-scale=1" /> 8 <link 9 rel="preload" 10 href="./fonts/figtree-latin.woff2" 11 as="font" 12 type="font/woff2" 13 crossorigin 14 /> 15 <style> 16 @font-face { 17 font-family: 'Figtree Variable'; 18 font-style: normal; 19 font-display: optional; 20 font-weight: 300 900; 21 src: url('./fonts/figtree-latin.woff2') format('woff2-variations'); 22 } 23 </style> 24 25 <link href="./_app/immutable/entry/start.nq-7Uush.js" rel="modulepreload"> 26 <link href="./_app/immutable/chunks/DAhi6lE9.js" rel="modulepreload"> 27 <link href="./_app/immutable/chunks/CzsObDY8.js" rel="modulepreload"> 28 <link href="./_app/immutable/chunks/wbzwmYu6.js" rel="modulepreload"> 29 <link href="./_app/immutable/entry/app.DgKodDxv.js" rel="modulepreload"> 30 <link href="./_app/immutable/chunks/kNaey6uv.js" rel="modulepreload"> 31 <link href="./_app/immutable/chunks/xihTtKlq.js" rel="modulepreload"> 32 <link href="./_app/immutable/nodes/0.BeAWBMKF.js" rel="modulepreload"> 33 <link href="./_app/immutable/chunks/CmsztqYw.js" rel="modulepreload"> 34 <link href="./_app/immutable/chunks/Du7Y30mz.js" rel="modulepreload"> 35 <link href="./_app/immutable/chunks/D0djJHRo.js" rel="modulepreload"> 36 <link href="./_app/immutable/chunks/DkUgRKUX.js" rel="modulepreload"> 37 <link href="./_app/immutable/chunks/C5qy-xbg.js" rel="modulepreload"> 38 <link href="./_app/immutable/chunks/DzK1Iyhi.js" rel="modulepreload"> 39 <link href="./_app/immutable/chunks/D7aDtkCV.js" rel="modulepreload"> 40 <link href="./_app/immutable/chunks/Bh8oZHKH.js" rel="modulepreload"> 41 <link href="./_app/immutable/chunks/CbU006_h.js" rel="modulepreload"> 42 <link href="./_app/immutable/chunks/CuIt4HC3.js" rel="modulepreload"> 43 <link href="./_app/immutable/chunks/CMEJS-xf.js" rel="modulepreload"> 44 <link href="./_app/immutable/chunks/C6uBXowH.js" rel="modulepreload"> 45 <link href="./_app/immutable/nodes/6.CR-V7rTK.js" rel="modulepreload"> 46 <link href="./_app/immutable/chunks/ButwuK34.js" rel="modulepreload"> 47 <link href="./_app/immutable/chunks/C0tYEvUX.js" rel="modulepreload"> 48 <link href="./_app/immutable/nodes/36.BNAA9fOY.js" rel="modulepreload"> 49 <!--12qhfyh--><link rel="preload" as="image" href="/_app/immutable/assets/pockethost-cloud-logo.BAJBXdzk.png"/> <!----><style>/*! 50 Theme: Seti UI 51 Author: 52 License: ~ MIT (or more permissive) [via base16-schemes-source] 53 Maintainer: @highlightjs/core-team 54 Version: 2021.09.0 55*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#d6d6d6;background:#151718}.hljs::selection, 56.hljs ::selection{background-color:#3B758C;color:#d6d6d6}.hljs-comment{color:#41535B}.hljs-tag{color:#43a5d5}.hljs-subst, 57.hljs-punctuation, 58.hljs-operator{color:#d6d6d6}.hljs-operator{opacity:0.7}.hljs-bullet, 59.hljs-variable, 60.hljs-template-variable, 61.hljs-selector-tag, 62.hljs-name, 63.hljs-deletion{color:#Cd3f45}.hljs-symbol, 64.hljs-number, 65.hljs-link, 66.hljs-attr, 67.hljs-variable.constant_, 68.hljs-literal{color:#db7b55}.hljs-title,.hljs-class .hljs-title,.hljs-title.class_,.hljs-strong{color:#e6cd69}.hljs-strong{font-weight:bold}.hljs-code, 69.hljs-addition, 70.hljs-title.class_.inherited__, 71.hljs-string{color:#9fca56}.hljs-built_in, 72.hljs-doctag, 73.hljs-quote, 74.hljs-keyword.hljs-atrule, 75.hljs-regexp{color:#55dbbe}.hljs-function .hljs-title, 76.hljs-attribute, 77.ruby .hljs-property, 78.hljs-title.function_, 79.hljs-section{color:#55b5db}.hljs-type,.hljs-template-tag,.diff .hljs-meta,.hljs-keyword,.hljs-emphasis{color:#a074c4}.hljs-emphasis{font-style:italic}.hljs-meta, 80.hljs-meta .hljs-keyword, 81.hljs-meta .hljs-string{color:#8a553f}.hljs-meta .hljs-keyword, 82.hljs-meta-keyword{font-weight:bold}</style><!----><!----><!--pk6x0i--><link rel="manifest" href="/manifest.json"/> <!--[-1--><!--]--><!----><!--bc6myc--><meta name="description" content="Stay updated with the latest PocketHost features, tutorials, and community news."/> <meta property="og:url" content="http://sveltekit-prerender/blog"/> <meta property="og:type" content="website"/> <meta property="og:title" content="Blog - PocketHost"/> <!--[0--><meta property="og:description" content="Stay updated with the latest PocketHost features, tutorials, and community news."/><!--]--> <!--[0--><meta property="og:image" content="https://cdn.cheto.app/og/joioes1x8zagn0v?name=Blog"/><!--]--> <meta name="twitter:card" content="summary_large_image"/> <meta property="twitter:url" content="http://sveltekit-prerender/blog"/> <meta name="twitter:title" content="Blog - PocketHost"/> <!--[0--><meta name="twitter:description" content="Stay updated with the latest PocketHost features, tutorials, and community news."/><!--]--> <!--[0--><meta name="twitter:image" content="https://cdn.cheto.app/og/joioes1x8zagn0v?name=Blog"/><!--]--><!----><title>Blog - PocketHost</title> 83 <link href="./_app/immutable/assets/Avatar.BHE1Mu40.css" rel="stylesheet"> 84 <link href="./_app/immutable/assets/0.DS6Bkft6.css" rel="stylesheet"> 85 </head> 86 <body class="bg-[#111111]"> 87 <div><!--[--><!--[0--><!--[--><!----> <div class="bg-[#111111]"><!--[-1--><!--]--><!----> <div class="max-w-content mx-auto flex items-center justify-between px-4 py-3 md:px-20"><div class="m-0 flex min-w-10 flex-1 items-center"><wa-dropdown class="navbar-mobile-dropdown md:hidden"><wa-button slot="trigger" appearance="plain" class="mx-0 px-0 lg:hidden"><div class="flex items-center justify-center gap-4 "><img src="/_app/immutable/assets/pockethost-cloud-logo.BAJBXdzk.png" class="mix-blend-lighten h-12 w-12 shrink-0" width="48" height="48" alt="PocketHost Logo" fetchpriority="high" loading="eager" decoding="async"/> <h1 class="text-white font-bold text-xl hidden md:block false">PocketHost</h1></div><!----></wa-button>
87 <!--[0--><div class="flex flex-col gap-1 rounded-lg bg-[#111111] p-2 shadow-xl w-52 z-[100] mt-3"><a href="/" class="site-nav-link site-nav-link--menu">Home</a> <!--[-1--><!--]--><!----> <a href="/pricing" class="site-nav-link site-nav-link--menu">Pricing</a> <a href="/blog" class="site-nav-link site-nav-link--menu">Blog</a> <a href="/docs" class="site-nav-link site-nav-link--menu">Docs</a> <a href="/support" class="site-nav-link site-nav-link--menu">Support</a> <!--[0--><!--[--><a href="/about" class="site-nav-link site-nav-link--menu">About</a><!--]--><!--]--><!----> <!--[0--><!--[--><a href="/login" class="site-nav-link site-nav-link--menu">Login</a><!--]--><!--]--><!----></div><!--]--><!----></wa-dropdown> <a href="/" class="hidden items-center md:flex"><div class="flex items-center justify-center gap-4 "><img src="/_app/immutable/assets/pockethost-cloud-logo.BAJBXdzk.png" class="mix-blend-lighten h-12 w-12 shrink-0" width="48" height="48" alt="PocketHost Logo" fetchpriority="high" loading="eager" decoding="async"/> <h1 class="text-white font-bold text-xl hidden md:block false">PocketHost</h1></div><!----></a> <div class="mx-4 hidden h-5 w-px bg-white/15 md:block"></div> <div class="flex items-center gap-3 text-neutral-500"><a href="https://github.com/pockethost/pockethost" rel="noreferrer" target="_blank" class="transition-colors hover:text-white" aria-label="GitHub"><wa-icon name="github" family="brands"></wa-icon></a> <a href="https://www.producthunt.com/products/pockethost" rel="noreferrer" target="_blank" class="transition-colors hover:text-white" aria-label="Product Hunt"><wa-icon name="product-hunt" family="brands"></wa-icon></a> <a href="https://discord.gg/nVTxCMEcGT" rel="noreferrer" target="_blank" class="transition-colors hover:text-white" aria-label="Discord"><wa-icon name="discord" family="brands"></wa-icon></a> <a href="https://www.youtube.com/@pocketba5ed" rel="noreferrer" target="_blank" class="transition-colors hover:text-white" aria-label="YouTube"><wa-icon name="youtube" family="brands"></wa-icon></a></div></div> <div class="flex flex-none items-center"><!--[-1--><nav class="site-nav flex items-center gap-1"><!--[-1--><!--]--><!----> <a href="/pricing" class="site-nav-link">Pricing</a> <a href="/blog" class="site-nav-link">Blog</a> <a href="/docs" class="site-nav-link">Docs</a> <a href="/support" class="site-nav-link">Support</a> <!--[0--><!--[--><a href="/about" class="site-nav-link">About</a><!--]--><!--]--><!----> <!--[-1--><!--]--><!----> <!--[0--><!--[--><a href="/login" class="site-nav-link site-nav-link--login">Login</a><!--]--><!--]--><!----></nav><!--]--><!----></div></div><!----> <!--[-1--><!--]--><!----> <div class="px-4 md:px-20"><!--[-1--><!--]--><!----></div> <div class="w-full"><!--[--><!--[0--><!--[--><div class="min-h-screen"><!--[-1--><!--[--><!--[-1--><!--[--><div class="blog-index-shell"><div class="blog-index-header"><h1 class="blog-index-title">Latest from PocketHost</h1> <p class="blog-index-lead">Stay updated with new features, platform improvements, and insights from the PocketHost team.</p></div> <div class="blog-index-grid"><!--[--><a href="/blog/account-trusted-ips" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[0--><span class="blog-card-badge">Latest</span><!--]--> <h2 class="blog-card-title">Account Trusted IPs for Rate Limits</h2> <!--[0--><p class="blog-card-description">Self-serve trusted egress IPs for higher firewall limits. Optional X-PocketHost-Client-IP header for SSR proxies.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 24, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/pockethost-30-preview" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[0--><span class="blog-card-badge">Latest</span><!--]--> <h2 class="blog-card-title">PocketHost 3.0 Preview: Flounder Ends July 1</h2> <!--[0--><p class="blog-card-description">Heads-up before July 1: Flounder lifetime sales end, Pay Per PocketBase limits enforced, existing accounts grandfathered.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 20, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a>
87<a href="/blog/mothership-live-admin-plugin" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[0--><span class="blog-card-badge">Latest</span><!--]--> <h2 class="blog-card-title">Mothership Live Dashboard (Admin UI Extensions)</h2> <!--[0--><p class="blog-card-description">First mothership admin plugin: fleet Live page. Empty /_/extensions.js was Cloudflare caching a pre-plugin response â bypass rule + init/realtime lessons from the 429 storm.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 17, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/graceful-edge-restarts" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Graceful Edge Restarts (Fewer 500s During Maintenance)</h2> <!--[0--><p class="blog-card-description">Firewall daemon grace holds instance traffic up to 60s while the edge restarts. Instance containers stay running and reattach on boot instead of cold-starting.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 17, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/mothership-pocketbase-v039" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Mothership Is on PocketBase 0.39</h2> <!--[0--><p class="blog-card-description">The control plane finally crossed the v0.22 â v0.23 JSVM cutover. One-way door, smaller SQLite files, and a babysit-and-fix rollout as long as instances keep running.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 14, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/pre-39-platform-deps-refresh" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Pre-v0.39 Platform Refresh: Tests, CI, and Dependency Upgrades</h2> <!--[0--><p class="blog-card-description">Before Mothership v0.39 cutover: Vitest suite, CI gates, phased deps refresh, PocketBase SDK 0.27, dual admin auth for 0.22 Mothership.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 14, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/mothership-v039-prestage" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Pre-Staging the Mothership v0.39 Cutover</h2> <!--[0--><p class="blog-card-description">Two-phase upgrade: dual admin auth and dependency bumps on main first, zero lockfile changes on the v39 branch, SQL views dropped early. Cutover day flips Mothership only.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 14, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/phio-sftp-deploy" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">phio 0.4: Deploy Over SFTP</h2> <!--[0--><p class="blog-card-description">phio dev and deploy now sync on SFTP port 2222 with an auto-provisioned deploy key. Project linking moves to .phioconfig.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 14, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/account-access-keys" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Account Access Keys: Scoped SFTP Access</h2> <!--[0--><p class="blog-card-description">Register Ed25519 keys under Account â Keys. Grant SFTP access to all instances or a specific subset. The first step toward shared account access with limited permissions.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 14, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/flounder-lifetime-sunset" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Last Call for Flounder Lifetime Access</h2> <!--[0--><p class="blog-card-description">Flounder lifetime sales end July 1, 2026. Existing accounts get 30 days after sunset to buy. Email going out to all users.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/ftps-sunset" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">FTPS Is Going Away: Move to SFTP</h2> <!--[0--><p class="blog-card-description">Port 21 FTPS is on a sunset path. SFTP on 2222 with SSH keys is the future. phio deploy and dev already use SFTP.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/edge-orphan-cleanup" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Reclaiming 300 GB of Orphan Instance Data</h2> <!--[0--><p class="blog-card-description">Edge cleanup removed instance folders with no Mothership record. First production sweep freed ~300 GB, nearly half the used space on that node.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/vacuum-at-scale" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">How We Vacuum Thousands of Instances Without Racing Spawns</h2> <!--[0--><p class="blog-card-description">Edge-owned vacuum locks, spawn gates, and incremental --hours-back sweeps keep nightly SQLite compaction safe at fleet scale.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/vacuum-now" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Vacuum Now: On-Demand SQLite Compaction</h2> <!--[0--><p class="blog-card-description">
87Auto Vacuum runs on idle instances overnight. Vacuum Now lets you compact warm instances from the dashboard when you need space back immediately.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/weighted-rate-limiting" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Smarter Rate Limits for API vs File Traffic</h2> <!--[0--><p class="blog-card-description">Firewall rate limits now weight /api/files routes 10à cheaper than REST API calls. More headroom for uploads and downloads without loosening API abuse protection.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/auto-vacuum" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Auto Vacuum for Idle Instances</h2> <!--[0--><p class="blog-card-description">Nightly SQLite VACUUM on hibernated instances. On by default, toggle per instance, and skip running containers until they sleep.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/sftp-file-access" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">SFTP File Access</h2> <!--[0--><p class="blog-card-description">SFTP replaces FTPS for instance files. Ed25519 SSH keys, GitHub-style registration, and docs for Mac, Windows, Linux, and popular clients.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/pocketbase-sqlite-vacuum" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Your logs.db Might Be Gigabytes of Empty Space</h2> <!--[0--><p class="blog-card-description">PocketBase log retention deletes rows but SQLite keeps the disk. Our Mothership logs.db was 6.5 GB for ~1,800 records. Vacuum fixed it in seconds.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/runtime-status-sync" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Instance Status That Survives Restarts</h2> <!--[0--><p class="blog-card-description">Dashboard instance status stays honest across Mothership and edge restarts. One mirror sync handshake instead of stale guesses.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 13, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/node-24-leaner-runtime" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">A Leaner Runtime on Node 24</h2> <!--[0--><p class="blog-card-description">We dropped 100+ lockfile packages by moving to Node 24 natives. Same hosting behavior, lighter stack, and deliberate prep for a future Bun soak.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 12, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/instance-power-status" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Running, Sleeping, and Power Off</h2> <!--[0--><p class="blog-card-description">Power off now stops your container for real. The dashboard shows Running vs Sleeping, and destructive actions wait for shutdown.<
87/p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 12, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/web-awesome-migration" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Dashboard UI: Web Awesome Migration</h2> <!--[0--><p class="blog-card-description">The dashboard now runs on Web Awesome: cleaner components, readable docs, and a simpler frontend stack.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 12, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/pocketbase-version-sync" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Direct PocketBase Version Sync</h2> <!--[0--><p class="blog-card-description">PocketBase versions now sync directly from GitHub. No Gobot middleman, faster updates, no token required.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jun 12, 2026</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/pockethost-2-3-0-release" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">PocketHost 2.3.0</h2> <!--[0--><p class="blog-card-description">Our biggest release yet! Introducing webhooks, automated custom domains, hard paywall, and major infrastructure improvements.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jul 22, 2025</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/webhooks-launch" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Webhooks Support is Here</h2> <!--[0--><p class="blog-card-description">Automate your PocketBase workflows with our new webhooks feature - more reliable than cron jobs.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jul 22, 2025</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/mothership-mirror-service" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Enhanced Data Synchronization with MothershipMirrorService</h2> <!--[0--><p class="blog-card-description">Enhanced infrastructure for better data synchronization and dashboard performance.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jul 21, 2025</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/custom-domains-automation" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Automated Custom Domains with Cloudflare</h2> <!--[0--><p class="blog-card-description">Fully automated custom domain setup with Cloudflare integration and SSL certificates.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jul 19, 2025</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/kingdom" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Building a Realtime Game: Kingdom</h2> <!--[0--><p class="blog-card-description">Follow along as we build a realtime multiplayer game using PocketBase.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jan 8, 2025</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/hard-paywall-is-live" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Hard paywall is live</h2> <!--[0--><p class="blog-card-description">The hard paywall is now active for new users, with existing users grandfathered in.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jan 10, 2025</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/announcing-dev-channel" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">YouTube Dev Channel is Live</h2> <!--[0--><p class="blog-card-description">Our new YouTube channel for PocketBase tutorials and ecosystem content.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jan 8, 2025</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/hard-paywall" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Moving to a hard paywall</h2> <!--[0--><p class="blog-card-description">Why we're moving to a hard paywall model and what it means for the community.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jan 6, 2025</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/why-no-sla" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Why no SLA?</h2> <!--[0--><p class="blog-card-description">Why PocketHost does not offer a formal SLA and what that means for reliability expectations.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Jan 1, 2025</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/live-in-40-countries" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">PocketHost is live in 40+ countries</h2> <!--[0--><p class="blog-card-description">
87PocketHost hosting is now available in more than 40 countries worldwide.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Dec 25, 2024</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/announcing-pocker" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">Announcing Pocker</h2> <!--[0--><p class="blog-card-description">Introducing our custom container solution for global PocketBase hosting.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[0--><span class="blog-card-meta-sep">·</span> <span>Dec 20, 2024</span><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a><a href="/blog/early-morning-dev-1" class="blog-card-link"><article class="blog-card"><div class="blog-card-body"><!--[-1--><!--]--> <h2 class="blog-card-title">What's Next For PocketBase (Early Morning Dev Round 1)</h2> <!--[0--><p class="blog-card-description">Early Morning Dev Round 1. Thoughts on where PocketBase is headed next.</p><!--]--> <div class="blog-card-footer"><div class="blog-card-meta"><img src="https://www.gravatar.com/avatar/71137e6e1c94b72f162da3262b700017?d=mp&s=80" alt="" width="20" height="20"/> <span class="blog-card-meta-handle">@cap'n</span> <!--[-1--><!--]--></div> <span class="blog-card-cta">Read more <wa-icon name="arrow-right"></wa-icon></span></div></div></article></a>
87<!--]--></div> <div class="blog-discord-cta"><h3 class="blog-discord-title">Stay in the Loop</h3> <p class="blog-discord-lead">Join our Discord community to get the latest updates and connect with other PocketHost users.</p> <a href="https://discord.gg/nVTxCMEcGT" target="_blank" rel="noopener noreferrer" class="blog-discord-button">Join Discord Community <wa-icon name="discord" family="brands"></wa-icon></a></div></div><!--]--><!--]--><!--]--><!--]--></div><!--]--><!--]--><!--]--></div> <footer class="text-white px-4 md:px-20 pt-6 pb-8 text-sm relative z-1 border-t border-neutral-700"><div class="flex flex-col gap-5"><div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 text-xs text-neutral-500"><div class="flex flex-wrap gap-x-4 gap-y-1"><a href="/privacy" class="hover:text-neutral-300 hover:underline">Privacy</a> <a href="/terms" class="hover:text-neutral-300 hover:underline">Terms</a> <a href="https://status.pockethost.io/" rel="noreferrer" target="_blank" class="hover:text-neutral-300 hover:underline">System Status</a></div> <div class="sm:text-right"><span>© <span id="year">2026</span> PocketHost</span> <span class="mx-2 text-neutral-700" aria-hidden="true">·</span> <span>Proudly hacking open source in Reno, NV â¤ï¸</span></div></div></div></footer></div> <!--[-1--><!--]--><!----><!--]--><!--]--> <!--[-1--><!--]--><!--]--> 88 89
89<script> 90 { 91 __sveltekit_mupgce = { 92 base: new URL(".", location).pathname.slice(0, -1) 93 }; 94 95 const element = document.currentScript.parentElement; 96 97 Promise.all([ 98 import("./_app/immutable/entry/start.nq-7Uush.js"), 99 import("./_app/immutable/entry/app.DgKodDxv.js") 100 ]).then(([kit, app]) => { 101 kit.start(app, element, { 102 node_ids: [0, 6, 36], 103 data: [null,null,null], 104 form: null, 105 error: null 106 }); 107 }); 108 } 109 </script>
109 110 </div> 111 </body> 112</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.