frappe-documentation-generator
Generate API documentation, user guides, and technical documentation for Frappe apps. Use when documenting APIs, creating user guides, or generating OpenAPI specs.
frappe-sne-runner
Set up local Frappe/ERPNext development using vyogo SNE (Single Node Environment) images. Replaces the traditional multi-container setup (MariaDB, Redis, workers, scheduler) with a single all-in-one container.
Full skill instructions
Set up local Frappe/ERPNext development using vyogo's SNE (Single Node Environment) images. One container replaces the entire traditional Frappe stack.
Claude should invoke this skill when:
vyogo/erpnext, vyogo/frappe, or SNE imagesbench test in an SNE containersne-version-15 or sne-version-16A traditional containerized Frappe dev environment requires separate services for database, cache, workers, scheduler, websocket, and frontend:
services:
backend:
image: frappe/erpnext:v15
db:
image: mariadb:10.6
int-redis-cache:
image: redis:6.2-alpine
int-redis-queue:
image: redis:6.2-alpine
int-redis-socketio:
image: redis:6.2-alpine
frontend:
image: frappe/erpnext:v15
command: nginx-entrypoint.sh
queue-default:
image: frappe/erpnext:v15
command: bench worker --queue default
queue-long:
image: frappe/erpnext:v15
command: bench worker --queue long
queue-short:
image: frappe/erpnext:v15
command: bench worker --queue short
scheduler:
image: frappe/erpnext:v15
command: bench schedule
websocket:
image: frappe/erpnext:v15
command: node socketio.js
configurator:
# configures db_host, redis_cache, etc.
create-site:
# creates site, installs apps
Plus separate named volumes for db-data, redis-data, sites, and logs.
services:
frappe-sne:
image: docker.io/vyogo/erpnext:sne-version-16
ports:
- "8000:8000"
That's it. MariaDB, Redis, workers, scheduler, websocket -- all run inside the single container. Site is pre-created. Apps are auto-discovered.
podman run -p 8000:8000 docker.io/vyogo/erpnext:sne-version-16
Access at http://localhost:8000 -- login: Administrator / admin.
Mount your app directory. The container auto-discovers it, runs pip install -e, and registers it:
podman run -p 8000:8000 \
-v ./my_custom_app:/home/frappe/frappe-bench/apps/my_custom_app \
docker.io/vyogo/erpnext:sne-version-16
No bench get-app needed.
podman run -p 8000:8000 \
-v ./app_one:/home/frappe/frappe-bench/apps/app_one \
-v ./app_two:/home/frappe/frappe-bench/apps/app_two \
docker.io/vyogo/erpnext:sne-version-16
podman run -p 8000:8000 \
-v ./my_app:/home/frappe/frappe-bench/apps/my_app \
docker.io/vyogo/frappe:s2i-version-16
services:
frappe-sne:
image: docker.io/vyogo/erpnext:sne-version-16
ports:
- "8000:8000"
volumes:
- .:/home/frappe/frappe-bench/apps/<app-name>
services:
frappe-sne:
image: docker.io/vyogo/erpnext:sne-version-16
ports:
- "8000:8000"
volumes:
- .:/home/frappe/frappe-bench/apps/<app-name>
- site_data:/home/frappe/frappe-bench/sites
environment:
- ENABLE_ASSETS_CACHE=true
volumes:
site_data:
When pairing an SNE container with microservices, the SNE container acts as the central site. Microservices connect to its built-in MariaDB and Redis over a shared network:
name: my-project-dev
services:
central-site:
image: docker.io/vyogo/erpnext:sne-version-16
ports:
- "8080:8000"
networks:
- dev-network
my-service:
image: my-microservice:latest
ports:
- "8002:8000"
environment:
- CENTRAL_SITE_URL=http://central-site:8000
- DB_HOST=central-site
- DB_PORT=3306
- REDIS_HOST=central-site
- REDIS_PORT=6379
depends_on:
central-site:
condition: service_started
networks:
- dev-network
networks:
dev-network:
driver: bridge
| Image | Description | Versions |
|---|---|---|
docker.io/vyogo/erpnext:sne-version-{VER} | ERPNext + Frappe (most common) | 13, 14, 15, 16 |
docker.io/vyogo/frappe:s2i-version-{VER} | Frappe only (no ERPNext) | 15, 16 |
docker.io/vyogo/crm:sne-version-{VER} | Frappe CRM | 15, 16 |
docker.io/vyogo/central-site:sne-version-{VER} | Central site for microservices | 15, 16 |
All images support both linux/amd64 and linux/arm64 (Apple Silicon).
Each SNE container runs:
ChangeMe (configurable via MYSQL_ROOT_PASSWORD)dev.localhost, admin password admin| Version | Use Case |
|---|---|
sne-version-16 | Latest features, new projects (default) |
sne-version-15 | Stable, production-like development |
sne-version-14 | Legacy apps |
sne-version-13 | Legacy apps |
SNE images already include the full bench stack, so tests can run directly in the container with bench test.
podman run --rm -it \
-v "$PWD":/home/frappe/frappe-bench/apps/<app-name> \
docker.io/vyogo/erpnext:sne-version-16 \
bench test --app <app-name>
Use docker.io/vyogo/erpnext:sne-version-15 for stable branches.
jobs:
test:
runs-on: ubuntu-latest
container:
image: docker.io/vyogo/erpnext:sne-version-16
steps:
- uses: actions/checkout@v4
- name: Run bench test
run: bench test --app $(basename ${{ github.repository }})
Swap to sne-version-15 when you want the stable image line.
| Variable | Default | Description |
|---|---|---|
MYSQL_ROOT_PASSWORD | ChangeMe | MariaDB root password |
ENABLE_ASSETS_CACHE | false | Restore cached assets when sites/ is a mounted volume |
apps/ directory, runs pip install -e for each, updates apps.txtENABLE_ASSETS_CACHE=truebench start runs in foreground (web server + workers + scheduler)Build a standalone image containing your app using S2I (Source-to-Image):
[
{
"url": "https://github.com/frappe/erpnext.git",
"branch": "version-16",
"name": "erpnext"
},
{
"name": "my_app",
"source": "my_app"
}
]
Build:
s2i build . docker.io/vyogo/frappe:s2i-version-16 my-app-image
FROM docker.io/vyogo/frappe:s2i-version-16
ENV FRAPPE_SITE_NAME=dev.localhost
COPY apps.json /tmp/apps.json
COPY my_app /upload/src/my_app
Use the ARM image:
podman run --platform linux/arm64 -p 8000:8000 \
docker.io/vyogo/erpnext:sne-version-16
Ensure the mounted directory:
/home/frappe/frappe-bench/apps/hooks.py or pyproject.tomlpodman run -p 8080:8000 docker.io/vyogo/erpnext:sne-version-16
sne-version-16 for new projectsENABLE_ASSETS_CACHE=true when persisting sites/ as a volumelatest in CI/CDGenerate API documentation, user guides, and technical documentation for Frappe apps. Use when documenting APIs, creating user guides, or generating OpenAPI specs.
Generate Containerfile for Frappe apps using the official frappe/erpnext images with Gunicorn. The recommended pattern copies app source into the bench layout and runs Gunicorn directly.
Enforce the Iron Law of TDD for Frappe apps. Red-Green-Refactor cycle for DocTypes and Controllers.
Generate Frappe-style DocType controllers with lifecycle methods for microservices.
Canonical folder structure produced by `bench new-app` for modern Frappe (v14/v15+). Use this as the ground truth for any Frappe app file tree — includes pyproject.toml and module management.
Generate whitelisted API methods and REST endpoints for standard Frappe and microservices.
Validate code follows frappe-microservice-lib patterns, security best practices, and framework conventions.
Generate tenant-isolated database queries using TenantAwareDB to prevent cross-tenant access.
Generate secure, tenant-aware API endpoints with authentication and tenant isolation.
Generate Frappe Web Forms for public-facing forms. Use when creating customer portals, registration forms, surveys, or public data collection forms.
Generate comprehensive unit tests for Frappe DocTypes, controllers, and API methods. Use when creating test files, writing test cases, or setting up test infrastructure for Frappe/ERPNext applications.
Generate integration tests for multi-DocType workflows and distributed services in Frappe.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience