Note for developers: You can create
AGENTS.local.md(orCLAUDE.local.md) in this directory to add your own custom instructions or preferences for AI coding agents. These files are git-ignored and will not be committed to the repository.
OpenProject is a web-based, open-source project management software written in Ruby on Rails with PostgreSQL for data persistence.
- Size: Large monorepo (~840MB, ~1M+ lines of code)
- Backend: Ruby 3.4.7, Rails ~8.0.3
- Frontend: Node.js 22.21.0, npm 10.1.0+, TypeScript
- Database: PostgreSQL (required)
- Architecture: Server-rendered HTML with Hotwire (Turbo + Stimulus). Legacy Angular components exist and are being migrated to custom elements. Uses GitHub's Primer Design System via ViewComponent.
- Editions: Community, Enterprise (SSO, LDAP, SCIM), and BIM (construction industry, code in
modules/bim/)
ALWAYS verify versions before building:
- Ruby:
3.4.7(see.ruby-version) - Node:
^22.21.0(seepackage.jsonengines) - Bundler: Latest 2.x
bundle install # Install Ruby gems
cd frontend && npm ci && cd .. # Install Node packages
bundle exec rails db:migrate # Setup database
bin/dev # Start all services (Rails, frontend, Good Job worker)
# Access at http://localhost:3000See docker/dev/AGENTS.md for full Docker setup and commands.
app/— Rails application codeconfig/— Rails configuration, routes, localesdb/— Database migrations and seedsdocker/dev/— Docker development environmentfrontend/— TypeScript/Angular/Stimulus frontendlib/— Ruby libraries and extensionslookbook/— ViewComponent previews (https://qa.openproject-edge.com/lookbook/)modules/— OpenProject plugin modulesspec/— RSpec test suite
.ruby-version- Ruby version.rubocop.yml- Ruby linting rules.erb_lint.yml- ERB template lintingfrontend/eslint.config.mjs- JavaScript/TypeScript lintingGemfile- Ruby dependenciespackage.json/frontend/package.json- Node.js dependencieslefthook.yml- Git hooks configuration
# Ruby
bundle exec rubocop # Check all files
bin/dirty-rubocop --uncommitted # Check only uncommitted changes
# JavaScript/TypeScript
cd frontend && npx eslint src/ && cd ..
# ERB Templates
erb_lint {files}
# Install Git Hooks (recommended)
bundle exec lefthook install- First line: < 72 characters, then blank line, then detailed description
- Reference work packages when applicable
- Merge strategy: "Merge pull request" (not squash), except single-commit PRs can use "Rebase and merge"
docs/development/— Development documentationdocs/development/running-tests/— Testing guidedocs/development/code-review-guidelines/— Code review standardsCONTRIBUTING.md— Contribution workflow.github/copilot-instructions.md— Extended agent instructions with troubleshooting