Directory structure

When you initialize a new frappe-bench directory, you will have a directory structure similar to:

├── apps
    ├── frappe
├── config
    ├── redis_cache.conf
    ├── redis_queue.conf
    └── redis_socketio.conf
├── env
├── logs
├── Procfile
└── sites
    ├── apps.txt
    ├── assets
    ├── common_site_config.json
    └── site1.local
        ├── private
        ├── public
        └── site_config.json


The frappe app and other frappe based apps live in this directory. When you run the command bench new-app app_name, the app will be bootstrapped in this directory. Your custom apps live here and you are supposed to edit/work with them here.

Learn more about apps.


Sites are served from this directory. When you run the command bench new-site site_name, the site will be created in this directory. Sites are distinguished based on their directory name.

Learn more about sites.


This directory is used to dump log files from various processes. Each log file is named based on the process it is logged from.


Frappe uses 3 Redis instances to manage caching, job queueing and socketio communication. All of those configurations live here.


The Python virtual environment live in this directory. Frappe based apps and Python package dependencies are installed here.


Frappe uses Procfile based process management. The default Procfile looks something like this:

redis_cache: redis-server config/redis_cache.conf
redis_socketio: redis-server config/redis_socketio.conf
redis_queue: redis-server config/redis_queue.conf
web: bench serve --port 8000

socketio: /usr/bin/node apps/frappe/socketio.js

watch: bench watch

schedule: bench schedule
worker_short: bench worker --queue short --quiet
worker_long: bench worker --queue long --quiet
worker_default: bench worker --queue default --quiet

Let's see what each process is used for.


Redis used for in-memory caching.


Redis used as a pub/sub between web and socketio processes for realtime communication.


Redis used for managing background jobs queuing.


Python web server based on Werkzeug.


Node server for a socketio connection with the browser for realtime communication.


Node server for bundling JS/CSS assets using Rollup. It will also rebuild files as they change.


Job Scheduler using Python RQ.


Python worker with a (short) timeout of 300s.


Python worker with a (long) timeout of 1500s.


Python worker with a timeout of 300s.

On this page