Browse / Scheduling and staffing
Frappe HR
Open-source HR and payroll with shift types, assignments, checkins and auto attendance, reachable through the Frappe REST API.
Frappe HR is a full HRMS on the Frappe Framework: employee lifecycle, shift management (Shift Type, Shift Assignment, Shift Request, Employee Checkin with auto attendance), leave, expenses, appraisals and payroll, plus a mobile app. Every doctype is exposed through the framework's /api/resource REST API with token auth, published by the same organization. Self-hosting is free; Frappe Cloud hosts it from USD 5 per month.
- I run shifts for hourly staff and want checkins to become attendance and leave balances automatically
- I want my agent to assign shifts, approve leave and pull attendance through one API rather than three HR tools
- Requires ERPNext installed on the same site (README: bench get-app erpnext before hrms); this is not a standalone app
- GPL-3.0 per the repository; frappe.io/hr/pricing says AGPL-3.0, so check LICENSE before redistributing
- Framework-shaped: bench, sites and doctypes have a learning curve; customizing in the hrms repo directly makes upgrades painful
- Shift scheduling is shift assignment plus checkins, not drag-and-drop rostering
Last activity Sep 1, 2026. Fit: adaptable 2, operable 3.
Editions
Self-hosted · Free open source
- Clone
git clone https://github.com/frappe/hrms - ImageContainer
- Install
bench get-app hrms && bench --site <site> install-app hrms
Frappe Cloud Sites · $5 per month open source
- HostedOpen the hosted app
Frappe Cloud Servers · $20 per month open source
- HostedOpen the hosted app
Adaptable: what is yours to change
Make it yours
Config only5 things to edit
Deployment is configured in sites/<site>/site_config.json and sites/common_site_config.json (database, redis, mail, encryption key); docker/docker-compose.yml and docker/init.sh bootstrap a site. Shift types, leave policies, holiday lists and approval workflows are records you create in the app, and field or form changes use Customize Form and Server Script without touching code. Code-level changes belong in a small custom app whose hooks.py overrides Frappe HR, not in the hrms repo itself.
- Env vars
- none
- Config files
sites/<site>/site_config.jsonsites/common_site_config.jsondocker/docker-compose.ymldocker/init.shhrms/hooks.py (reference for overrides)- Prompt files
- none
- Accounts you need
- Frappe Cloud (hosted editions only)
Source
- github.com/frappe/hrms
- GPL-3.0 license
- Last commit Sep 1, 2026
- 8,712 stars
Operable: what an agent can drive
Interface
OfficialAPIpublished by the builderremote or local
How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.
Reach
Partial coverage. 6 of 10 jobs reachable through the stated interface.
| Job | Through the interface | Evidence |
|---|---|---|
| Define shift types and assign shifts | Reachable | Shift Type and Shift Assignment doctypes (docs.frappe.io/hr/shift-management) through /api/resource/:doctype |
| Submit and approve shift requests | Reachable | Shift Request doctype; PUT on /api/resource updates status and docstatus |
| Record employee checkins and auto attendance | Reachable | Employee Checkin doctype; auto attendance runs from checkins when enabled on the Shift Type |
| Apply for and approve leave | Reachable | Leave Application doctype through /api/resource |
| Load regional holidays | Reachable | Holiday List doctype through /api/resource |
| File expense claims and advances | Reachable | Expense Claim doctype through /api/resource |
| Run payroll | Undetermined | Payroll Entry doctype exists; creating slips is a whitelisted method call, not verified this run |
| Run attendance and leave reports | Undetermined | query reports run through /api/method/frappe.desk.query_report.run; not verified for HR reports |
| Geolocated mobile check-in | Not reachable | captured by the Frappe HR mobile app; the API stores the result |
| Roster or shift schedule calendar | Undetermined | shift-management docs list no Shift Schedule doctype; confirm on the installed version |
Code stack
- Languages
- PythonJavaScript
- Frameworks
- Frappe FrameworkFrappe UIVue
- Package manager
- bench
- Database
- MariaDB
- Hosting target
- dockerfrappe-cloudbench
- Built
- Human-written (recorded, never ranked)
Evidence and confidence
| Field | Where it was seen | Confidence |
|---|---|---|
| formFactor | README: web application on Frappe Framework with a Vue UI and a mobile app | 95% |
| executionModel | no model SDK or AI feature in README or docs pages read | 90% |
| operability | docs.frappe.io/framework/user/en/api/rest: /api/resource/:doctype and token api_key:api_secret, published by Frappe Technologies which also ships hrms | 90% |
| effort | docker/docker-compose.yml and docker/init.sh in repo; site_config.json is the Frappe deployment surface | 60% |
| editions | frappe.io/hr/pricing: self-hosting free; Frappe Cloud Sites from USD 5 per month, Servers from USD 20 | 80% |
| active | shortlist pushedAt 2026-09-01 | – |
| reach | 75% |
Open questions
- Does the installed version include Shift Schedule and Shift Schedule Assignment doctypes for recurring rosters?
- Which license applies: repo metadata says GPL-3.0, the pricing page says AGPL-3.0
- Is the Frappe REST API rate-limited or restricted on Frappe Cloud Sites plans?
Sources
- github.com/frappe/hrms sourcing:scheduling-staffing:curated
- docs.frappe.io/hr/introduction sourcing:scheduling-staffing:curated
- docs.frappe.io/hr/shift-management analysis:scheduling-staffing
- docs.frappe.io/framework/user/en/api/rest analysis:scheduling-staffing
- frappe.io/hr/pricing analysis:scheduling-staffing