Project Management migration

Migrate from Redmine 3.3 to Microsoft Project

Field-level mapping, validation, and rollback between Redmine 3.3 and Microsoft Project. We move data and schema; workflows are rebuilt natively in Microsoft Project.

Redmine 3.3 logo

Redmine 3.3

Source

Microsoft Project

Destination

Microsoft Project logo

Compatibility

73%

8 of 11

objects map 1:1 between Redmine 3.3 and Microsoft Project.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Redmine 3.3 and Microsoft Project solve project management through opposing data models. Redmine is issue-centric: every work item is a flat database record with a parent_issue_id reference for hierarchy, a tracker type, and time logged per issue. Microsoft Project is schedule-centric: every work item is a task with Duration, Work, Start, Finish, resource assignments, and predecessor dependencies driving an auto-calculated schedule. We bridge this structural gap by reconstructing the Redmine issue tree into a WBS-compatible task outline, mapping Redmine versions to Project milestones, and converting time entries to task actuals so earned-value analysis remains valid post-migration. The REST API in Redmine 3.3 is read-oriented for most objects, so we read from the database directly or sequence CSV exports in chunks rather than relying on any write-capable import endpoint. Custom field list values store internal IDs in Redmine's database; we resolve those to display labels before writing to Project. Workflows, automations, and wiki content do not migrate as code; we deliver a written inventory of these objects for the customer's admin to rebuild in Project Online or Power Automate.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Redmine 3.3 logo

Redmine 3.3

What's pushing teams away

  • No native Agile experience — Kanban boards and sprint planning require third-party plugins (Backlogs, Agile plugin from RedmineUP, etc.), which is a hard adoption blocker for teams that want Scrum or Kanban out of the box.
  • Stuck on an old release — Redmine 3.3 specifically is years behind the latest 5.x line, missing modern Ruby version support, security patches, and recent UX work; remaining on 3.3 is now a security and supportability risk.
  • Initial setup and ongoing upgrades require real Rails sysadmin skills (Ruby version, database, migrations, plugins, ERB templates), which is beyond what most project managers can handle without IT support.
  • Ecosystem is smaller than Jira — fewer modern SaaS integrations (Slack, GitHub, Bitbucket connectors exist but lag) and no built-in marketplace UX, so connectivity to current toolchains often needs custom work.
  • Self-hosted means the customer also owns backup, uptime, scaling, and security — costs that look invisible on paper but become significant for larger teams, often pushing them to migrate to Jira Cloud, GitLab, or Linear.

Choosing

Microsoft Project logo

Microsoft Project

What's pulling them in

  • Organizations already running Microsoft 365 and Azure AD adopt Microsoft PPM because it slots into existing identity, Teams, and SharePoint infrastructure without requiring a separate identity provider or SSO vendor.
  • Enterprise PMOs choose it for critical-path scheduling, baseline comparison, cross-project dependencies, and resource utilization reporting that standalone PM tools cannot replicate at this depth.
  • Project Online's integration with Power BI gives portfolio-level dashboards and cost-rollup reporting that satisfies executive governance requirements without third-party BI tooling.
  • Government, financial services, and healthcare organizations select it because FedRAMP, ISO 27001, and SOC 2 compliance certifications meet enterprise procurement requirements out of the box.
  • Large IT departments default to it as the market-leader in project portfolio management software, often driven by corporate licensing agreements that bundle it with other Microsoft 365 seats.

Object mapping

How Redmine 3.3 objects map to Microsoft Project

Each row shows how a Redmine 3.3 object lands in Microsoft Project, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Redmine 3.3

Project

maps to

Microsoft Project

Project file (.mpp) or Project Online project

1:1
Fully supported

Each Redmine project becomes a single Microsoft Project file (for Project Desktop) or a Project Online project site. We extract the project identifier, name, description, public/private flag, and creation date from the projects table. Subprojects nest under parent projects in the Redmine project_hierarchy; we preserve this as a folder or enterprise pool structure in Project Online, or as a phase outline in a single Project Desktop file. Module enablement flags (wiki, forums, repository) have no direct Project equivalent and are flagged in the scope document for admin reference.

Redmine 3.3

Issue

maps to

Microsoft Project

Task

1:1
Fully supported

Redmine issues map to Microsoft Project tasks. The Redmine issue tree (parent_issue_id chain) is flattened into a WBS-compatible outline: we traverse the issue hierarchy breadth-first, assign each issue a WBS code prefix matching its project, and set Outline Number and Outline Level on the Project Task. Redmine status (New, In Progress, Resolved, Closed, Feedback) maps to a custom Task field or Status indicator since Project tasks have no status enum; we create a custom field redmine_status__c carrying the original value. Tracker (Bug, Feature, Support) maps to a custom text or flag field on the task. Start date and due date from Redmine become the task Start and Finish fields, with scheduling mode set to Auto or Manual depending on whether the customer relies on dependency-driven scheduling.

Redmine 3.3

Issue: done_ratio

maps to

Microsoft Project

Task: % Complete

1:1
Fully supported

Redmine's done_ratio field (0-100 integer) maps directly to Microsoft Project's % Complete field. We preserve the value at migration time; Project Online and Project Desktop recalculate physical % complete based on actual work if the task is resource-assigned. Closed issues (done_ratio = 100) migrate with % Complete = 100 and Status = Complete.

Redmine 3.3

Issue Relations

maps to

Microsoft Project

Task Dependencies

1:1
Mapping required

Redmine issue relations (blocks, blocked by, relates to, duplicates, followed by, precedes) map to Microsoft Project task dependencies (Finish-to-Start, Start-to-Start, Finish-to-Finish, Start-to-Finish). The relation_type field determines the dependency type: blocks and precedes map to Finish-to-Start (the most common); blocked by maps to Finish-to-Start in reverse direction. Redmine stores relation IDs as integers referencing the issues table; we resolve each integer to the corresponding migrated Task UID at migration time. Orphaned relations (target issue deleted or not migrated) are logged in a reconciliation report.

Redmine 3.3

Version

maps to

Microsoft Project

Milestone

1:1
Fully supported

Redmine versions (milestones or release targets) within a project map to Microsoft Project milestone tasks. The version name becomes the milestone task name, effective_date maps to the milestone Finish date, and the status (open, locked, closed) maps to a custom field redmine_version_status__c. Versions with a null effective_date are flagged for the customer to supply a target date before migration. A milestone task has zero duration and is positioned at the version effective date in the project timeline.

Redmine 3.3

Time Entry

maps to

Microsoft Project

Task Actual Work

1:many
Fully supported

Redmine time entries (hours, activity, spent_on, comments) map to Microsoft Project task actuals. For each task representing a Redmine issue, we aggregate all time entries for that issue into a Total Actual Work value (sum of hours). If the task has a resource assignment, we distribute the hours as actual work on the assignment. If no resource is assigned, the hours appear as task-level actual work with the entry-level detail preserved in a custom notes field on the task (activity name + comments). The Redmine spent_on date maps to the actual work date. We create a custom field total_hours__c carrying the aggregate for reporting.

Redmine 3.3

User

maps to

Microsoft Project

Resource

1:1
Fully supported

Redmine users (firstname, lastname, email, admin flag) map to Microsoft Project resources. We create a resource for each user who appears as an assignee on any migrated issue. Email becomes the resource Initials or Windows Account field for Project Online integration with Microsoft 365. Redmine role assignments per project do not map to Project resource role fields natively; we create a custom field redmine_roles__c listing the original role names per project for audit. Resource calendars (working time) use the Project Standard calendar unless the customer provides a calendar export.

Redmine 3.3

Tracker

maps to

Microsoft Project

Custom Task Field

lossy
Fully supported

Redmine trackers (Bug, Feature, Support, Custom) are distinct issue types with independent workflows and custom field scopes. In Microsoft Project we create a custom enterprise or local task text field (e.g., Task Text1 labeled Tracker) and populate it with the tracker name for each migrated task. Tracker-specific workflows (status transition rules) have no Microsoft Project equivalent and are documented in the automation inventory as a rebuild item for Power Automate.

Redmine 3.3

Custom Field (list type)

maps to

Microsoft Project

Custom Task Field (lookup or text)

lossy
Fully supported

Redmine list-format custom fields store a numeric ID in the issue record, while the human-readable label lives in a separate possible_values table. We query the custom_field_definitions before processing any issue export, build an ID-to-label lookup table, and substitute display values when writing to Microsoft Project custom fields. If the custom field uses a finite set of valid values, we replicate the picklist in Project's custom field definition so the values appear as a dropdown. Multi-value list custom fields in Redmine map to a semicolon-delimited text string in the Project custom field.

Redmine 3.3

Attachment

maps to

Microsoft Project

Hyperlink on Task

1:1
Fully supported

Redmine stores uploaded files on the server filesystem under the files/ directory. We extract attachment metadata (filename, content_type, created_on, author_id) from the attachments table, download each file, and upload it to a designated SharePoint document library or Teams channel linked to the destination project. We then write a hyperlink on the corresponding Microsoft Project task pointing to the SharePoint or Teams file URL. Files with no reachable source path are logged in the attachment reconciliation report with the original Redmine URL.

Redmine 3.3

Document

maps to

Microsoft Project

Document references as hyperlinks

1:1
Fully supported

Redmine project documents (title, description, category) have no direct Microsoft Project equivalent. We create a custom field documents__c on the project summary task containing a semicolon-delimited list of document titles and the SharePoint URLs where the customer stores them post-migration. Document content does not migrate; the customer either moves the files manually or creates a SharePoint library for the project and links it.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Redmine 3.3 logo

Redmine 3.3 gotchas

High

Database migrations are required between major Redmine versions

High

CSV export has no native import counterpart

Medium

Custom field list values store internal IDs, not display labels

Medium

Plugin-specific data is not accessible via the REST API

Medium

Attachment files live on the server filesystem, not the database

Microsoft Project logo

Microsoft Project gotchas

High

Project for the web is being retired and merged into Microsoft Planner

Medium

Planner-tier portfolio features are incomplete despite Plan 5 labeling

Medium

Web app constraint controls are weaker than the Windows desktop client

High

Project requires a separate license not bundled with standard Microsoft 365

Medium

Project Online API is edition-gated and inconsistently documented

Pair-specific challenges

  • Redmine's flat parent-child issue hierarchy requires WBS reconstruction

    Redmine stores issue hierarchy via a parent_issue_id column that references the issues table by integer ID. Sub-sub-issues at any depth are all siblings in the same flat table with only parent_id as the link. Microsoft Project expects a WBS outline where summary tasks contain child tasks in a tree structure with Outline Level and Outline Number values. We traverse the Redmine issue tree breadth-first, compute the correct WBS prefix per project, and write the outline structure to the .mpp XML or Project Online task API. If Redmine has circular parent references (which can occur with plugin corruption), those cycles are broken and logged. Teams that built deep Redmine issue trees (5+ levels) should expect the deepest branches to require manual validation in Project.

  • Redmine has no native resource management; assignee is a single-user field

    Redmine issues have a single assigned_to field per issue. There is no resource pool, no max units per person, no resource calendar, and no concept of resource leveling. Microsoft Project calculates task scheduling partly based on resource availability and max units. When migrating assignee data, we create a resource for each unique user and assign them at 100% units to each task they are assigned to in Redmine. If multiple users collaborated on one Redmine issue, we create separate task assignments in Project for each user with the hours split by time entry. The customer's admin should review resource max units and calendars in Project post-migration.

  • Custom field list values store internal IDs, not display labels

    In Redmine's database, list-format custom fields store a numeric ID in the issue record while the human-readable label lives in a separate possible_values table. CSV exports of issues show the numeric ID, not the label text. We bypass this by querying the custom_field_definitions endpoint before processing any issue export, building an ID-to-label lookup table, and substituting display values at the point of writing to Microsoft Project custom fields. Without this step, every list custom field in the migrated project contains raw integers instead of meaningful values.

  • Attachment files live on the server filesystem, not the database

    Redmine stores uploaded files on disk under the files/ directory (or a configured storage path) and records only the file path and metadata in the attachments database table. If the Redmine instance uses local disk storage that becomes inaccessible post-migration, attachments are lost. We extract file paths from the attachments table, verify file accessibility before migration, download each file, and re-upload to a SharePoint document library or Teams channel linked to the destination project. We write a hyperlink on the corresponding Microsoft Project task pointing to the re-housed file.

  • MS Project 2007/2013 XML plugin does not support Redmine 3.3 directly

    A community plugin on the Redmine plugins directory (MS Project 2007 Import/Export plugin, compatible with Redmine 3.3.x) provides XML-based import/export to legacy .mpp formats. This plugin works for simple task lists but does not handle subproject nesting, time entry consolidation, resource calendars, or custom field resolution. We do not rely on this plugin for migration; it is mentioned as context only. Customers using the XML connector should treat it as a temporary bridge, not a production migration path.

Migration approach

Six steps for a successful Redmine 3.3 to Microsoft Project data migration

  1. Discovery and inventory

    We inventory the Redmine 3.3 source across every project: project count, issue count per project, hierarchy depth (max parent_issue_id nesting level), tracker types per project, version count and effective dates, custom field definitions and their types (string, list, date, int, bool), time entry volume, unique user count (assignees and loggers), attachment count and total file size on disk, and any plugin tables detected in the database schema. We also confirm the Microsoft Project version (Project Desktop 2021 or 2024, or Project Plan 3/5 for Project Online) and whether the destination is a single .mpp file per project or a shared Project Online environment with multiple projects in one tenant. The discovery output is a written scope document with record counts, a custom field mapping matrix, and the WBS reconstruction plan.

  2. Custom field lookup table build

    Before processing any issue export, we query the Redmine custom_field_definitions table and build an ID-to-label lookup for every list-format custom field. This table is the prerequisite for writing correct display values to Microsoft Project. We also extract the custom field types (date, int, string, bool, list, user, version) and map each to the equivalent Microsoft Project custom field type (Date, Number, Text, Flag, Lookup). The lookup table is validated against a sample of issue records before the full export runs.

  3. Staging migration and hierarchy validation

    We run a full migration into a staging Project file (or Project Online sandbox site) using production data volume. The customer validates the WBS outline structure (does the summary task nesting match the original Redmine subproject-issue tree?), milestone positioning (are Redmine versions at the correct dates?), and time entry totals (does the sum of hours per task match the Redmine time log?). Any mapping corrections — WBS depth limits, milestone date defaults, custom field type mismatches — are applied before the production migration begins. This step also surfaces any circular parent_id references in the Redmine issue tree.

  4. Attachment and file rehousing

    We extract attachment metadata from the Redmine attachments table, verify each file is accessible on the source server, download the file batch, and upload each file to a SharePoint document library or Microsoft Teams channel designated by the customer. We generate a mapping table of Redmine attachment URLs to the new SharePoint/Teams URLs. This table is applied during the task write phase to populate the hyperlink field on each task. Files exceeding 250 MB or with inaccessible source paths are logged separately for manual handling.

  5. Production migration in record order

    We run production migration in dependency order: Project file creation (or Project Online site provisioning), versions (milestones with effective dates), resources (from unique Redmine users), tasks (issues with parent-child hierarchy as WBS outline), task dependencies (from Redmine issue relations with resolved target UIDs), time entry rollup (as task actuals), custom field population (with resolved list values), and attachment hyperlinks (with the SharePoint/Teams URL table). Each phase emits a row-count reconciliation report before the next phase begins. For Project Online, we use the Project Web App REST API with rate-limit handling and exponential backoff.

  6. Cutover, validation, and automation inventory handoff

    We freeze Redmine write access during cutover and run a final delta migration of any issues or time entries modified during the migration window. The customer validates the final Project file against a Redmine issue query export. We deliver the automation inventory document listing every Redmine tracker workflow, status transition rule, and any plugin-based automation requiring rebuild in Power Automate (for Project Online) or manually reconfigured in Project Desktop. We do not rebuild Redmine automations as Power Automate flows inside the migration scope. We support a one-week hypercare window for reconciliation issues raised by the project management team.

Platform deep dives

Context on both ends of the pair

Redmine 3.3 logo

Redmine 3.3

Source

Strengths

  • Zero licensing cost — fully open-source with no per-user or per-project fees regardless of team size
  • Flexible role-based access control with per-role, per-tracker permission restrictions introduced in 3.3
  • Multi-database support (MySQL, PostgreSQL, SQLite, SQL Server) for on-premises deployment flexibility
  • Integrated time tracking with activity categories and per-user, per-issue reporting
  • Native Gantt chart and calendar views built on issue start and due dates without plugins

Weaknesses

  • No built-in bulk import tool — data movement relies on CSV exports with manual sequencing or third-party plugins
  • REST API in 3.3 is read-oriented for most objects; write operations and bulk endpoints are limited or absent
  • Upgrading Redmine between major versions requires running database migrations that are not always reversible
  • The web UI is considered dated and unpolished compared to modern SaaS alternatives, increasing user onboarding friction
  • Plugin ecosystem is fragmented — many popular plugins are not compatible with newer Redmine major versions
Microsoft Project logo

Microsoft Project

Destination

Strengths

  • Deep critical-path scheduling with baseline comparison and cross-project dependency tracking unmatched by lighter PM tools.
  • Native Azure AD authentication, Teams integration, and Power BI reporting sit on infrastructure enterprises already license and manage.
  • Enterprise governance controls including demand intake workflows, resource request approval, and portfolio-level capacity analysis.
  • Supports both Waterfall and Agile methodologies within the same project, accommodating hybrid delivery teams.
  • Scalable from Project Plan 1 for small teams to Project Server on-premises for regulated industries with strict data-sovereignty requirements.

Weaknesses

  • Ease-of-use scores trail the category average by a wide margin; onboarding friction frustrates new users consistently across G2 and Capterra reviews.
  • Pricing ranks 42nd of 49 tools in its category — the total cost of ownership including IT administration and training is rarely recovered for small or mid-market teams.
  • No built-in client portal, external stakeholder sharing, or proofing workflow, limiting use cases to internal PMO environments only.
  • The web interface (Project for the web / Planner Premium) has materially weaker constraint controls and resource auto-leveling than the Windows desktop client.
  • Project for the web is being consolidated into Microsoft Planner, creating uncertainty about which product tier will host project portfolio data long-term.

Complexity grading

How hard is this migration?

Standard Project Management migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Redmine 3.3 and Microsoft Project.

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Redmine 3.3: Not publicly documented — no published rate limit for self-hosted instances.

  • Data volume sensitivity

    B

    Redmine 3.3 doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Redmine 3.3 to Microsoft Project migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Redmine 3.3 to Microsoft Project data migrations

Answers to the questions buyers ask most during Redmine 3.3 to Microsoft Project migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Redmine 3.3 to Microsoft Project migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between two and four weeks for accounts with fewer than 5,000 issues, flat project hierarchies (2-3 levels), and fewer than ten custom fields. Migrations with deep subproject trees (5+ levels), list-format custom fields on every tracker, more than 1,000 time entries, or large attachment volumes (multiple GB of files) extend to six to ten weeks because of WBS reconstruction testing, ID-to-label lookup building, and filesystem batch handling.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Redmine 3.3.
Land in Microsoft Project, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day