Install
brew tap krahd/tap
brew install s2a
Squarespace Migration CLI
s2a extracts content from Squarespace and generates an editable Astro project. Use this page for the fastest path from install to your first migration.
v0.5.7 includes redirect output (--emit-redirects),
route-based localised assets, high-fidelity layout strategies, and compatibility
upgrades for legacy hash-suffixed asset manifests.
brew tap krahd/tap
brew install s2a
s2a migrate https://example.squarespace.com \\
--astro-dir ./generated/example-site
A structured site snapshot and a buildable Astro project with route pages, layouts, site data, and localised assets under readable route-based filenames.
Site URL, disk space for the output folder, and Node.js only when you want to run the generated Astro site locally.
Public pages can usually be crawled directly. For account-authenticated content, use credentials or browser storage-state with the auth options.
Commerce, events, forms, members, and full Squarespace admin workflows are out of
scope. Utility routes such as /cart, /checkout, and
/account are intentionally excluded from static output.
s2a migrate https://example.squarespace.com \\
--xml-export ./exports/squarespace-wordpress.xml \\
--astro-dir ./generated/example-site
s2a migrate https://example.squarespace.com \\
--fidelity-mode high \\
--layout-strategy components \\
--markdown \\
--astro-dir ./generated/example-site
If you omit --output-dir, s2a writes a timestamped run folder in
site-output/ and records key paths in
execution-metadata.json.
Public sites normally do not need authentication. For account-authenticated routes,
export credentials before running probe, crawl,
auth-browser, or migrate:
export SQUARESPACE_USER=owner@example.com
export SQUARESPACE_PWD=owner-password
s2a migrate https://example.squarespace.com \
--astro-dir ./generated/example-site
--username and --password override environment variables for one run.--site-password is for a site-wide gate, separate from account login.execution-metadata.jsonprobe.jsonsite_snapshot.jsonreport.jsonasset_manifest.json and downloaded-assets/raw-html/ and raw-json/migration-manifest.jsonsrc/content/pages/src/content/posts/ when posts were detectedsrc/data/site.jsonpublic/assets/ for localized media and filessrc/layouts/, src/pages/, and optional redirect outputsThe generated output is a normal Astro project. After migration, move into the generated directory and start the local preview:
cd ./generated/example-site
npm install
npm run dev
Most hand edits happen in src/content/ for content, src/data/site.json
for site metadata and navigation, and src/layouts/ or src/pages/
for the final Astro presentation.