Development documentation may include features that are not in the latest release. Read the Lawn 0.8.1 guide.
lawn catalog
Catalog commands
| Command | Description |
|---|---|
lawn catalog search [query] | List or search available app templates |
lawn catalog info <id> | Show details for a template |
lawn catalog update | Pull the latest catalog updates |
lawn catalog list | List configured catalog sources |
lawn catalog add <location> | Register a Git or local catalog |
lawn catalog edit <identifier> | Place a catalog in a user-managed checkout |
lawn catalog unedit <identifier> | Return an editable catalog to Lawn management |
lawn catalog remove <identifier> | Deregister a custom catalog |
Installing an app lives under lawn app install.
Template IDs and catalog slugs
Use a short template ID such as whoami when only one configured catalog supplies it. If several catalogs have the same ID, the command lists qualified selectors to choose from.
A qualified selector has the form <catalog-slug>/<app>. GitHub catalog slugs use owner/repository; other Git hosts include the hostname. Local catalogs use the directory's lowercase basename.
| Catalog location | Qualified template selector |
|---|---|
https://github.com/alice/my-apps.git | alice/my-apps/photoprism |
https://gitlab.com/alice/my-apps.git | gitlab.com/alice/my-apps/photoprism |
~/Projects/My-Lawn-Catalog | my-lawn-catalog/photoprism |
Commands that take a template ID, including lawn app install and lawn catalog info, accept short IDs and qualified selectors. Get catalog slugs from lawn catalog list --output json.
lawn catalog search
List or search available app templates. With no query, all templates are listed; with a query, results are filtered by name, description, or tags.
lawn catalog search [query]
| Option | Description |
|---|---|
--category <name> | Filter by category |
-q, --quiet | Only display template IDs |
# List every template
lawn catalog search
# Search by keyword
lawn catalog search photos
lawn catalog search "password manager"
# Filter by category
lawn catalog search --category Media
# Get just the IDs (useful for scripting)
lawn catalog search --quiet
lawn catalog info
Show full details for an app template, including its description, features, and links.
lawn catalog info <template-id>
# Short form (when unambiguous across your catalogs)
lawn catalog info jellyfin
# Qualified selectors
lawn catalog info getlawn/templates/paperless-ngx
lawn catalog info alice/my-apps/photoprism
lawn catalog info gitlab.com/alice/my-apps/photoprism
lawn catalog info my-lawn-catalog/photoprism
# List historical template versions
lawn catalog info paperless-ngx --versions
--versions lists historical template versions and revisions that Lawn can load from the catalog's Git history, newest first. It requires a Git-backed catalog checkout, including for local catalogs. Ordinary browsing of local catalog folders does not require Git. This is template history, not a list of installed app versions.
lawn catalog update
Pull the latest updates for catalogs that follow a branch. Lawn also updates these catalogs automatically in the background. Tags stay pinned; local folders and editable checkouts are user-managed and are skipped by both automatic updates and this command.
lawn catalog update
lawn catalog refresh
lawn catalog refresh is an alias for lawn catalog update.
lawn catalog list
List configured catalog sources, including built-in catalogs and any you've added.
lawn catalog list
Text output shows each source's display name, URL, app count when available, ref and subdirectory when set, and either the editable checkout path or last-pulled time. Display names preserve repository or directory capitalization. Text output omits the built-in/custom kind.
Use JSON for catalog selectors and kind:
lawn catalog list --output json
Each JSON object includes slug, the stable UUID in id, and kind, either built-in or custom. It also includes identifier, url, ref, path, editable, editablePath, and lastPulledAt.
lawn catalog add
Register a catalog by Git URL, GitHub owner/repository, or local directory path. Lawn clones remote repositories; local directories are used in place and are never updated by Lawn. Its templates are immediately available to lawn catalog search and lawn app install.
lawn catalog add <location>
Press Ctrl+C to cancel an add. If the connection closes or Lawn reports missing progress updates, the add may still finish. Check lawn catalog list before trying again.
| Option | Description |
|---|---|
--ref <ref> | Follow a Git branch or pin to a tag. Defaults to following the repository's default branch. |
--path <dir> | Subdirectory within the repo containing catalog apps. Defaults to the repo root. |
# Add a public GitHub catalog
lawn catalog add https://github.com/alice/my-apps.git
# Add a local catalog
lawn catalog add ~/Projects/my-lawn-catalog
# Follow updates on the stable branch
lawn catalog add https://github.com/alice/my-apps.git --ref stable
# Pin to a tag instead of following branch updates
lawn catalog add https://github.com/alice/my-apps.git --ref v1.0.0
# Apps live in a subdirectory of the repo
lawn catalog add https://github.com/alice/monorepo.git --path lawn-apps
Remote catalogs must be public Git repositories.
lawn catalog edit
Place a Git catalog in a user-managed checkout. The command prints the checkout path; JSON output supplies it as editablePath. Modify the files there and manage Git pulls and pushes yourself. Lawn pauses automatic pulls while the catalog is editable, and lawn catalog update skips it too.
lawn catalog edit <identifier>
# By slug
lawn catalog edit alice/my-apps
# By URL
lawn catalog edit https://github.com/alice/my-apps.git
The identifier can be the catalog's slug, URL, or UUID from lawn catalog list --output json. Local catalog folders are already user-managed and do not need edit.
lawn catalog unedit
Return an editable Git catalog to Lawn management. Lawn replaces the editable checkout with a fresh clone of the configured source and resumes automatic updates for branch-following catalogs. Commit and push your changes first; the command refuses uncommitted changes or unpushed commits unless you pass --force.
lawn catalog unedit <identifier>
lawn catalog unedit alice/my-apps
Accepts the same slug, URL, or UUID selectors as edit. Local catalog folders always remain user-managed and cannot be switched to managed mode with unedit.
| Option | Description |
|---|---|
--force | Discard uncommitted changes and unpushed commits. |
# Discard local work and return to a fresh managed clone
lawn catalog unedit alice/my-apps --force
lawn catalog remove
Deregister a custom catalog. Lawn deletes managed clones. Editable checkouts and local catalog folders stay on disk.
lawn catalog remove <identifier>
The identifier can be the catalog's slug, its URL (case-insensitive, .git suffix optional), local directory path, or its UUID from lawn catalog list --output json.
| Option | Description |
|---|---|
--force | Skip the confirmation prompt. Required when standard input is not a terminal. |
# By slug, with interactive confirmation
lawn catalog remove alice/my-apps
# By URL
lawn catalog remove https://github.com/alice/my-apps.git
# By local directory
lawn catalog remove ~/Projects/my-lawn-catalog
# By UUID
lawn catalog remove 8C2A3B42-F077-4D89-B216-E5DEB0E7A6F1
# Unattended removal
lawn catalog remove alice/my-apps --force
Built-in catalogs cannot be removed. Catalogs with installed apps also cannot be removed; the command lists the blocking instances by name. Uninstall them with lawn app remove <id> first, then retry. --force skips confirmation only and does not bypass either restriction.