EasyWeb CLI
EasyWeb CLI
The EasyWeb CLI is published from the core EasyWeb 2.0 repository and attached to Hub releases as a .tgz package.
Live documentation: EasyWeb 2.0 Hub — install guides, CMS docs, and this CLI reference.
After install, easyweb help and easyweb version print the hub URL so you can open the docs from the terminal.
Download
- Tagged releases (recommended):
EasyWeb-2.0-Hub releases - CI runs (non-tag builds):
Extension + CLI packaging workflow runs
Download the package named like easyweb-remote-<version>.tgz.
Install (macOS, Linux, Windows)
Requirements:
- Node.js 20+
- npm
Homebrew (macOS, Linux)
brew tap EasySystems-GmbH/easyweb https://github.com/EasySystems-GmbH/EasyWeb-2.0-Homebrew
brew install easyweb
The formula is published to the public Homebrew repo and updated automatically by EasyWeb 2.0 CI on each release.
If you tapped EasyWeb previously from a different source, reset once:
brew untap easysystems-gmbh/easyweb
brew tap EasySystems-GmbH/easyweb https://github.com/EasySystems-GmbH/EasyWeb-2.0-Homebrew
npm (all platforms)
Install globally from downloaded package:
npm install -g ./easyweb-remote-<version>.tgz
Install latest release directly (macOS/Linux):
TMP_DIR="$(mktemp -d)" && \
ASSET_URL="$(curl -fsSL https://api.github.com/repos/EasySystems-GmbH/EasyWeb-2.0-Hub/releases/latest | node -e 'let d="";process.stdin.on("data",c=>d+=c);process.stdin.on("end",()=>{const j=JSON.parse(d);const a=(j.assets||[]).find(x=>/^easyweb-remote-.*\.tgz$/i.test(x.name));if(!a){process.exit(1);}process.stdout.write(a.browser_download_url);});')" && \
curl -fsSL "$ASSET_URL" -o "$TMP_DIR/easyweb-remote-latest.tgz" && \
npm install -g "$TMP_DIR/easyweb-remote-latest.tgz" && \
rm -rf "$TMP_DIR" && \
export PATH="$(npm config get prefix)/bin:$PATH"
Alternative using jq (if installed):
ASSET_URL=$(curl -fsSL https://api.github.com/repos/EasySystems-GmbH/EasyWeb-2.0-Hub/releases/latest | jq -r '.assets[] | select(.name | test("^easyweb-remote-.*\\.tgz$")) | .browser_download_url')
curl -fsSL "$ASSET_URL" -o /tmp/easyweb-latest.tgz && npm install -g /tmp/easyweb-latest.tgz && rm /tmp/easyweb-latest.tgz
Install latest release directly (PowerShell):
$release = Invoke-RestMethod https://api.github.com/repos/EasySystems-GmbH/EasyWeb-2.0-Hub/releases/latest
$asset = $release.assets | Where-Object { $_.name -match '^easyweb-remote-.*\.tgz$' } | Select-Object -First 1
if (-not $asset) { throw "No easyweb-remote .tgz asset found in latest release." }
$tmp = Join-Path $env:TEMP "easyweb-remote-latest.tgz"
Invoke-WebRequest $asset.browser_download_url -OutFile $tmp
npm install -g $tmp
Remove-Item $tmp -Force
Verify:
easyweb --help
easyweb version
Troubleshooting: command not found
If easyweb is not found after install, the npm global bin directory may not be in your PATH. Add it:
export PATH="$(npm config get prefix)/bin:$PATH"
To make this permanent, add that line to ~/.zshrc (zsh) or ~/.bashrc (bash), then run source ~/.zshrc or open a new terminal.
Configure Connection
You can pass connection flags on each command:
easyweb ls / --base-url http://localhost:5055 --username admin --password EasyWebRemote!2026 --theme-path /
Or set environment variables.
macOS/Linux:
export EASYWEB_BASE_URL=http://localhost:5055
export EASYWEB_USERNAME=admin
export EASYWEB_PASSWORD=EasyWebRemote!2026
export EASYWEB_THEME_PATH=/
export EASYWEB_DEFAULT_CULTURE=de
PowerShell:
$env:EASYWEB_BASE_URL="http://localhost:5055"
$env:EASYWEB_USERNAME="admin"
$env:EASYWEB_PASSWORD="EasyWebRemote!2026"
$env:EASYWEB_THEME_PATH="/"
$env:EASYWEB_DEFAULT_CULTURE="de"
CMS admin (for pull / sync)
Workspace pull also downloads navigation and uploaded images from the CMS API. That uses CMS admin credentials (not WebDAV):
macOS/Linux:
export EASYWEB_ADMIN_EMAIL=admin@easyweb.local
export EASYWEB_ADMIN_PASSWORD=EasyWeb!2026
On ESYS Hosting stacks, use the deploy form admin email and admin password (same as the CMS login), not the WebDAV remote-editing password.
Optional:
export EASYWEB_SITE_ID=4a33a08b-f52f-4e89-bc4b-3ecb8fe49cb5 # default seeded site
Common Commands
easyweb ls /theme
easyweb push ./theme /theme
easyweb publish . --default-culture de
easyweb pull-navigation .
easyweb push-navigation .
easyweb pull .
easyweb sync .
easyweb pull /theme ./theme
easyweb validate .
easyweb create-theme MyTheme ./Themes
easyweb update --check
easyweb update
easyweb clear /theme --yes
Publish and pull (workspace)
Standard site layout in git:
my-site/
theme/ # layout, assets, inc/
pages/ # page HTML and .meta.json
pages/de/ # optional culture subfolders
settings/navigation.json # main menu (CMS database via API)
Publish (local → server):
easyweb publish . --default-culture de
Uploads theme/ → WebDAV /theme and pages/ → /pages (with culture mirroring when needed).
When settings/navigation.json exists in the workspace, publish also pushes navigation to the CMS (unless you pass --skip-navigation). Requires EASYWEB_ADMIN_EMAIL and EASYWEB_ADMIN_PASSWORD.
Pull navigation (CMS → local):
easyweb pull-navigation .
Writes settings/navigation.json with the current menu from the database (includes link id values for later updates).
Push navigation (local → CMS):
easyweb push-navigation .
Applies settings/navigation.json to the CMS:
- Link order in the file becomes
sortOrder(top = first in menu). - Links with an
idfrom a previous pull are updated. - Links without
idare created. - Server links missing from the file are deleted.
After a successful push, navigation.json is rewritten with current server ids (use --no-rewrite to keep your file unchanged).
Requires CMS admin credentials and Navigation → Edit permission (cms.navigation.edit).
Legacy navigation/main.json is still read if the settings file does not exist.
Example settings/navigation.json:
{
"siteId": "4a33a08b-f52f-4e89-bc4b-3ecb8fe49cb5",
"links": [
{ "title": "Home", "url": "/home" },
{ "title": "About", "url": "/about" }
]
}
You can also use a bare array of links. Run easyweb pull . first to export ids from the server.
Pull (server → local) after CMS or remote edits:
easyweb pull .
# alias
easyweb sync .
Downloads into the workspace:
| Server source | Local path |
|---|---|
WebDAV /theme |
theme/ |
WebDAV /pages |
pages/ (all cultures, .meta.json including SEO and sliders) |
| CMS navigation API | settings/navigation.json |
| CMS media library | images/ |
Requires EASYWEB_ADMIN_EMAIL and EASYWEB_ADMIN_PASSWORD for navigation and images. WebDAV credentials alone sync only theme and pages.
Flags:
--skip-cms— WebDAV only (theme/,pages/)--skip-images— pull navigation but notimages/--skip-navigation— onpublish, skip pushingsettings/navigation.json--no-rewrite— onpush-navigation, do not updatenavigation.jsonwith server ids--admin-email,--admin-password,--site-id— override env vars
Single-folder pull (WebDAV only):
easyweb pull /theme ./theme
easyweb pull /pages ./pages
Tip: Edit
settings/navigation.jsonin git, then runeasyweb push-navigation .oreasyweb publish .to apply changes to the live site.
Validate theme
Check a workspace or generated theme before publish:
easyweb validate .
The command verifies required files (theme.json, inc/_header.html, inc/_footer.html, index.html, assets/css/main.css, assets/js/main.js), EasyWeb Liquid placeholders, editable regions, and duplicate theme/ vs pages/ slug templates. Exit code is 1 when any check fails.
Create theme and update README docs
Scaffold a new theme from the shared template:
easyweb create-theme MyTheme ./Themes
Refresh the generated Template docs section in a theme README.md:
easyweb update docs .
# alias
easyweb update-docs .
Auto Update
The CLI can self-update from the latest Hub release:
easyweb update --check
easyweb update
Notes:
--checkonly checks and prints latest version.--forceinstalls even when versions match.- Update runs
npm install -g <downloaded .tgz>under the hood.
Help and Cursor Compatibility
The CLI supports both global and command-level help:
easyweb --help
easyweb help
easyweb help publish
easyweb help pull
easyweb publish --help
easyweb pull --help
This makes command discovery reliable for both humans and AI tooling (including Cursor).
Further reading
- CMS admin — WYSIWYG pages, sliders, image gallery
- Themes and content — Liquid, pages, sliders, cultures
- CMS permissions
- EasyWeb remote editing — WebDAV layout and credentials (core repo)