A whole guide or manual
Everything under the start URL’s folder, seeded from sitemap.xml. Good for guides, manuals, and online books.
- Depth
- Unlimited
- Pages
- Up to 5,000
Technical details
For the curious: how Seatpocket packs a site, how the reader plays it back, what doesn’t work offline, where your packed sites live, and how to install and check the download from Terminal.
Packing a site
Each page loads in a hidden Chromium window, so sites that build their pages with JavaScript are packed as they actually appear.
Seatpocket records every request a page makes, including the data its JavaScript fetches, with the original status codes and headers. It scrolls each page to bring in lazy-loaded images. Files shared between pages are stored once.
Crawl state lives in the packed site’s database, so a long crawl can pause, survive quitting the app, and resume where it stopped. Failed URLs are listed and can be retried.
Dropped connections are retried after a short wait. If your Mac goes offline mid-crawl, the crawl pauses instead of failing every page, and you resume when you’re back.
Refresh re-crawls with conditional requests (If-None-Match, If-Modified-Since), rewrites only what changed, and adds new pages. A packed site can also refresh daily when your Mac is online, on power, and idle.
Seatpocket follows robots.txt and any crawl delay it sets, loads at most 2 pages at a time from each host, and waits 250 ms between them. robots.txt applies to pages: the images, styles, and scripts an allowed page needs are fetched the way a browser would. Every packed site can change these settings.
Each packed site stops at 2 GB and skips single files over 25 MB unless you change those limits. Video and audio are off by default. You can also cap the page count and link depth.
Presets
The Pack a Website form offers three choices under “How much to bring”. Advanced options adds Custom and every setting behind them: scope, include and exclude patterns, caps, media types, and pacing.
Everything under the start URL’s folder, seeded from sitemap.xml. Good for guides, manuals, and online books.
The same site, two links deep from the homepage. Refresh re-crawls from the homepage.
Just this URL and everything it needs to render.
Start from the defaults and set scope, patterns, caps, media, and pacing yourself.
A whole guide or manual covers the start URL’s folder, and the form says which folder that is. A last segment without a trailing slash counts as a page, so https://react.dev/learn covers all of react.dev/. End the URL with / to keep to one section.
Reading offline
The reader serves every request from the packed site, with the original status codes and headers, and has no route to the internet. It has back and forward, find in page, and an address bar that shows the page’s real URL.
Most sites replay with their JavaScript running. When a site’s scripts won’t cooperate offline, switch to Snapshot with ⌘⇧S.
Links to pages that weren’t packed are faded, with a dashed underline on text links. Following one opens a “This page stayed behind” note instead of a browser error, even when the site’s own JavaScript router handles the click. Turn the marks off with Reader › Mark Links That Aren’t Packed.
Tested on 34 real sites: documentation built with Docusaurus, MkDocs, Sphinx, VitePress, and Starlight, plus Wikipedia, news sites, blogs, a newsletter platform, and single-page apps. In the latest round, pages replayed offline made no network requests and hit no missing pages.
Sign-in
Every crawl and refresh of a packed site uses that site’s own sign-in session. Seatpocket keeps only the cookies Chromium stores, separately for each packed site, and never sees your password.
Opens the live site in a window with back, forward, reload, and an address bar. Email and password work, and so do “Sign in with …” popups. Click Done and the packed site shows when you signed in. Cookies the site sets only for the browser session are kept for 30 days, so the sign-in survives quitting the app, until it expires or you click Sign Out.
Some sign-in providers, notably Google, refuse embedded browsers. ••• › Use Sign-In from … copies the cookies that Chrome, Brave, Edge, Arc, Chromium, or Firefox holds for the packed site and its subdomains. For Chromium-based browsers, macOS first asks whether Seatpocket may use the browser’s “Safe Storage” key from the Keychain, and you can refuse.
When a bot check or login wall blocks the whole site, the crawl pauses and says what to do next, for example: sign in, complete the check in the sign-in window, then resume.
An article that comes back as a teaser keeps what it got and is listed under Failed, so Retry can fetch the full text after you sign in.
Limits
The complete list.
Storage and privacy
No account, analytics, telemetry, or crash reporting. Besides crawling the sites you ask it to pack, the app only checks for updates, and you can turn that off.
Packed sites live in ~/Library/Application Support/Seatpocket/archives. Each holds a SQLite index (pages, resources, crawl state, and a full-text search index) and the packed files, stored by content hash so shared files are kept once.
Export any packed site as a single .seatpocket file and bring it into Seatpocket on another Mac with Import Site… (⌘⇧I).
Every request from a replayed page is answered from the packed site. The only way out is Open in Browser, which hands the address to your default browser.
The privacy page lists everything the app stores and sends.
Install
Seatpocket is signed ad hoc, not with an Apple Developer ID, and it isn’t notarized, so macOS asks you to confirm the first time you open it. The install guide walks through it step by step.
Disk image for Apple silicon, macOS 13 or later
After dragging Seatpocket to Applications, remove the quarantine flag, then open it normally.
xattr -dr com.apple.quarantine /Applications/Seatpocket.app
The result should match the SHA-256 shown here.
shasum -a 256 ~/Downloads/Seatpocket-0.3.1-arm64.dmgThe app checks a signed update feed 30 seconds after launch and every 6 hours. It downloads a newer version in the background and checks its Ed25519 signature, SHA-256, bundle identity, and code signature. It installs when you choose Restart to Update or when you quit, and puts the old version back if the new one doesn’t start. It updates itself only from Applications (or another folder you can write to), so it offers to move there when opened from the disk image or Downloads. Turn off automatic checks in Check for Updates…. Packed sites are stored separately and stay where they are.