Skip to Content
Documentation

Everything to deploy, configure & integrate

Practical guides for admins and developers — from your first install to your first API call.

Overview

Introduction

Emirates HRM is a self-hosted HR platform that runs on your own infrastructure. The three surfaces — admin, self-service and mobile — share a single database and one JSON API.

Because everything is self-hosted, your employee data stays entirely within your network.

Self-hosted deployment

Deploy with Docker on any Linux server. Recommended minimum: 2 vCPUs, 4 GB RAM and 20 GB storage.

# clone & start
git clone https://git.emirateshrm.local/ehrm.git
cd ehrm && docker compose up -d

# the app is now on http://localhost:8080

Environment variables

  • DB_URL — PostgreSQL connection string
  • DEFAULT_LOCALE — en or ar
  • CURRENCY — defaults to AED

Importing employees

Upload a CSV from Admin → Employees → Import. Columns are mapped to fields, and rows are validated before commit.

Download the CSV template from the same screen to guarantee your columns line up.

Payroll & WPS

Define salary components (basic, allowances, deductions), run a cycle, then generate the SIF file for the Wage Protection System. All amounts are in AED to 2 decimals.

Example: net pay

net = basic + allowances − deductions − loan_installment
# e.g. 6,500.00 + 2,000.00 − 350.00 − 500.00 = 7,650.00 AED

EOSB / gratuity

The logic applies each country's rules. For the UAE: 21 days of basic wage per year for the first 5 years, 30 days per year thereafter, capped at 24 months' basic.

Try the live calculator on the UAE compliance page.

Open the calculator

Leave & attendance

Create leave types, set balances and approval workflows. Employees clock in/out from web, mobile or kiosk, and hours flow into payroll.

JSON API

Every surface is built on a REST API that returns JSON. Authenticate with a Bearer token from Admin → Developers.

GET /api/v1/employees
Authorization: Bearer

{
  "id": 101,
  "name": "Mohammed Ali",
  "department": "Operations",
  "basic_salary": "6500.00"
}

Webhooks

Subscribe to events like leave.approved, payroll.finalized and document.expiring to trigger your own systems.

Every webhook is sent with a signature so you can verify its origin.

Can't find what you need?

Our support team is happy to help with deployment or integration.