CLI

lawn app

Manage installed app instances — lifecycle, logs, configuration, and more.

Commands for one installed app take its instance name or ID.

CommandDescription
lawn app install <id>Install an app from the catalog
lawn app listList all installed instances
lawn app outdatedList 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 psShow 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 portsView and manage port configuration
lawn app envView and manage environment variables
lawn app resourcesView and manage resource limits
lawn app info noticesView and manage notices

lawn app install

Install an app from the catalog.

lawn app install <template-id>
OptionDescription
--name <name>Custom name for the instance
-p, --port <mapping>Port override as containerPort:hostPort (repeatable)
--random-portUse randomly assigned free ports
--var <assignment>Variable value as NAME=VALUE (repeatable)
--startStart 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

OptionDescription
-q, --quietOnly 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.

OptionDescription
--dry-runReview the update without applying it
-y, --yesAccept 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
OptionDescription
-q, --quietOnly display instance/container identifiers
-a, --allShow 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
OptionDescription
--enableEnable automatic startup
--disableDisable 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

OptionDescription
--forceSkip 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>
OptionDescription
-f, --followStream 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>
OptionDescription
-i, --interactiveKeep stdin open
-tAllocate 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>
OptionDescription
--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]
OptionDescription
-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:

OptionDescription
-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>