App Management¶
Install apps when you create a bench or later from a bench shell.
Install during create:
Install after creation (example for ERPNext):
Install a private app (pass a GitHub URL or org/repo and a token):
App string formats you can use:
erpnext -> frappe/erpnext, default branch
erpnext:version-15 -> frappe/erpnext, version-15 branch
frappe/erpnext:version-15 -> organization/repo and branch
https://github.com/org/repo:main -> full GitHub URL
[email protected]:org/repo:main -> SSH URL for private repos
frappe/frappe:version-15#apps/frappe -> monorepo subdirectory (repo#path/to/subdir)
frappe/erpnext:a1b2c3d -> specific commit SHA as the ref
Monorepo apps
When an app lives inside a subdirectory of a larger repo (common in company monorepos), use the # separator: org/repo:branch#apps/my-app. FM clones the repo once and picks the correct subdirectory.
Remove an app from a bench using the bench CLI inside a shell:
Tip
fm info mybench shows the list of installed apps and their versions.
Updating an app¶
Apps are updated through the standard Frappe bench update workflow inside the bench container:
# Update all apps
fm shell mybench -c "bench update"
# Update a specific app only
fm shell mybench -c "bench update --app erpnext"
bench update pulls the latest code, runs migrations, and rebuilds assets. This can take a few minutes.
Tip
For a safer update in production, drain workers before running bench update so no jobs are interrupted. See the fmx guide for how to do this.
Opening an interactive shell¶
For anything not covered by a single command, drop into an interactive shell:
From here you have full access to the bench CLI and all standard Frappe tools (bench migrate, bench build, bench console, etc.).