Redmine
Redmine is a free and open-source web application designed for project management and issue tracking, built using the Ruby on Rails framework to ensure cross-platform compatibility and support for multiple databases including MySQL, PostgreSQL, and SQLite.[1][2] Developed initially by Jean-Philippe Lang and first released in 2006, Redmine operates under the GNU General Public License version 2, allowing users to freely install, modify, and distribute it while fostering a global community of volunteer contributors for ongoing development and maintenance.[3][1][4] At its core, Redmine enables the management of multiple projects within a single instance, with features such as flexible role-based access control, customizable workflows for issue tracking, and support for subprojects to organize complex hierarchies.[2] It includes visual tools like Gantt charts and calendars generated from issue due dates, time tracking with detailed reporting by user or project, and the ability to add custom fields for issues, projects, users, and time entries to tailor functionality to specific needs.[2] Additional capabilities encompass per-project wikis and forums using Textile markup, document and file management, news postings, and integration with version control systems including Git, Subversion, Mercurial, Bazaar, and CVS, complete with repository browsing, change set views, and diff comparisons.[2] Redmine further supports extensibility through plugins, multilingual interface in 49 languages, LDAP authentication, email notifications, Atom feeds for updates, and user self-registration options, making it suitable for diverse teams in software development, IT services, and general project oversight.[2]History
Origins and development
Redmine was initially developed by Jean-Philippe Lang in 2006 to address the need for a flexible, Ruby on Rails-based issue tracking system capable of handling multiple projects and supporting various databases.[1][5] From its early stages, the project adopted the GNU General Public License version 2.0 or later, enabling open-source collaboration and distribution.[1][6] It was initially hosted on RubyForge, the primary repository platform for Ruby projects at the time, before transitioning to a GitHub mirror in 2011 amid RubyForge's phase-out and growing community needs for version control accessibility.[7][8] The first public release, version 0.5.0, took place on June 25, 2006, marking Redmine's debut as a viable alternative for project management needs.[5][9] Following this launch, Redmine quickly evolved into a community-driven project, with contributions from volunteers expanding its core functionalities while Lang maintained oversight as the lead developer.[10] By 2010-2011, concerns over development pace, maintenance practices, and governance led to significant community discussions, culminating in the creation of ChiliProject as a fork to pursue a more structured release methodology and shared decision-making processes.[11]Major releases and milestones
Redmine's major releases have followed a cadence of approximately annual updates for significant versions, with minor releases providing maintenance and security fixes every few months. The project began its stable branch with version 1.0.0, released as a release candidate on July 18, 2010, marking the start of production-ready stability after years of development from its initial 2006 inception.[12] This version stabilized the codebase over six weeks and included numerous bug fixes and features building on the prior 0.9 release from January 2010.[13] Version 2.0.0 arrived on May 15, 2012, introducing substantial UI enhancements and dropping support for the outdated Rails 2.3 in favor of Rails 3, which improved performance and maintainability.[14] Around this time, the project adopted a two-branch release model, maintaining a stable branch for production users alongside the trunk for ongoing development, to balance reliability with innovation.[15] In 2011, prior to this release, the community experienced a notable event with the creation of ChiliProject, a fork led by key contributors seeking different development priorities; this prompted discussions but reinforced Redmine's commitment to its core model without direct backport accelerations documented in official records. Subsequent milestones included version 3.0.0 on February 19, 2015, which added support for Ruby 2.x versions and upgraded to Rails 4, enhancing compatibility with modern Ruby ecosystems.[16] Version 4.0.0, released on December 9, 2018, upgraded to Rails 5.2.2, enhancing security, stability, and performance.[17][18] The 5.0.0 release on March 28, 2022, brought modern authentication advancements, including two-factor authentication via TOTP and refined LDAP integration, alongside migration to Rails 6.1.[19][20] From 2020 onward, development emphasized compatibility with evolving Ruby and Rails versions. In 2023, with the 5.1.0 release on October 31, support for Ruby 2.5 and 2.6 ended to align with Ruby's maintenance branches, ensuring security patches for active versions only.[17][21] This culminated in version 6.0.0, released on November 10, 2024, which upgraded to Rails 7.2 and added Ruby 3.3 support while dropping support for Ruby 2.7 and 3.0.[22] The latest major update, version 6.1.0 on September 21, 2025, enhanced security through fixes for vulnerabilities like XSS and information disclosures, alongside API improvements such as OAuth2 provider support and new endpoints for better integration.[23] This ongoing focus on framework upgrades has been influenced by community growth, enabling sustained contributions to maintain Redmine's relevance in project management tools.[24]Features
Issue tracking and workflow
Redmine's issue tracking system serves as the central mechanism for managing tasks, bugs, and other project items, allowing teams to capture, assign, and progress work through structured processes. Issues represent individual units of work, each bound to a specific project and owned by a user, with attributes such as subject, description, priority, and estimated time.[25] This system supports customizable configurations to align with diverse project needs, emphasizing flexibility in defining how issues evolve from inception to resolution. At the core of issue management are trackers, which categorize issues by type, such as bugs, features, or tasks. Administrators can define trackers with options including a name, default status, and whether they appear on the project roadmap. Common trackers include Bug for defects, Feature for enhancements, and Task for general work items, enabling teams to differentiate and filter issues effectively.[26] Each tracker can have its own workflow, which may be copied from an existing one during creation to streamline setup.[26] Workflows in Redmine govern the progression of issues through statuses, such as New, Assigned, In Progress, Resolved, and Closed, using role-based rules to control transitions. For instance, a developer role might be permitted to move an issue to Resolved but not to Closed, requiring QA approval via a manager role. These rules are configured per tracker, specifying which statuses a role can transition to or from, and can include field-level permissions, such as making certain fields read-only or required during updates. The "Issue closed" flag on statuses indicates final resolution, while the "% Done" attribute allows tracking completion progress, which can be calculated automatically based on subtask status or set manually.[26] [25] Issues support relations to model dependencies and hierarchies, enhancing workflow sequencing. Parent-child relations link subtasks to a parent issue, with no depth limit and optional cross-project support; changes in subtask status influence the parent's done percentage, start date, and due date. Blocking relations indicate that one issue prevents progress on another until resolved, while precedes/follows links establish order without blocking. Other relations include duplicates (where closing one closes the other), copied from/to for replication, all enforced through permissions like "Edit issues."[25] Custom fields extend issue data capture with types like text, long text, integers, floats, booleans, dates, single or multi-select lists, user or group assignments, and version fields. These can be made available for all projects or specific ones, and are displayed in issue forms, lists, and reports to accommodate tailored information, such as risk levels or compliance tags.[27] Issues can be associated with versions, representing milestones or releases, to track progress toward specific targets via the roadmap view. Categories further organize issues within a project, grouping them by topic (e.g., frontend or backend) and allowing assignment of a default user for automatic ownership upon selection.[28] This integration supports brief visualizations like Gantt charts for timeline overviews based on issue dependencies and dates.[25] As of Redmine 6.1.0, issues and notes support reactions (such as emojis) for quick feedback and collaboration.[23]Project visualization and reporting
Redmine provides several built-in tools for visualizing project progress and generating reports from issue and time-tracking data, enabling users to gain insights into timelines, workloads, and resource allocation without relying on external software. These features draw from the core issue tracking system to present data in graphical and tabular formats, supporting project management across various scales.[29] Gantt charts in Redmine offer a dynamic timeline view of project activities by displaying issues that have defined start and due dates or are assigned to versions with scheduled dates. The chart renders issues as horizontal bars representing their durations on a time axis, allowing users to visualize overlaps, sequences, and key milestones tied to version release dates. This built-in functionality facilitates planning and monitoring by highlighting potential delays or bottlenecks based on date assignments, though advanced dependency visualizations require plugin extensions.[30] The calendar module presents an overview of project commitments in a monthly grid format, overlaying due dates for issues and versions to provide a temporal snapshot of upcoming deadlines. Users can navigate through dates to review assigned tasks, with filtering options similar to those in issue lists to focus on specific subsets of data, such as by tracker or status. While primarily monthly, the view supports date-based navigation for weekly assessments, aiding in resource scheduling and deadline awareness.[31] Roadmaps deliver version-centric summaries of project status, organizing open and closed issues into hierarchical lists grouped by version, complete with counts and clickable links to filtered issue views. Each version displays a progress bar indicating completion percentage, calculated as a weighted average of estimated hours across issues (defaulting to equal weighting if estimates are absent), which helps track milestone achievement and overall advancement. Customization includes sidebar filters for trackers and toggles to hide completed versions or specific categories, enhancing focus on active development phases.[32] Custom queries enable flexible data analysis through filter-based issue lists, where users apply criteria akin to SQL conditions—such as status, assignee, or custom fields—to generate tailored reports. Saved queries appear in the sidebar for reuse, allowing selection of display columns and public/private visibility, with results exportable to CSV for further processing in tools like spreadsheets. While core Redmine supports these for basic reporting, burndown charts depicting remaining work over time typically require plugin installation and minimal configuration to integrate with query outputs.[33] Time tracking reports aggregate logged hours into summaries accessible via the Spent Time > Report menu, grouping entries by categories like issue, user, activity, or version to reveal effort distribution and totals. For instance, reports can show cumulative hours per issue with subtotals (e.g., 2.67 hours for a specific bug) and overall project aggregates, output in HTML or CSV formats for auditing or billing. This feature supports per-user or per-version breakdowns, providing quantitative insights into productivity without advanced setup. As of Redmine 6.1.0, administrators can configure whether time logging is allowed on closed issues.[34][23]Collaboration and customization
Redmine supports team collaboration through integrated modules designed for documentation, discussion, and resource sharing. Each project includes a dedicated wiki for creating and editing pages using Textile or Markdown syntax (configurable in administration settings), which enables features like free linking to other wiki pages or issues, hierarchical page organization, and export options to HTML or PDF. Wiki pages maintain a full revision history, allowing users to view diffs between versions, annotate changes, and revert to previous states, facilitating collaborative editing and knowledge preservation.[2][35] Project forums provide threaded discussion spaces to foster communication among team members, with capabilities to create topics, reply in chains, attach files, and manage posts as sticky (pinned at the top) or locked (preventing further replies). These forums are enabled per project and help in brainstorming, support queries, and non-issue-related exchanges, though they can reference issues for context. Complementing this, the news module allows posting announcements and updates visible to all project members, serving as a centralized feed for important project communications. The files module acts as a document repository, where users upload, organize, and share resources in a hierarchical structure, with support for descriptions, download tracking, and secure storage, though it lacks built-in file versioning.[36][2][37] Access to these collaborative tools is governed by Redmine's role-based access control (RBAC) system, which groups permissions into customizable roles assignable to project members. Permissions cover actions such as viewing/editing issues, managing wiki pages, adding forum topics, uploading files, and administering members, with granular controls like "view issues" or "edit own changesets." Default roles include Manager (full administrative access), Developer (edit issues, wiki, and code), and Reporter (view and add issues), while users can hold multiple roles per project for combined privileges; global roles like Non member and Anonymous apply to public projects for limited access.[38] Interface personalization is achieved through themes, which override default stylesheets to modify the visual layout and colors, with installation placing theme files in the public directory and selection via administration settings; numerous community themes are available for download. Redmine also supports over 49 languages, enabling users to set their preferred language in profile settings for localized interfaces and content. Notifications enhance collaboration by delivering configurable email alerts for events like issue updates, news posts, forum replies, and file uploads, sent to authors, assignees, and watchers; Atom/RSS feeds provide syndication for project activity, issues, and changesets, with user-specific opt-ins to avoid overload. Additionally, source code management integration allows linking repository commits to issues, supporting code-focused team workflows.[39][2][40]Technical aspects
Architecture and technology stack
Redmine is constructed using the Ruby on Rails web application framework, which follows the Model-View-Controller (MVC) architectural pattern to separate concerns between data models, user interfaces, and request handling. Within this structure, ActiveRecord serves as the primary Object-Relational Mapping (ORM) component, facilitating interactions with the underlying database by abstracting SQL queries into Ruby objects.[1][41] As of Redmine 6.1.0 (released September 2025), for data persistence, Redmine accommodates multiple relational database management systems, including MySQL (versions 8.0 to 8.4 with specific configuration), PostgreSQL (version 14), Microsoft SQL Server (versions greater than 2012), and SQLite 3. PostgreSQL and MySQL are recommended for production deployments due to their robustness in handling concurrent access, while SQLite is suitable only for development or single-user scenarios. On the backend, Redmine requires a Ruby interpreter, with support for versions 3.2, 3.3, and 3.4. Source code management (SCM) integrations are enabled via direct repository access, supporting Git, Subversion (SVN), Mercurial, CVS, and Bazaar, where SCM binaries must be available in the system PATH for browsing and changeset fetching.[41][42] The frontend employs standard web technologies—HTML for structure, CSS for styling, and JavaScript for interactivity—leveraging Prototype.js as a legacy library alongside jQuery for dynamic elements, with recent additions like the Stimulus framework enhancing modern JavaScript capabilities in version 6.1 and later. A RESTful API exposes core resources such as issues, projects, and users, allowing external applications to perform CRUD operations via HTTP. Security is managed through session-based authentication for user sessions, native LDAP integration for directory-based logins, and built-in Cross-Site Request Forgery (CSRF) protection to mitigate unauthorized actions; OmniAuth support for additional OAuth providers is available via plugins.[43][44]Installation and deployment
As of Redmine 6.1.0 (released September 2025), Redmine installation requires specific prerequisites to ensure compatibility and performance. The application is built on Ruby on Rails, necessitating Ruby versions 3.2, 3.3, or 3.4, and Rails 7.2. Supported databases include PostgreSQL (version 14), MySQL (8.0 to 8.4), Microsoft SQL Server (2012 or higher), and SQLite 3 (suitable only for development, not production multi-user environments). Users must create an empty database and a dedicated user with appropriate permissions, such as granting all privileges on the schema in PostgreSQL viaCREATE USER redmine WITH PASSWORD 'password'; CREATE DATABASE redmine OWNER redmine;.[41]
The basic installation process begins with downloading the latest stable release from the official repository, typically as a .tar.gz or .zip file, and extracting it to a directory like /opt/redmine. Next, install dependencies by navigating to the Redmine root directory and running bundle install --without development test. Configure the database connection in config/database.yml by copying the example file and specifying the adapter (e.g., mysql2 for MySQL), database name, host, username, and password. Generate a secret token with bundle exec rake generate_secret_token, then migrate the database schema using RAILS_ENV=production bundle exec rake db:migrate. Load default configuration data with RAILS_ENV=production bundle exec rake redmine:load_default_data, set appropriate file permissions (e.g., chown -R redmine:redmine files log tmp public/assets), and start the server for testing via bundle exec rails server -e production using Puma or WEBrick. Initial access is at http://localhost:3000, with default credentials admin/admin.[41]
Deployment options include self-hosting on Linux distributions like Ubuntu or Debian, which are recommended for their robust package management and stability in production environments. For containerized setups, an official Docker image is available, allowing quick deployment with commands like docker run -d -p 3000:3000 --name redmine -v /path/to/files:/usr/src/redmine/files redmine:6.1, supporting persistent storage for files and integration with external databases. Cloud deployments are facilitated via platforms such as Heroku, where users clone the repository, configure a Procfile for Puma, remove SQLite dependencies, and push to a new app while setting environment variables for the database add-on. On AWS, Redmine can be deployed using EC2 instances with manual installation or pre-configured Bitnami stacks on Lightsail, which include Apache, Ruby, and database setup out-of-the-box.[45][46][47]
Post-installation configuration involves editing key files for operational settings. The config/database.yml file defines connection details, such as production: adapter: postgresql, database: redmine_production, host: localhost, username: redmine, password: password. For email notifications, attachments, and SCM integration, modify config/configuration.yml by copying from the example: enable SMTP with settings like default: email_delivery: smtp: address: smtp.gmail.com, port: 587, enable_starttls_auto: true, user_name: your_email, password: your_password; set attachments_storage_path: /var/redmine/files for file storage; and define SCM paths, e.g., scm_git_command: /usr/bin/git, scm_subversion_command: /usr/bin/svn. Production environments require at least 512MB RAM to handle typical loads, with adjustments for memory limits in web servers like Passenger.[48][49]
Upgrading Redmine involves backing up the database and files directory to prevent data loss, followed by downloading the new version or updating via Git/SVN. Copy over database.yml, configuration.yml, and custom files, then run bundle install and bundle update to align dependencies. Migrate the schema with RAILS_ENV=production bundle exec rake db:migrate and plugins via RAILS_EXEC=production bundle exec rake redmine:plugins:migrate if applicable. Clear caches using RAILS_ENV=production bundle exec rake tmp:cache:clear, regenerate the secret token for major version jumps (e.g., from Rails 6 to 7), and restart the server while verifying permissions. Version-specific changes, such as MySQL transaction isolation settings in 5.1+, must be addressed during the process.[50]
Ecosystem
Plugins and extensions
Redmine's extensibility is facilitated by a robust plugin system that employs a hook-based architecture, enabling developers to inject custom code at predefined points in the core application without altering the original source. Hooks consist of callback functions registered by plugins, which execute sequentially during specific events in Redmine's execution flow, such as view rendering or model actions. This design promotes modularity and allows for seamless integration of additional features like custom workflows or UI enhancements.[51][52] Plugins are installed by extracting the plugin archive into theplugins directory within the Redmine root folder, followed by running the command bundle exec rake redmine:plugins:migrate RAILS_ENV=production to apply any database migrations—always after backing up the database. After restarting the server, administrators can enable or configure plugins through the Administration > Plugins panel in the web interface. Management involves similar steps for updates or uninstallation, such as migrating to version 0 for removal and deleting the directory, with compatibility verified against the Redmine version (e.g., plugins tested for 5.0+). Themes, treated as specialized plugins, follow the same process and can overhaul the visual interface for better usability.[53]
The ecosystem boasts over 1,200 plugins listed in the official directory as of 2025, with many hosted in community repositories on GitHub for collaborative development and version control. Popular open-source examples include the Redmine Agile plugin, which supports Agile and Scrum methodologies with drag-and-drop backlog planning and sprint visualization; the Checklists plugin, enabling sub-task checklists within issues for granular tracking; and advanced reporting tools like RedmineUP Reporting for Gantt charts and project dashboards akin to Jira features. Themes such as A1, offering responsive design with status badges and Retina support, and PurpleMine2, providing a modern purple-toned layout, are widely adopted for aesthetic improvements.[54][55][56][57][58][59][60]
While powerful, the plugin system has limitations, including potential conflicts arising from core updates that introduce API or Rails framework changes, necessitating individual testing of plugins after upgrades. Paid options, such as the RedmineUP suite encompassing bundles like Agile, CRM, Helpdesk, and Invoicing plugins, offer premium features with dedicated support but require licensing and may introduce dependencies that complicate third-party compatibility. These extensions complement core customization tools like custom fields by providing deeper, specialized functionality.[53][61][62]