Quick answer
MPPKit is a Swift package that opens, edits and saves Microsoft Project files from Project 2010 through Microsoft 365, with no Microsoft Project, Java or .NET on the machine. Files it writes open in Microsoft Project. Source, tests and issues are on GitHub.
Why we opened it
.mpp is the only major Office file format with no published Microsoft specification, and there was no Swift library for it. Every Apple-platform app that reads .mpp ships a closed parser. We would rather the code that touches your schedules be open to inspection, testing and improvement by anyone.
It also means you don’t have to take our word for it. Everything MPP Studio promises about your files, that they open in Microsoft Project with nothing lost, can be checked in the source.
How it is verified
- Opened in Microsoft Project: files MPPKit writes have been opened in Project Professional (Microsoft 365) with outline, dates, durations, links, calendars, progress and the Gantt chart as written.
- Checked against an independent reader: on every build, MPPKit’s reading of each sample file, and of files it has just written, is compared field by field with MPXJ. Any difference fails the build.
- Checked against Project’s own scheduling: a built-in tool reschedules Project-saved files and compares every date and the critical path with what Project stored.
- Tested on Mac and iPad: continuous integration builds for macOS and iPadOS and runs the full test suite and CodeQL on every change.
What it reads and writes
| In the file | Support |
|---|---|
| Tasks | Outline to any depth, summaries, milestones, durations, constraints, deadlines, % complete with actuals, notes, WBS, custom fields, baselines 0 to 10 |
| Links | FS, SS, FF and SF, with lead and lag in any unit |
| Resources | Work resources with their own calendars; assignments with units, work and progress |
| Calendars | Working time, holidays and exceptions, any number of base calendars |
| Project | Title, dates, status date, working-time settings, document properties |
| Project XML | Export and import, with the same fields |
It also includes a critical-path scheduler that follows Project’s rules for float and progress. The README lists what is not supported yet.
Use it in your own app
Add it with Swift Package Manager:
.package(url: "https://github.com/hpetersen/MPPKit.git", from: "0.1.0")
Read a file and list its tasks:
import MPPKit
let project = try MPP14File(path: "plan.mpp").readProject()
for task in project.tasks {
print(task.name, task.durationDays)
}
The repository also has mppdump, a command-line tool that shows what is inside any .mpp file, and a sample file that uses every supported feature.
Licence and contributions
MPPKit is released under the GNU AGPL v3. Software you distribute with it, or let people use over a network, must also be released under the AGPL with its source code. Contributions are welcome, above all .mpp files that MPPKit reads or writes wrongly; CONTRIBUTING.md explains how to share a file without sharing its contents.
Questions people ask
Is MPP Studio open source?
The file engine is. MPPKit, which reads and writes the .mpp files, is open source under the AGPL v3. The MPP Studio app itself is not.
Which .mpp versions does MPPKit support?
MPP14, the format of Microsoft Project 2010 through Microsoft 365. Files from Project 2007 and earlier are recognised and refused with a clear error.
Can I use MPPKit in a closed-source app?
Not under the AGPL v3: software you distribute with MPPKit, or let people use over a network, must also be released under the AGPL with its source code.
Microsoft and Microsoft Project are trademarks of Microsoft Corporation. MPPKit and MPP Studio are not affiliated with Microsoft.