Installation
Prerequisites, supported platforms, and what to expect on a first run.
ps-lando itself is a single npm package — npx ps-lando@latest <command> is the only invocation you need. Everything else on this page is about the host machine that runs Lando + Docker underneath.
Prerequisites
| Tool | Why | How |
|---|---|---|
| Node.js 20+ | Runs the CLI via npx. | nodejs.org or your package manager. |
| Docker | Container engine Lando drives. | Docker Desktop (macOS / Windows) or Docker Engine (Linux). |
| Lando 3.26+ | Orchestrates Apache + MariaDB + phpMyAdmin + MailHog. | docs.lando.dev/install. |
unzip, curl, git | Used internally by the CLI. | Preinstalled on macOS/Linux. On Windows: use WSL2. |
If you have OrbStack installed, you still need Docker Desktop installed (it doesn't have to be running) so that /Applications/Docker.app exists on disk. Lando's engine check otherwise fails. See lando/core#138.
Drop your zips, pick what to install
Since 1.0.0 (1.0.0), ps-lando is zero-config and theme-agnostic: drop your theme + module zips into a folder, run ps-lando create, and the CLI walks you through two prompts:
- Theme —
selectprompt listing every theme detected (zip withconfig/theme.{yml,xml}at depth 0 or 1) plus aNoneoption. - Modules —
multiselectprompt with every module zip detected (<name>/<name>.phpor<name>/config.xml) pre-checked.
Pick what you want, hit enter, the CLI installs only what you selected. No --panda flag, no theme-specific binary, no scanning of PS-bundled modules sneaking in.
| File pattern | What it is | Required? |
|---|---|---|
*.zip containing config/theme.{yml,xml} | Any PrestaShop theme zip. | Optional — you can pick None in the prompt for a vanilla install. |
st*.zip / module-*.zip / <name>.zip with <name>/<name>.php | Any PrestaShop module zip. | Optional — none, one, or many. |
The CLI scans the cwd (or --zips=<dir>) and classifies every *.zip as theme / module / unknown via the bundled zip-classifier. Detection is case-insensitive everywhere.
Non-interactive (-y) defaults
ps-lando create -y skips both prompts:
- 1 theme detected → auto-selected. 2+ themes → exits 2 (
AmbiguousThemeError) with a hint to pass--theme=<name>. - All detected modules are auto-checked.
- Empty folder → vanilla PS install with the bundled
classic/hummingbirdthemes (no prompts shown).
CI scripts that already pass -y keep working unchanged.
Panda happy path
Drop your panda*.zip + steasybuilder* + steasy_trans_panda* zips into the folder, run ps-lando create, select panda at the theme prompt, leave the module multiselect as-is, hit enter. The bundled panda preset activates automatically (it binds to the selected theme name) and you get the same Panda + Easy Builder sandbox the pre-1.0 hard-coded flow produced — byte-equivalent to v0.6.
Bundled panda preset
ps-lando ships a bundled panda preset that activates whenever the user selects (or -y auto-selects) a theme whose name is panda — the same Panda + Easy Builder behavior pre-1.0 users had hard-coded. The preset wires the Easy Builder ↔ Panda bridge and contributes the blog / easybuilder / social / marketing group globs. Disable with --no-preset or presets: [] in config; force a different preset with --preset=<name>.
| Preset | Activates when | What it does |
|---|---|---|
panda (bundled) | Selected theme name = panda | Adds Easy Builder bridge, group filters (blog, easybuilder, social, marketing), stblog_parent-style ordering. |
none (bundled) | Never (explicit only) | No-op — useful for --preset=none to opt out without --no-preset. |
See Reference → Presets for authoring local presets.
Optional: pslando.config.json
Zero-config is the default. If you want explicit, repeatable behavior (CI, monorepo subfolders, multi-theme drops), run ps-lando init to generate a pslando.config.json:
ps-lando init # interactive (clack), 7 prompts
ps-lando init --yes # write defaults, no prompts
ps-lando init --force # overwrite existing configThe init wizard writes pslando.config.json, an example init-scripts/01-example.sh, and appends .pslando-cache.json to your .gitignore. See Reference → Config for the full schema.
Migrating from 0.6.x? See the Migrating from 0.x guide. The --skip-easybuilder, --skip-blog, --skip-social, and --skip-marketing flags were removed in 1.0.0 — replaced by the generic --exclude=<glob> flag.
macOS
The most-tested platform. Works natively on Apple Silicon (M1 / M2 / M3 / M4) — Docker images run natively or via Rosetta seamlessly.
brew install node
brew install --cask docker
brew install --cask landoStart Docker Desktop once from Applications so it accepts permissions and creates ~/.docker/. After that, Lando handles starting/stopping containers as needed.
node --version # v20+ expected
docker --version # any recent version
lando versionLinux
Works on any distro that can run Docker Engine + Node 20. The setup is per-distro for Docker, then Lando provides a single deb/rpm package.
Ubuntu / Debian
1. Install Docker Engine (community edition, free):
Add Docker's official APT repo and install:
# Remove any old podman/docker.io packages first
sudo apt-get remove docker docker-engine docker.io containerd runc 2>/dev/null
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginFor Debian, swap ubuntu for debian in the URLs above.
2. Run Docker without sudo:
sudo usermod -aG docker $USER
newgrp docker # apply the group in current shell, or log out + back in
docker run hello-world3. Install Node.js 20:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs4. Install Lando:
Grab the latest .deb from lando releases:
curl -fsSL https://files.lando.dev/installer/setup-lando.sh | bash
# or download lando-stable.deb manually and:
# sudo dpkg -i lando-stable.debFedora / RHEL / CentOS Stream
# Docker
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER && newgrp docker
# Node.js 20
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo dnf install -y nodejs
# Lando
curl -fsSL https://files.lando.dev/installer/setup-lando.sh | bashArch / Manjaro
sudo pacman -Syu docker docker-buildx docker-compose nodejs npm
sudo systemctl enable --now docker
sudo usermod -aG docker $USER && newgrp docker
# Lando — install via the official setup script
curl -fsSL https://files.lando.dev/installer/setup-lando.sh | bashVerify Linux install
node --version # v20+
docker --version
docker compose version
lando version
docker run --rm hello-world # confirms daemon + permissionsPerformance tip: keep your project files on a native Linux filesystem (ext4, btrfs). Avoid Docker volumes mounted from /mnt/c/... or other foreign filesystems — they slow things down significantly.
Common Linux gotchas
Cannot connect to the Docker daemon— you forgotsudo usermod -aG docker $USER(or didn't runnewgrp docker/ log out+in after).failed to start daemon: error initializing graphdriver— almost always acgroup v2issue on older kernels. Update to kernel 5.15+ or check/etc/docker/daemon.json.- Lando port conflicts — if you already run Apache or MySQL on the host,
lando startwill fail. Stop the host services or change Lando's exposed ports in.lando.yml. - SELinux on Fedora/RHEL — if mounts behave oddly, try
:Zon bind mounts. Lando handles this internally for its own services.
Windows
Use WSL2 with Docker Desktop's WSL integration. ps-lando uses POSIX tools (unzip, curl, git) and assumes a Unix shell — running it from PowerShell or CMD won't work.
One-time setup
1. Install WSL2 + Ubuntu (admin PowerShell, one command):
wsl --installThis installs WSL2 and sets Ubuntu as the default distro. Reboot when prompted, then open Ubuntu from Start. Set a username + password the first time it launches.
If you want a different distro: wsl --list --online shows available ones, wsl --install -d <Name> installs the one you pick.
2. Update WSL after the first launch:
wsl --update
wsl --set-default-version 23. Install Docker Desktop:
Download from docker.com. After install, open Settings:
- General → check "Use the WSL 2 based engine".
- Resources → WSL Integration → enable for your Ubuntu distro.
- Apply + restart.
Verify from inside WSL Ubuntu:
docker version # should show Server: Docker Desktop
docker run hello-world4. Install Node 20 + Lando inside WSL:
# Inside the WSL Ubuntu shell:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
curl -fsSL https://files.lando.dev/installer/setup-lando.sh | bashWhere to put your project files
Inside the WSL filesystem (e.g. /home/<user>/projects/my-shop), not on the Windows side (/mnt/c/Users/...). Cross-filesystem I/O across the WSL boundary is 5–10× slower and breaks file watchers in Lando.
cd ~ # /home/<user>/
mkdir -p projects/my-shop
cd projects/my-shop
cp /mnt/c/Users/<you>/Downloads/panda-theme.zip .
npx ps-lando@latest createIf you use VS Code, install the WSL extension. Open the project with File → Open Folder in WSL so the editor talks to the Linux filesystem natively.
Verify Windows install
From the WSL Ubuntu shell:
node --version # v20+
docker --version # the Docker Desktop server
lando versionCommon Windows gotchas
docker: command not foundinside WSL — Docker Desktop's WSL integration isn't enabled for that distro. Settings → Resources → WSL Integration.lando starthangs at "starting Docker" — make sure Docker Desktop is actually running on Windows (system tray icon). WSL can't start it on its own.- Files saved in Windows aren't picked up by Lando — your project lives on
/mnt/c/.... Move it to/home/<user>/...and re-create the sandbox. exec format error— your WSL is still on WSL1. Runwsl --set-version Ubuntu 2from PowerShell.
First run — what to expect
The first ps-lando create on a fresh machine will be a few minutes slower than later runs. Docker pulls the LAMP recipe images on first start; subsequent sandboxes reuse those cached images.
| Phase | Cold (first machine setup) | Warm (subsequent sandboxes) |
|---|---|---|
| Download PrestaShop | ~30 s (PS 9 from CDN, cached after) | ~0 s (zip cached at ~/.cache/ps-lando/prestashop/) |
lando start (image pull + boot) | ~2-3 min | ~10-20 s |
| CLI installer + Panda + module install | ~3-5 min | ~3-5 min |
| Total | ~6 min | ~5 min |
Both PS 8.2.x and PS 9.1.x land in roughly the same window — PS 9 pulls the pre-built edition from the official PrestaShop CDN (no Composer inside Lando required since 0.3.0).
Verify your install
Once the prereqs are in place, you don't need to install ps-lando separately. npx handles it:
npx ps-lando@latest --versionOptional: pin a global install if you don't want to wait for npx every time.
npm i -g ps-lando
ps-lando --version