Quickstart
Create, validate, pack, and import your first Snabbsite site package.
Choose the right route for the design
This is the whole story, and it is the same one the app, /for-utvecklare, the
agent skills and the MCP tools tell:
Building in Next.js? Connect the app with the SDK. Your own code keeps drawing the page, and only the fields you expose become editable. Already have a website? Give us the zip or address. Snabbsite tries an editable visual capture and falls back to a structured rebuild when needed.
A site package, which is what the rest of this page builds, is neither of those. It is a redesign on Snabbsite blocks, and you pick it only when you want a new design.
The five steps, for you
- Pick the path. You write the website in Next.js and keep deploying it: connect the app with the SDK. The website already exists as an address or a zip: use the visual capture.
- Connect it. SDK: run
npx @snabbsajt/cli@latest init --agencyin your repo. Copy: sign in, open "Flytta din hemsida" ("Move your website"), and paste the address or drop the zip. - Say what the owner may change. SDK: wrap each section in
defineBlock, one field per thing an owner would ring you about. Capture: text, image, and link slots are editable, but the layout inside a captured section is fixed. - Hand it over. SDK:
npx @snabbsajt/cli@latest push . --site <id>. Copy: press the one button on the preview screen. Both make an unpublished draft. - Compare, then publish. Open the draft beside the original on a computer and on a phone, fix what is wrong, and publish when it matches.
The same five steps, for an agent
- Ask exactly one question: "Do you write this website in Next.js and keep deploying it yourself?" Yes goes to the SDK lane, no goes to the copy lane. Build no package on either answer.
- SDK lane:
npx @snabbsajt/cli@latest skills install --agent auto, then follow themake-site-editableskill. Copy lane: build nothing, run nothing, hand over the click path and stop. - SDK lane:
defineBlockper section, named for what the client sees. Copy lane: nothing to mark. - SDK lane: push with
--dry-runfirst and show the merge report. Copy lane: the human presses the button. - Report the route honestly. A connected app keeps its design because the developer's own code still renders it. That is not an import. A visual capture is best effort and has no percentage guarantee. It can recreate a small allowlist of fades, reveals, navigation behavior, and smooth scrolling with Snabbsite code. Source JavaScript never enters the editable site.
Three worked examples of the SDK lane are being built under backlog P0-3075.
Until that lands there is no examples/ directory, so nothing here reads from
one.
Install
Both packages are published on npm:
npm install -g @snabbsajt/cliPrefixing every command with npx @snabbsajt/cli@latest works too and needs no
global install. Two things to know before you pin a version: the newest import
fixes reach you only when a release is cut, and the make-site-editable skill
declares a minimum CLI version that no published build meets yet. Use the newest
published CLI and expect the agency lane to run slightly ahead of it.
Create a package
npx site-kit init ./my-site --template nextjsUse --template html for a static HTML source. Both produce the same structured
Snabbsite format.
The generated directory contains:
my-site/
site.json
assets/
fonts/
README.mdReplace the starter business facts, page list, sections, and copy with real content from the source site. Do not invent facts or testimonials.
Validate
npx site-kit validate ./my-siteErrors block packing. Warnings describe safe importer coercions or suspicious content that deserves review.
Pack
npx site-kit pack ./my-site -o my-site.zipThe zip contains site.json, manifest.json, and every declared image/font.
The manifest records a SHA-256 checksum for each blob.
Import
Send the site owner to /dashboard/import ("Läs in ett hemsidepaket" / "Load a website package") and have them drop the zip on it. That page works on a brand-new account with no sites yet, so it is the one link to hand a client.
The same picker also lives in Settings › Importera (Import), under "Läs in en kopia eller ett paket" → Välj en fil från din dator.
Either way the result is a new draft website. Nothing is published, and no existing site is touched. Review every page on desktop and mobile before publishing.
Update an already-imported site
Set a stable externalKey on every page and section from the start. Later you
can pack the package again and merge it into the existing site instead of
creating a new one: matched sections update, new keys insert, sections the owner
edited in the app are skipped as conflicts, and nothing is deleted. You pack the
whole package either way, and the merge works out what changed from the keys. See the
import report for the merge
outcomes.
This works in the browser and over MCP. On /dashboard/import the owner
chooses Update a website I already have and confirms a preview of the merge;
the import_site MCP tool does the same headlessly with mergeIntoWebsiteId
and needs only the content:write scope.
No API key is required for any Site Kit command.
The recommended one-line agent setup:
npx @snabbsajt/cli@latest skills install --agent autoDidn't find the answer, or is something wrong here? Tell us.