mothermachine

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.

AdaptableOperable Business appWeb app Deterministic PythonJavaScript API License: GPL-3.0

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.

Use it when
  • 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
Gotchas
  • 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

  • Clonegit clone https://github.com/frappe/hrms
  • ImageContainer
  • Installbench get-app hrms && bench --site <site> install-app hrms

open source

open source

For agents: JSON · Markdown

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.json sites/common_site_config.json docker/docker-compose.yml docker/init.sh hrms/hooks.py (reference for overrides)
Prompt files
none
Accounts you need
Frappe Cloud (hosted editions only)

Source

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.

Docs
docs.frappe.io/framework/user/en/api/rest

Reach

Partial coverage. 6 of 10 jobs reachable through the stated interface.

JobThrough the interfaceEvidence
Define shift types and assign shiftsReachableShift Type and Shift Assignment doctypes (docs.frappe.io/hr/shift-management) through /api/resource/:doctype
Submit and approve shift requestsReachableShift Request doctype; PUT on /api/resource updates status and docstatus
Record employee checkins and auto attendanceReachableEmployee Checkin doctype; auto attendance runs from checkins when enabled on the Shift Type
Apply for and approve leaveReachableLeave Application doctype through /api/resource
Load regional holidaysReachableHoliday List doctype through /api/resource
File expense claims and advancesReachableExpense Claim doctype through /api/resource
Run payrollUndeterminedPayroll Entry doctype exists; creating slips is a whitelisted method call, not verified this run
Run attendance and leave reportsUndeterminedquery reports run through /api/method/frappe.desk.query_report.run; not verified for HR reports
Geolocated mobile check-inNot reachablecaptured by the Frappe HR mobile app; the API stores the result
Roster or shift schedule calendarUndeterminedshift-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

FieldWhere it was seenConfidence
formFactorREADME: web application on Frappe Framework with a Vue UI and a mobile app95%
executionModelno model SDK or AI feature in README or docs pages read90%
operabilitydocs.frappe.io/framework/user/en/api/rest: /api/resource/:doctype and token api_key:api_secret, published by Frappe Technologies which also ships hrms90%
effortdocker/docker-compose.yml and docker/init.sh in repo; site_config.json is the Frappe deployment surface60%
editionsfrappe.io/hr/pricing: self-hosting free; Frappe Cloud Sites from USD 5 per month, Servers from USD 2080%
activeshortlist pushedAt 2026-09-01–
reach75%

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