OpenProject: Self-Hosted Project Management for Teams
Project management tools have become notoriously expensive: Jira's per-user pricing adds up quickly; Monday.com and Asana price out small teams; Notion's project tracking works until you need real task management. OpenProject is a mature open-source alternative with genuinely enterprise-grade features that runs on your own infrastructure.
It's been in active development since 2012, used by organizations including NASA, Deutsche Bahn, and various government agencies. The feature set is serious: work packages, Gantt charts, Kanban, agile sprints, time tracking, budgets, wikis, and team calendars.
What OpenProject Provides
Work packages: OpenProject's term for tasks, user stories, bugs, features, or any work item. Highly customizable with types, statuses, custom fields, and hierarchies.
Views:
- Gantt chart: Dependencies, milestones, project timeline
- Kanban board: Card-based workflow view
- Table: Spreadsheet-style view with filtering and sorting
- Calendar: Timeline view
- Roadmap: High-level milestone view
- Team planner: Resource allocation across team members
Project structure: Projects can have subprojects. Work packages span projects. Templates accelerate new project setup.
Agile features: Sprint planning, velocity tracking, backlog management. OpenProject supports both Scrum and Kanban methodologies.
Time tracking: Log time against work packages. Generate time reports for billing or estimation accuracy analysis.
Wikis: Each project has a built-in wiki for documentation.
Forums and news: Optional communication features within projects.
Docker Deployment
OpenProject's official Docker Compose setup:
# Download the official compose file
curl -L https://raw.githubusercontent.com/opf/openproject-deploy/stable/15/compose/docker-compose.yml -o docker-compose.yml
# Create config
mkdir -p pgdata assets
# Start
OPENPROJECT_SECRET_KEY_BASE=$(openssl rand -hex 64) \
OPENPROJECT_HOST__NAME=openproject.yourdomain.com \
docker compose up -d
Or with a custom docker-compose.yml:
services:
db:
image: postgres:15
restart: always
environment:
POSTGRES_USER: openproject
POSTGRES_PASSWORD: change-this
POSTGRES_DB: openproject
volumes:
- pgdata:/var/lib/postgresql/data
cache:
image: redis:7-alpine
restart: always
web:
image: openproject/openproject:15
restart: always
depends_on:
- db
- cache
environment:
OPENPROJECT_SECRET_KEY_BASE: your-64-char-secret
OPENPROJECT_HOST__NAME: openproject.yourdomain.com
OPENPROJECT_HTTPS: "true"
DATABASE_URL: postgres://openproject:change-this@db/openproject
RAILS_CACHE_STORE: redis
OPENPROJECT_RAILS__CACHE__STORE: redis
OPENPROJECT_RAILS__RELATIVE__URL__ROOT: ""
SMTP_ADDRESS: smtp.example.com
SMTP_PORT: 587
SMTP_DOMAIN: yourdomain.com
SMTP_USER_NAME: [email protected]
SMTP_PASSWORD: smtp-password
volumes:
- assets:/app/public/assets
ports:
- 8080:80
volumes:
pgdata:
assets:
OpenProject takes a few minutes to start on first launch while it runs database migrations. Check logs with docker compose logs -f web.
Initial Configuration
After starting, navigate to http://your-server:8080:
- Log in with
[email protected]/admin(default credentials) - Change the admin password immediately
- Configure your organization name and settings (Administration → General settings)
- Create projects and invite team members
Create your first project:
- Click the home icon → New project
- Set name, type (scrum, kanban, or blank), and privacy level
- Invite team members via email or create accounts for them
Like what you're reading? Subscribe to Self-Hosted Weekly — free weekly guides in your inbox.
Work Package Customization
OpenProject's work package types are highly customizable:
Types: Task, User Story, Bug, Feature, Milestone, Phase — or create custom types.
Custom fields: Add text fields, numbers, dates, selects, or multi-selects to work packages.
Statuses and workflows: Define which statuses exist and which transitions are allowed for each type. (e.g., Bugs go from New → In Progress → Testing → Closed, but not directly from New → Closed without a Testing step.)
Priorities: Customize priority levels and colors.
Gantt Chart and Dependencies
OpenProject's Gantt chart is one of its strongest features. You can:
- Set start/end dates for work packages
- Define finish-to-start dependencies between work packages
- Visualize critical path
- Move tasks and automatically adjust dependent tasks
- Export as PDF or image
For project planning that needs timeline visualization and dependency tracking, this competes favorably with paid tools.
Agile Workflow
For Scrum teams:
- Enable the Backlogs module in project settings
- Define sprints in the project
- Move stories from backlog to sprint
- Use the sprint board for daily standups
- Close sprints and track velocity over time
For Kanban teams:
- Enable the Board module
- Create columns matching your workflow
- Drag work packages between columns
- Set WIP limits (optional)
Time Tracking and Budgets
Log time directly on work packages. Set estimated time at the work package level; actuals are logged as time entries.
At the project level, set budgets:
- Project cost: total budget
- Labor costs: hourly rates per user
- Budget reports: planned vs. actual
This makes OpenProject functional for client billing or internal project costing.
OpenProject vs. Alternatives
| Tool | Open source | Self-hosted | Gantt | Sprints | Price |
|---|---|---|---|---|---|
| OpenProject | ✓ | ✓ | ✓ | ✓ | Free (community) |
| Jira | No | Cloud only | ✓ | ✓ | $8+/user/month |
| Linear | No | No | No | ✓ | $8+/user/month |
| Plane | ✓ | ✓ | No | ✓ | Free (self-host) |
| GitLab Issues | ✓ | ✓ | No | ✓ | Requires GitLab |
| Redmine | ✓ | ✓ | Basic | No | Free |
OpenProject vs. Plane: Plane is newer and more lightweight. OpenProject has more mature Gantt and time tracking. For complex project timelines, OpenProject wins. For modern agile teams, Plane is simpler to adopt.
OpenProject vs. Redmine: OpenProject started as a fork of Redmine and has significantly more modern UI and features. If you're on Redmine and want to stay self-hosted, OpenProject is the natural upgrade.
Performance Tuning
OpenProject runs Rails and can be memory-hungry:
- Minimum recommended: 4GB RAM, 2 CPU cores
- Comfortable: 8GB RAM, 4 CPU cores
- Worker count: Configurable via
RAILS_MIN_THREADSandRAILS_MAX_THREADS
For small teams (under 20 users), a 4GB RAM instance handles the load comfortably.
The repository is at opf/openproject. Enterprise features (single sign-on, PDF exports, 2FA) require the paid BIM or Enterprise edition. The community edition is fully functional for most small-to-medium teams.
