# mpxj-ts The Microsoft Project file reader behind johnmcm.com's MPP Viewer (https://johnmcm.com/mpp-viewer). It reads, in the browser: - `.mpp` and `.mpt` files from Microsoft Project 2010 to 2024 (the "MPP14" format): a TypeScript port of MPXJ's MPP14 reader; - Project's XML format (MSPDI); - MPX. ## Licence MPXJ (https://github.com/joniles/mpxj, Jon Iles and contributors) is licensed under the GNU Lesser General Public License 2.1, and this port is a derivative of it, so this whole module is under the LGPL 2.1 or later: see `LICENSE`. The page loads it as a separate file (`/vendor/local/mpxj@1/mpxj.mjs`), so it can be rebuilt from this source and replaced. ## What comes from MPXJ Ported from MPXJ at commit `3f9244a9c49b052300c2500545cb5ea65340792b` (6 Oct 2026): | Here | MPXJ | | --- | --- | | `src/blocks.ts` | `mpp/Props14`, `FixedMeta`, `FixedData`, `VarMeta12`, `Var2Data` | | `src/bytes.ts` | `common/ByteArrayHelper`, `mpp/MPPUtility` | | `src/fieldmap.ts` | `mpp/FieldMap`, `FieldMap14`, `common/FieldTypeHelper` | | `src/fields.ts` | generated by `tools/gen_fields.py` from `TaskField`, `ResourceField`, `AssignmentField` and `common/MPP*Field` | | `src/mpp14.ts` | `mpp/MPPReader`, `MPP14Reader`, `ConstraintFactory`, `ResourceAssignmentFactory`, `ProjectPropertiesReader`, `CompObj` | | `src/mpx.ts` | record and field numbers from `mpx/MPXReader`, `MPXTaskField`, `MPXResourceField` | Written for this module: `src/cfb.ts` (OLE compound files, from Microsoft's [MS-CFB] specification), `src/mspdi.ts` and `src/xml.ts` (from Microsoft's published MSPDI schema), `src/rtf.ts`, `src/model.ts`, `src/index.ts`. Not read: timephased data, calendars, views, filters, groups, custom-field value lists and enterprise custom fields; Project 2007 and older `.mpp` files. ## Building ``` python tools/gen_fields.py # only when updating MPXJ node build.mjs # writes vendor/local/mpxj@1/mpxj.mjs ``` `build.mjs` uses esbuild from the site's `frontend/node_modules`.