Package Script Writer (psw) Generate and run Umbraco CMS installation scripts using the psw CLI tool. Workflow Check if PSW CLI is installed: psw --version If command not found, the .NET tools path may not be in PATH. Try: Linux/Mac: export PATH="$PATH:$HOME/.dotnet/tools" && psw --version Windows: %USERPROFILE%.dotnet\tools\psw --version If not installed, install it: dotnet tool install --global PackageScriptWriter.Cli Then run the psw command (see below) Non-Interactive Usage (Claude Code) This is the command to use: export PATH = " $PATH : $HOME /.dotnet/tools" psw -d -n ProjectName -s ProjectName -u --database-type SQLite --admin-email admin@test.com --admin-password SecurePass1234 --auto-run Run this with run_in_background: true since Umbraco is a long-running web server. Critical flags: -d - REQUIRED - generates the full installation script (without this, only dotnet run is generated which fails) -u - use unattended install defaults --auto-run - execute the script immediately Never combine -o with --auto-run (truncates the script) Default credentials: admin@test.com / SecurePass1234 With Packages psw -d -n ProjectName -s ProjectName -u --database-type SQLite --admin-email admin@test.com --admin-password "SecurePass1234" -p "uSync,Umbraco.Forms" --auto-run With specific versions: psw -d -n ProjectName -s ProjectName -u --database-type SQLite --admin-email admin@test.com --admin-password "SecurePass1234" -p "uSync|17.0.0,Umbraco.Forms|17.0.1" --auto-run IMPORTANT Do not use characters that are escapable in passwords or usernames Key Options Flag Description -d, --default REQUIRED - generates full installation script -n, --project-name Project name -s, --solution Solution name -u, --unattended-defaults Use unattended install defaults --database-type SQLite, LocalDb, SQLServer, SQLAzure, SQLCE --admin-email Admin email for unattended install --admin-password Admin password for unattended install --auto-run Execute the generated script -p, --packages Comma-separated packages (e.g., "uSync,Umbraco.Forms") -t, --template-package Umbraco template with optional version -da, --delivery-api Enable Content Delivery API Waiting for Umbraco to Start After running the command in background, poll for readiness:
Check the output for the port number (e.g., "Now listening on: https://localhost:44356")
Then poll until ready:
for i in { 1 .. 30 } ; do if nc -z localhost 44356 2
/dev/null ; then echo "Umbraco is ready!" break fi sleep 2 done Other Commands psw versions
Show Umbraco versions with support status
psw history list
Show recent scripts
psw history rerun 1
Re-run script #1
psw --clear-cache