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 configuration <instance>Export or save app settings
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
--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

# Install and start
lawn app install nextcloud --start

When required settings need values, installation lists them and directs you to lawn app config.

lawn app config

View and edit an app's template settings.

lawn app config <instance>
lawn app config list <instance>
lawn app config set <instance> NAME=VALUE [NAME=VALUE ...]
lawn app config reset <instance> NAME [NAME ...]
lawn app config reset <instance> --all

List alias: ls

The list includes current values, required settings, saved overrides, and available choices. Set an option and its settings together:

lawn app install github-actions-runner --name ci
lawn app config set ci RUNNER_SCOPE=repo REPO_URL=https://github.com/your-org/your-repo
lawn app config list ci

Before starting the runner for the first time, enter its registration token in Edit Configuration. Then run lawn app start ci.

Reset removes the selected overrides and reveals their template defaults. Generated secrets cannot be reset; --all preserves them. A stopped app can save incomplete settings. A running app keeps its existing settings if an edit leaves required values missing.

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.

Logs remain available after the app stops or fails to start. Each container's next start replaces its saved output.

lawn app logs <instance>
OptionDescription
-f, --followStream logs in real time
-t, --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 configuration

Export app settings as JSON, or save several sections together.

lawn app configuration <instance> > settings.json
# Edit settings.json, then apply its settings
lawn app configuration <instance> --file settings.json
OptionDescription
--file <path>Read and apply settings from this JSON file; use - for standard input

The JSON contains configVariables, environmentVariables, ports, and resources. Omit a section to keep its saved settings. When editing an entry's value, host port, or memory limit, set isOverridden to true to apply that value.

For settings with template defaults, set isOverridden to false to restore the default. For an environment variable, also set isRemoved to false. Generated secrets retain their saved values.

Saving changed settings restarts a running app and briefly interrupts access. Use lawn app info show <instance> to check startup after saving.

The ports, env, and resources commands below use the same save behavior.

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]

The port list shows each mapping's current availability and the owner of an occupied port when known. Use --output json for structured availability, owner details, and addresses for available ports.

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>