A comprehensive, free, and open-source Human Resource Management System (HRMS) designed to streamline HR operations and enhance organizational efficiency.
- π₯ Employee Management - Centralized workforce data with LDAP integration
- π― Recruitment - End-to-end hiring process from job posting to onboarding
- π Onboarding & Offboarding - Structured workflows for employee lifecycle
- β° Attendance & Time Tracking - Biometric integration and automated check-in/out
- ποΈ Leave Management - Policy enforcement, approvals, and balance tracking
- π° Payroll - Automated salary processing, tax calculations, and compliance
- π Performance Management - Goal setting, reviews, and continuous feedback
- π’ Asset Management - Track and manage company resources
- π« Helpdesk - Centralized HR support and ticketing system
- ποΈ Project Management - Projects, tasks and timesheets
- π Documents - Employee document requests and approvals
- π Dashboards & Reports - Role-based dashboards, and reports you can export or schedule by email
- π₯ Master Data Import - Bring in employees, leave balances, assets and salary structures from spreadsheets
- π REST API - Token-based API used by the mobile app
- βοΈ Automations - Email and in-app notifications sent when records are created, updated or deleted
- π Integrations - LDAP, Google Meet, Google Drive backup and WhatsApp
- π§© Optional add-on apps - Geofencing, Face Detection and Outlook (Microsoft 365) mail ship in the repository but are not enabled by default
- Which Branch Do I Want?
- Quick Start
- Installation
- Deployment
- Upgrading
- Contributing
- Security
- Support
- License
2.0(default) β the latest stable v2 snapshot. This is what a plaingit clonegives you. Use it to run or deploy Horilla.dev/v2.0β the active integration branch. If you want to contribute code, branch from and open PRs against this, not2.0.1.0/masterβ v1, now deprioritized (fixes considered case-by-case, no guaranteed schedule). Not deleted, but no longer where active development happens.
See Discussion #1127 for full background on this transition.
Published for linux/amd64 and linux/arm64 as
horilla/horilla-hr:
docker pull horilla/horilla-hr:2.2.1Pin an exact version in production rather than latest, so a deploy cannot
pick up a new release unattended; see
all tags for the current
one. The
repository overview documents
every environment variable, the volumes to back up, and a working Compose file.
First boot applies the full migration set before the web server binds, which takes a few minutes on an empty database.
# Clone the repository (defaults to the stable 2.0 branch)
git clone https://github.com/horilla/horilla-hr.git
cd horilla-hr
# Start with Docker Compose
docker compose up -d
# Access the application
open http://localhost:8000Full Docker guide, including production deployment: docker/README.md
Requires Python 3.12, 3.13 or 3.14, and pip 21.3 or newer. Python 3.15 is
not usable yet: spacy declares Requires-Python <3.15 and is imported at
module scope, so the app cannot start on it.
# Clone and setup (defaults to the stable 2.0 branch)
git clone https://github.com/horilla/horilla-hr.git
cd horilla-hr
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Upgrade pip FIRST. A venv inherits the system pip, and an older one does not
# recognise current manylinux wheel tags -- it then tries to compile packages
# like cryptography and PyMuPDF from source, which needs a C toolchain most
# machines do not have. The Docker build already does this; do the same here.
python -m pip install --upgrade pip
# Install dependencies
pip install -r requirements.txt
# Setup environment
cp .env.dist .env
# Edit .env with your configuration
# Initialize database
python manage.py migrate
python manage.py compilemessages
python manage.py collectstatic
# Run development server
python manage.py runserver
# In a second terminal: run the background scheduler
python manage.py run_schedulerOn a new database the sign-in page shows an Initialize Database button. It
asks for the DB_INIT_PASSWORD from your .env, then lets you create the first
administrator.
Run the scheduler. Scheduled jobs (for example automatic payslips, leave resets, work records, shift rotation, contract expiry, document and asset reminders, clearing expired sessions, trimming old job-run history) only run while
run_scheduleris running. The Docker Compose file starts it for you as theschedulerservice.
For detailed installation instructions, configuration guides, and platform-specific setup instructions, please visit our comprehensive documentation:
Our documentation includes:
- Step-by-step installation for all supported platforms
- Database configuration guides
- Environment setup instructions
- Production deployment best practices
- Troubleshooting common issues
- Advanced configuration options
For production deployment guides including Nginx, Apache, and cloud platforms:
- Read CHANGELOG.md and the GitHub releases for the versions you are skipping.
- Back up the database and the media volume.
- Docker image: change the pinned tag in your Compose file, then
docker compose pull && docker compose up -d. Migrations are applied automatically when the container starts. - Docker Compose from this repository (it builds the image locally):
git pull, thendocker compose up -d --build. - From source:
git pull,pip install -r requirements.txt,python manage.py migrate,python manage.py compilemessages,python manage.py collectstatic, then restart the web server and the scheduler.
We welcome contributions! Please see our Contributing Guide for details.
# Fork and clone your fork
git clone -b dev/v2.0 https://github.com/YOUR_USERNAME/horilla-hr.git
cd horilla-hr
# Add upstream remote
git remote add upstream https://github.com/horilla/horilla-hr.git
# Create feature branch
git checkout -b feature/your-feature-name
# Install development dependencies
pip install -r requirements.txt
# Enable the formatting and lint hooks (Black, isort, ruff)
pip install pre-commit
pre-commit install
# Run the tests for the app you changed
python manage.py test employee
# Submit pull requestNote:
2.0is the repo default, so GitHub pre-selects it as your PR base. Before submitting, change the base branch todev/v2.0β that's where active development and reviews happen, not2.0.
- Follow PEP 8 for Python code
- Format with Black and sort imports with isort (
--profile black); the pre-commit hooks above also run ruff - Write tests for new features, and run the tests of the apps you changed (
make test-smokeruns the full CI smoke set) - New user-visible strings go through Django's translation functions
- Update documentation for user-facing changes
- π Authentication & Authorization - Permission-based access control
- π Two-Factor Login - Optional one-time code sent by email
- π‘οΈ Brute-Force Protection - Account lockout after repeated failed logins, and rate limiting on the API
- π Audit Trails - Change history on records across the modules
- π« Input Validation - XSS checks on saved text
Please report security vulnerabilities via GitHub Private Vulnerability Reporting, not email. Do not create public GitHub issues for security vulnerabilities. See SECURITY.md for full details.
- Always use HTTPS in production
- Regularly update dependencies
- Use strong passwords and enable the optional two-factor login
- Monitor logs for suspicious activities
- π Documentation: docs.horilla.com
- π¬ GitHub Discussions: GitHub Discussions
- π Bug Reports: GitHub Issues
- β¨ Feature Requests: GitHub Issues, or share an idea in GitHub Discussions
For enterprise support, custom development, and consulting services:
- π§ Email: support@horilla.com
- π Website: www.horilla.com
This project is licensed under the LGPL-2.1 License - see the LICENSE file for details.
Made with β€οΈ by the Horilla Team
β Star us on GitHub | π Report Bug | π‘ Request Feature