Free website downloader, site cloner and full-page screenshot tool for macOS.
Download any website to your Mac, generate its sitemap, or capture a screenshot of every page — from one clean native app, without touching the Terminal.
Web Cloner is a native macOS app that puts a modern SwiftUI interface on top of battle-tested wget. Save a whole website for offline reading, scan a site to discover its pages, or capture a full-page PNG of every page. Each page appears in a live list with its own status, so you always know what finished and what is still running.
It is the friendly Mac alternative to HTTrack and to typing wget --mirror by hand.
| 🌐 Clone website | Downloads pages, CSS, JavaScript and images, converts links, and leaves you a site that browses offline |
| 🔍 Scan only | Discovers every page on a site without downloading anything |
| 📸 Screenshots | Full-page PNG of each page at 1280, 1440 or 1920 width |
| 🧰 Developer options | Skip paths or URL patterns, restrict to one section, extra domains, request headers, HTTP auth, size cap, and the exact wget command to copy |
| ♻️ Updates itself | Checks GitHub on launch and installs the new version in place, so you never download or delete anything by hand |
| 🖼️ CDN assets included | Images, fonts and stylesheets served from another domain are downloaded too and relinked, so nothing loads from the internet |
| 🗺️ Sitemap generator | Writes a standard sitemap.xml after every job |
| 📊 Live page list | Downloading, Done, Failed and Redirect states with sizes and click-to-filter counters |
| ⚙️ Automatic setup | Installs wget for you through Homebrew if it is missing |
| 🚦 Speed control | Polite (rate limited), Normal or Fast, so you do not get blocked |
| 🧭 Depth control | Whole site, or only 1 to 5 levels deep |
| 🖥️ Universal binary | Runs natively on both Intel and Apple Silicon |
- Download WebCloner.dmg
- Open the DMG and drag Web Cloner onto the Applications folder
- Launch it. The first time macOS blocks it, use right-click → Open → Open
The app needs wget. If it is missing, a Setup card appears:
- Homebrew installed → press Install wget and the app runs
brew install wgetin the background - No Homebrew → the same button opens Terminal and installs Homebrew and wget (enter your Mac password there)
To do it yourself:
brew install wgetThere is nothing to do. On launch the app asks GitHub for the newest release and, if there is one, shows a bar at the top with Update Now. Pressing it downloads the DMG, swaps the app in place and reopens it, keeping your settings and your existing downloads. You can also trigger it from Web Cloner → Check for Updates….
git clone https://github.com/DeveloperSarim/web-cloner-mac.git
cd web-cloner-mac
./build.sh # produces WebCloner.app and WebCloner.dmgOnly the Xcode Command Line Tools are required (xcode-select --install). Full Xcode is not needed.
- Type the site into Address, either
example.comor a full URL - Pick a folder under Save to
- Choose a Job: Clone, Scan or Screenshot
- Press Start and watch the pages arrive below
- When it finishes, press Open Folder or Open Website
| Option | What it does |
|---|---|
| How deep | The whole site, or only 1, 2, 3 or 5 levels in |
| Speed | Polite adds a wait and a rate limit, Fast never pauses |
| Width | Screenshot width: 1280, 1440 or 1920 px |
| Download images and media | Turn off for HTML, CSS and JS only, which is far faster and smaller |
| Create sitemap.xml | Writes the sitemap into your save folder |
| Ignore robots.txt | Only for sites you own or are allowed to copy |
Open Advanced in the Options card. Every field maps straight to a wget flag, and empty fields add nothing.
| Field | Example | Flag |
|---|---|---|
| Skip these paths | /blog, /admin/* |
--exclude-directories |
| Only these paths | /docs |
--include-directories |
| Skip URLs matching | /tag/|\.pdf$ |
--reject-regex |
| Skip file types | pdf, zip, mp4 |
--reject |
| Also allow domains | cdn.example.com |
--span-hosts --domains |
| Stop after (MB) | 500 |
--quota |
| HTTP user and password | --user, --password |
|
| Extra request headers | Cookie: session=abc123 |
--header, one per line |
| Keep original links | skips --convert-links and leaves the HTML exactly as served |
|
| Ignore SSL errors | --no-check-certificate |
So "clone the site but leave the blog and every PDF alone" is /blog in Skip these paths and \.pdf$ in Skip URLs matching.
Copy wget command puts the exact command on your clipboard, ready for a terminal or a script. The password is hidden in the app log but kept in the copied command.
<save folder>/
├── example.com/ # the cloned site, open index.html
│ └── index.html
├── screenshots/ # PNGs from the Screenshot job
└── sitemap.xml # every page discovered
- macOS 13 Ventura or newer
- Intel or Apple Silicon Mac (universal binary)
wget(the app can install it for you)
How do I download an entire website on a Mac?
Open Web Cloner, type the address, choose Clone and press Start Cloning. The app mirrors the site with wget and rewrites the links, so index.html works without an internet connection.
Is this an HTTrack alternative?
Yes. Same job, website mirroring, but with a native macOS interface, a live page list, a sitemap generator and built-in screenshots.
The site keeps its images on a CDN. Will they download?
Yes. Plain wget mirrors a single host, so anything on a CDN (Webflow, Shopify, WordPress with an asset domain) is skipped. After the mirror, Web Cloner reads the saved pages, collects every asset still pointing somewhere else, downloads it and rewrites the reference to the local copy. That includes URLs written as url("https://cdn/image.jpg"), which wget itself misreads and turns into 404s.
Does it work on JavaScript-heavy sites?
wget does not run JavaScript, so a fully client-rendered site gives you only its shell. Use the Screenshot job for those, because it renders in a real browser engine (WebKit).
How large are the screenshots?
Full-page PNGs at the width you choose (1280, 1440 or 1920) and the full height of the page. One job captures up to 60 pages.
Is the app signed and safe?
It is ad-hoc signed but not notarized by Apple, which is why the first launch needs right-click → Open. The entire source is in this repository, so you can build it yourself.
Sources/Engine.swift # wget arguments, output parsing, sitemap, screenshots
Sources/Updater.swift # GitHub release check and in-place update
Sources/UI.swift # SwiftUI interface
Sources/makeicon.swift # app icon generator
Tests/engine/main.swift # parsing and sitemap checks
Tests/shot/main.swift # real screenshot check
Tests/update/main.swift # real release download and app swap
build.sh # universal build and DMG
Releasing a new version: bump VERSION in build.sh, run it, then publish a GitHub release whose tag is the same number (v1.1.0) with WebCloner.dmg attached. Every installed copy picks it up on next launch.
Run the tests:
swiftc Sources/Engine.swift Tests/engine/main.swift -o /tmp/t && /tmp/t
swiftc Sources/Engine.swift Tests/shot/main.swift -o /tmp/s && /tmp/s
swiftc Sources/Updater.swift Tests/update/main.swift -o /tmp/u && /tmp/uIssues and pull requests are welcome. Please open an issue first for anything large.
MIT — © 2026 Sarim Yaseen
Sarim Yaseen — @DeveloperSarim