Overview of Tech Stack and Recommended Practices in Horilla HRMS
Horilla HRMS is a free, open-source Human Resource Management System designed for teams who want a whole HR system without being “locked-in” to a particular vendor. Knowing what drives Horilla HRMS, as well as how to use it properly, can save you headaches when implementing, integrating, and using the application.
Core application stack
At its heart, Horilla HRMS is a Python web application built on Django. The user interface is delivered through Django templates (not a separate single-page app), with static assets and a theme system so the product can stay visually consistent across modules.
The README highlights common front-end building blocks: HTML5, CSS3, Bootstrap, Tailwind CSS(on v2), and Chart.js for charts and dashboards. That combination keeps the UI approachable for teams already comfortable.
APIs and authentication
Horilla uses Django REST Framework (DRF) to provide REST APIs. The API is authenticated via JWT with rest_framework_simplejwt, which is suitable for mobile clients, integrations, and scripts making HTTP requests to Horilla. API documentation is enabled via drf-yasg, which is a toolset for Swagger and OpenAPI, allowing developers to understand the API endpoints and test API requests properly.
For browser sessions, the project uses the standard Django auth stack, along with project-specific middleware, which includes company context, two-factor, and password strength, all built atop a custom user model (`horilla_auth.HorillaUser`).
Data layer
Out of the box, Horilla can run on SQLite, which is ideal for evaluation, demos, and small teams. For production workloads with higher concurrency, larger datasets, and safer concurrent writes, PostgreSQL is the usual recommendation.
Modern deployments typically rely on environment-based configuration (`django-environ`), including an optional DATABASE_URL style connection string when you want a single place to define credentials and host details.
Supporting services and cross-cutting concerns
Several packages underpin reliability and operations:
- WhiteNoise serves compressed static files efficiently in many deployment setups.
- django-cors-headers helps when browsers call Horilla from other origins (for example separate front-end tools or integrations).
- django-simple-history and auditlog support change tracking and audit trails important for HR data.
- django-apscheduler runs scheduled jobs inside the application process.
- Optional modules such as LDAP (`horilla_ldap`) and integrations like WhatsApp extend enterprise and communication needs.
Internationalization is built in: Horilla ships with multiple languages enabled, and it’s expected that compilemessages will be run when you enable or update translations.
Recommended practices
- Development and packaging: Use a Python virtual environment, install dependencies from the project’s `requirements.txt`, and keep secrets out of source control. Prefer a `.env file (or your platform’s secret manager) for `SECRET_KEY`, `DEBUG`, `ALLOWED_HOSTS`, `CSRF_TRUSTED_ORIGINS`, database settings, and email configuration.
- Database: Use SQLite only where it matches your risk profile (trials, small teams, low concurrency). For production, choose PostgreSQL (or another supported server DB), run `makemigrations` / `migrate` on deploy, and plan backups. Horilla includes backup-related tooling you can align with your IT policy.
- First-run and admin access: After migrations, create administrative access with the project’s `createhorillauser`** command (the Horilla-specific counterpart to Django’s `createsuperuser`), which ties an admin user to the employee model as intended by the product.
- Static files and locale: Run `collectstatic` in production behind a real web server or platform that serves `/static/` correctly, and run `compilemessages` when you rely on translated UI strings.
- Security: Treat HR data as sensitive. Enable HTTPS in production, tighten `ALLOWED_HOSTS` and `CSRF_TRUSTED_ORIGINS`, rotate secrets, and keep Django and Python dependencies patched. Check optional features like LDAP and API exposure to match your threat model.
- Use the Horilla HRMS Documentation for installation documentation and more details
Horilla’s stack is Django-centric and integration-friendly: server-rendered HR workflows, a JWT-backed REST layer for automation, and a database story that scales from SQLite to enterprise engines. Add to that environment-driven config, a production-grade database, and security best practices, and you get a viable foundation for long-term HR operations on OSS.
Download Horilla HRMS from the App Store or Play Store and explore the free HR Experience In Your Hands.
