All pull requests are welcome, there are just a few guidelines you need to follow.
When contributing to this repository, please first discuss the change by creating a new issue or by replying to an existing one.
- Visual Studio 2026 with the following workloads:
- Desktop development with C++
- v145 toolset (VS 2026)
- Windows 11 SDK (10.0.22621.0)
- Spectre-mitigated libraries (recommended)
- Node.js (for npm-based builds - optional but recommended)
Run the prerequisite check to verify your environment:
npm run prereqOr use the .vsconfig file to install all required components:
- Open Visual Studio Installer
- Click More → Import configuration
- Select the
.vsconfigfile from the repo root
- Make sure you have a GitHub account.
- Fork the repository, you can learn about forking on Github
- Clone the repo to your local machine with submodules:
git clone --recursive https://github.com/microsoft/mfcmapi.git- Install npm dependencies (for command-line builds):
npm installOpen MFCMapi.sln in Visual Studio 2026 and build.
Press F5 to build and debug. The default configuration is Debug_Unicode x64.
# Build (default: Debug_Unicode x64)
npm run build
# Build specific configurations
npm run build:release # Release_Unicode x64
npm run build:debug:x86 # Debug_Unicode x86
npm run build:debug:ansi:x64 # Debug (ANSI) x64
# Run tests
npm run test
# Clean all build outputs
npm run cleanThe npm scripts automatically find MSBuild via vswhere, so no Developer Command Prompt is needed.
- Create branch topic for the work you will do, this is where you want to base your work.
- This is usually the main branch.
- To quickly create a topic branch based on main, run
git checkout -b u/username/topic main- Make sure to substitute your own name and topic in this command *
- Once you have a branch, make your changes and commit them to the local branch.
- Run
npm run testto verify your changes don't break existing tests. - All submissions require a review and pull requests are how those happen. Consult GitHub Help for more information on pull requests.
- Push your changes to a topic branch in your fork of the repository.
At this point you're waiting on the code/changes to be reviewed.
MFCMAPI supports fuzzing with libFuzzer. See Fuzzing.md for details.