Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/frappe/frappe/llms.txt

Use this file to discover all available pages before exploring further.

Apps are the building blocks of Frappe Framework. They allow you to extend the core functionality and build custom applications.

Creating an app

Use the bench make-app command to create a new app:
bench make-app my_app
You’ll be prompted for app details:
1

Provide app information

Enter the following details when prompted:
  • App Title: Human-readable name (e.g., “My App”)
  • App Description: Brief description of what your app does
  • App Publisher: Your name or company name
  • App Email: Contact email address
  • App License: Choose from popular licenses (MIT, GPL, etc.)
2

Choose branch name

Select the branch name (defaults to the Frappe version branch)
3

Configure GitHub workflow (optional)

Decide whether to create GitHub Actions for automated testing

What gets created

The command creates a complete app structure:
my_app/
├── my_app/
│   ├── __init__.py
│   ├── hooks.py              # App configuration and hooks
│   ├── patches.txt           # Database migration patches
│   ├── modules.txt           # List of modules
│   ├── config/              # Desk configuration
│   ├── public/              # Static assets (JS, CSS)
│   ├── templates/           # Jinja templates
│   └── www/                 # Web pages
├── pyproject.toml           # Python package configuration
├── license.txt
├── README.md
└── .gitignore

Installing the app

After creating your app, install it on a site:
1

Get the app in bench

If your app is in a remote repository:
bench get-app https://github.com/username/my_app
If you created it locally, it’s already available.
2

Install on a site

bench --site sitename install-app my_app
3

Build assets

Build JavaScript and CSS assets:
bench build --app my_app

CLI reference

The make-app command is defined in /home/daytona/workspace/source/frappe/commands/utils.py:803:
@click.command("make-app")
@click.argument("destination")
@click.argument("app_name")
@click.option("--no-git", is_flag=True, default=False, 
              help="Do not initialize git repository for the app")
def make_app(destination, app_name, no_git=False):
    "Creates a boilerplate app"

Options

  • destination: Directory where the app will be created (usually . for current directory)
  • app_name: Name of the app in snake_case
  • --no-git: Skip git initialization

Next steps

After creating your app:
  1. Understand the app structure
  2. Create your first DocType
  3. Add customizations
  4. Configure hooks