Self-Host Leantime: Strategic Project Management 2026
TL;DR
Leantime (AGPL 3.0, ~4K GitHub stars, PHP) is a strategic project management tool designed for non-project-managers. It combines task management (Kanban, Gantt, timelines) with strategic planning (OKRs, goals, milestones) and time tracking — all in one tool. Asana Business costs $24.99/user/month; Monday.com Pro costs $16/user/month. Leantime gives you unlimited users and projects on your own server, free.
Key Takeaways
- Leantime: AGPL 3.0, ~4K stars, PHP — project management with strategic planning
- Task views: Kanban, list, Gantt, calendar, and timeline views
- OKRs and goals: Connect daily tasks to strategic objectives
- Time tracking: Built-in timesheets with per-task time logging
- Milestones: Track project phases and deadlines
- Non-PM friendly: Designed for teams that aren't professional project managers
Leantime vs Asana vs Monday vs Plane
| Feature | Leantime | Asana | Monday.com | Plane |
|---|---|---|---|---|
| Price | Free (self-host) | $10-24/user/mo | $9-16/user/mo | Free (self-host) |
| OKRs/Goals | Yes | Yes (Business) | No | No |
| Gantt charts | Yes | Yes (Premium) | Yes | No |
| Time tracking | Built-in | Yes (Business) | Yes | No |
| Timesheets | Yes | No | Yes | No |
| Kanban | Yes | Yes | Yes | Yes |
| Calendar | Yes | Yes | Yes | Yes |
| Self-hosted | Yes | No | No | Yes |
| Target user | Strategy + execution | Task management | Workflows | Dev teams |
Part 1: Docker Setup
# docker-compose.yml
services:
leantime:
image: leantime/leantime:latest
container_name: leantime
restart: unless-stopped
ports:
- "8080:80"
environment:
LEAN_DB_HOST: db
LEAN_DB_USER: leantime
LEAN_DB_PASSWORD: "${DB_PASSWORD}"
LEAN_DB_DATABASE: leantime
LEAN_SITENAME: "Your Team"
LEAN_LANGUAGE: en-US
LEAN_DEFAULT_TIMEZONE: America/Los_Angeles
LEAN_SESSION_PASSWORD: "${SESSION_SECRET}" # openssl rand -hex 32
LEAN_SESSION_EXPIRATION: 28800 # 8 hours
# Email:
LEAN_EMAIL_RETURN: noreply@yourdomain.com
LEAN_EMAIL_USE_SMTP: "true"
LEAN_EMAIL_SMTP_HOSTS: mail.yourdomain.com
LEAN_EMAIL_SMTP_PORT: 587
LEAN_EMAIL_SMTP_USERNAME: noreply@yourdomain.com
LEAN_EMAIL_SMTP_PASSWORD: "${MAIL_PASSWORD}"
LEAN_EMAIL_SMTP_AUTO_TLS: "true"
depends_on:
- db
db:
image: mysql:8.0
restart: unless-stopped
volumes:
- leantime_db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_DATABASE: leantime
MYSQL_USER: leantime
MYSQL_PASSWORD: "${DB_PASSWORD}"
volumes:
leantime_db:
echo "DB_PASSWORD=$(openssl rand -base64 24)" >> .env
echo "DB_ROOT_PASSWORD=$(openssl rand -base64 24)" >> .env
echo "SESSION_SECRET=$(openssl rand -hex 32)" >> .env
docker compose up -d
Visit http://your-server:8080 → complete installation wizard → create admin account.
Part 2: HTTPS with Caddy
pm.yourdomain.com {
reverse_proxy localhost:8080
}
Part 3: Projects and Tasks
Create a project
- + New Project
- Name:
Product Launch Q2 - Type: Standard / Scrum / Kanban
- Start date and end date
- Add team members
Task views
Switch between views with a single click:
| View | Best for |
|---|---|
| Kanban | Visual workflow — drag cards between columns |
| List | Dense table view — sort and filter |
| Gantt | Timeline visualization — dependencies and durations |
| Calendar | Date-based planning — deadlines and events |
| Timeline | High-level milestone tracking |
Create tasks
- + New To-Do
- Title, description (Markdown supported)
- Assign to team member
- Due date and effort estimate
- Priority: Low / Medium / High / Urgent
- Milestone: link to a project phase
- Tags: for cross-project categorization
Part 4: OKRs and Strategic Planning
Goals
Connect daily work to strategic objectives:
- Strategy → Goals
- Create a goal:
Increase user retention by 20% - Metric:
Monthly active users returning after 30 days - Target:
80%(current:67%) - Link tasks: attach specific to-dos that contribute to this goal
Milestones
Break projects into phases:
Phase 1: Research & Design [Jan 15 - Feb 28]
Phase 2: Development [Mar 1 - Apr 30]
Phase 3: Testing & QA [May 1 - May 31]
Phase 4: Launch [Jun 1 - Jun 15]
Idea boards
Capture and prioritize ideas before they become projects:
- Strategy → Ideas
- Add ideas with rough effort and impact scores
- Prioritization matrix: High impact + Low effort = Do first
Part 5: Time Tracking
Log time
- Open a task → Time Tracking
- Start timer (live tracking) or Add time manually
- Enter hours, description of work done
- Time entries are associated with the task and project
Timesheets
Reports → Timesheets:
- View by: day, week, month
- Filter by: project, team member, date range
- Export: CSV for invoicing or payroll
Time reports
Project: Product Launch Q2
Total hours: 340h
By member:
Alice: 120h (35%)
Bob: 95h (28%)
Carol: 125h (37%)
By milestone:
Research: 80h
Development: 180h
Testing: 60h
Launch: 20h
Part 6: Team Collaboration
Comments and discussions
Each task has a comment thread:
- @mentions: Tag team members
- Reactions: Quick emoji reactions
- File attachments: Share screenshots, documents
Notifications
Users receive notifications for:
- Task assignments
- Comment mentions
- Due date reminders
- Milestone updates
Dashboard
Each user gets a personal dashboard showing:
- My tasks: Assigned to me, due soon
- Calendar: Today's schedule
- Recent activity: Team updates
- Time tracked today: Time log summary
Part 7: Integrations
Calendar sync (CalDAV)
Settings → Integrations → Calendar:
CalDAV URL: https://pm.yourdomain.com/caldav/
Sync deadlines and milestones to your calendar app.
API
BASE="https://pm.yourdomain.com"
API_KEY="your-api-key"
# Get projects:
curl "$BASE/api/jsonrpc/" \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "leantime.rpc.Projects.getAll",
"id": 1
}'
Webhooks
Settings → Webhooks → + Add:
URL: https://yourapp.com/webhook
Events: task.created, task.completed, task.updated
Part 8: Multi-Team Setup
Roles
| Role | Access |
|---|---|
| Owner | Full admin, billing, all projects |
| Manager | Create projects, manage team members |
| Editor | Create and edit tasks in assigned projects |
| Commenter | View and comment, no editing |
| Viewer | Read-only access |
Client access
Invite external clients with limited access:
- Team → Invite → Client role
- Client sees: project progress, milestones, approved files
- Client cannot see: internal discussions, time logs, budget
Maintenance
# Update:
docker compose pull
docker compose up -d
# Backup:
docker exec leantime-db-1 mysqldump -u leantime -p"$DB_PASSWORD" leantime \
| gzip > leantime-db-$(date +%Y%m%d).sql.gz
# Logs:
docker compose logs -f leantime
See all open source project management tools at OSSAlt.com/categories/project-management.