lawn app
Commands for one installed app take its instance name or ID.
| Command | Description |
|---|---|
lawn app install <id> | Install an app from the catalog |
lawn app list | List all installed instances |
lawn app outdated | List apps with available updates |
lawn app upgrade [apps...] | Update selected apps, or all outdated apps |
lawn app info show <instance> | Show instance details |
lawn app ps | Show running containers |
lawn app start <instance> | Start an instance |
lawn app stop <instance> | Stop an instance |
lawn app restart <instance> | Restart an instance |
lawn app reinstall <instance> | Reinstall an app while keeping its data and settings |
lawn app rename <instance> <new-name> | Rename an instance |
lawn app autostart <instance> | Configure automatic startup |
lawn app remove <instance> | Remove an instance |
lawn app logs <instance> | View container logs |
lawn app exec <instance> -- <cmd> | Run a command in a container |
lawn app shell <instance> | Open an interactive shell |
lawn app ports | View and manage port configuration |
lawn app env | View and manage environment variables |
lawn app resources | View and manage resource limits |
lawn app info notices | View and manage notices |
lawn app install
Install an app from the catalog.
lawn app install <template-id>
| Option | Description |
|---|---|
--name <name> | Custom name for the instance |
-p, --port <mapping> | Port override as containerPort:hostPort (repeatable) |
--random-port | Use randomly assigned free ports |
--var <assignment> | Variable value as NAME=VALUE (repeatable) |
--start | Start the app after installation |
# Basic install
lawn app install mealie
# Install an older version
lawn app install paperless-ngx@2.20.15
# Custom name and port
lawn app install jellyfin --name "Media Server" --port 8096:9000
# Supply required variables non-interactively
lawn app install paperless-ngx --var ADMIN_PASSWORD=mypassword
# Install and start
lawn app install nextcloud --start
If an app requires user-provided variables (like an admin password), the CLI prompts you interactively. Use --var to skip the prompts.
lawn app list
List all installed app instances.
lawn app list
Aliases: ls
| Option | Description |
|---|---|
-q, --quiet | Only display instance IDs |
lawn app outdated
Refresh the catalog, then list apps with available updates:
lawn catalog update
lawn app outdated
lawn app upgrade
Update selected apps, or omit the names to update all outdated apps:
lawn app upgrade grafana
lawn app upgrade grafana paperless
lawn app upgrade
# Apply only the next required version
lawn app upgrade paperless --next
# Skip required intermediate versions. This may corrupt the app's data.
lawn app upgrade nextcloud --force --yes
A running app stops during the update and starts again afterward. A stopped app stays stopped.
| Option | Description |
|---|---|
--dry-run | Review the update without applying it |
-y, --yes | Accept the update and any requested temporary start without prompting. Required in scripts and with JSON output |
# Update all outdated apps in a script
lawn app upgrade --yes --output json > updates.json
Exit status is zero on success and nonzero if any update fails. Other apps continue updating after a failure. To undo an update, restore the snapshot taken before it.
lawn app info show
Show detailed information about an app instance.
lawn app info show <instance>
lawn app ps
Show running containers across all instances.
lawn app ps
| Option | Description |
|---|---|
-q, --quiet | Only display instance/container identifiers |
-a, --all | Show all containers, including stopped |
lawn app start
Start an app instance and all its containers.
lawn app start <instance>
lawn app stop
Gracefully stop an app instance.
lawn app stop <instance>
lawn app restart
Stop and start an app instance.
lawn app restart <instance>
lawn app reinstall
Reinstall the same app version while keeping its data and settings. Lawn saves a recovery snapshot first, then tries starting the app again:
lawn app reinstall garage
The command asks for confirmation. Use --yes for intentional non-interactive use. It reports progress and the startup result.
Mounted app data, configuration, secrets, and settings are reused. Custom files inside the system filesystem remain only in the recovery snapshot. Reinstallation does not upgrade the app and may not resolve problems with configuration, networking, or mounted data. If Lawn cannot capture the complete snapshot, reinstallation stops without replacing system files.
The recovery snapshot remains available after success or failure. Use the snapshot ID reported by the command to restore the complete previous state:
lawn app snapshot list garage
lawn app snapshot restore garage <snapshot-id>
Restoring also returns mounted data to the snapshot's state, undoing changes made by the attempted restart. The previous state may still fail to start. See the snapshot command reference for restore options.
lawn app rename
Rename an app instance.
lawn app rename <instance> <new-name>
lawn app rename whoami "My App"
lawn app autostart
Configure automatic startup for an app instance. When enabled, the instance starts automatically when Lawn launches.
lawn app autostart <instance> --enable
lawn app autostart <instance> --disable
| Option | Description |
|---|---|
--enable | Enable automatic startup |
--disable | Disable automatic startup |
lawn app remove
Delete an installed app instance and all associated data, including snapshots. This cannot be undone.
lawn app remove <instance>
Aliases: rm
| Option | Description |
|---|---|
--force | Skip the confirmation prompt |
# Remove and delete all data
lawn app remove jellyfin
# Skip confirmation
lawn app remove jellyfin --force
lawn app logs
View logs from an app instance.
lawn app logs <instance>
| Option | Description |
|---|---|
-f, --follow | Stream logs in real time |
-n, --tail <lines> | Number of lines to show from the end |
--container <name> | Filter to a specific container |
# Follow logs in real time
lawn app logs jellyfin --follow
# Show last 50 lines
lawn app logs jellyfin --tail 50
# Logs from a specific container
lawn app logs nextcloud --container db
lawn app exec
Execute a command inside a running container.
lawn app exec <instance> -- <command>
| Option | Description |
|---|---|
-i, --interactive | Keep stdin open |
-t | Allocate a pseudo-TTY |
--container <name> | Target a specific container |
# Run a one-off command
lawn app exec nextcloud -- ls /var/www/html
# Interactive session
lawn app exec -it nextcloud -- /bin/bash
lawn app shell
Open an interactive shell inside a running container. The shell is auto-detected (bash, sh, etc.).
lawn app shell <instance>
| Option | Description |
|---|---|
--container <name> | Target a specific container |
--shell <path> | Shell to use (auto-detected if omitted) |
lawn app ports
View and manage port configuration.
# List ports
lawn app ports list <instance>
# Set a port override
lawn app ports set <instance> <containerPort>:<hostPort>
# Reset to template defaults
lawn app ports reset <instance> [containerPort]
lawn app env
View and manage environment variables.
# List environment variables
lawn app env list <instance>
# Set an override
lawn app env set <instance> NAME=VALUE
# Reset to template defaults
lawn app env reset <instance> [name]
| Option | Description |
|---|---|
-c, --container <name> | Filter or target a specific container |
lawn app resources
View and manage resource limits.
# List resource limits
lawn app resources list <instance>
# Set memory limit (in MB, minimum 128)
lawn app resources set <instance> <memoryMB>
# Reset to template defaults
lawn app resources reset <instance>
The set and reset commands accept:
| Option | Description |
|---|---|
-c, --container <name> | Target a specific container |
lawn app info notices
View and manage template notices for an instance.
# List notices
lawn app info notices list <instance>
# Dismiss a notice
lawn app info notices dismiss <instance> <noticeId>
# Restore all dismissed notices
lawn app info notices restore <instance>