If you’re interested in supporting the Hub’s development and are familiar with Markdown and MDX, read on to learn how to contribute to the project.
Contributions are very welcome and appreciated. Be sure to review CONTRIBUTING.md before getting started with your contribution!
Project Structure
This is not the entire project structure, but it’s the most important part of the project structure which we recommend you limit your contributions to.
- public (images and static assets)
- …
- src
- assets (official logos)
- …
- components (reusable UI components)
- content
- docs
- aibusiness/ (AI Business exams)
- azure/ (Azure exams)
- dynamics/ (Dynamics exams)
- github/ (GitHub exams)
- guide/ (certification guides)
- labs/ (hands-on lab guides)
- microsoft365/ (Microsoft 365 exams)
- power/ (Power Platform exams)
- security/ (Security exams)
- vouchers/ (voucher offers)
- contributing.mdx
- labs.mdx
- office.mdx
- privacy.mdx
- supportus.mdx
- vouchers.mdx
- welcome.mdx
- blog (blog posts)
- docs
- layouts (page layouts)
- pages (routed pages: news, contact, etc.)
- utils (utility functions)
- assets (official logos)
- astro.config.mjs (Astro configuration)
- package.json (project dependencies)
- tsconfig.json (TypeScript configuration)
- mcp-worker/ (MCP server worker)
Web-only Contribution
While this method is limited in terms of what you should contribute, you can still contribute to the project by adding new text content on existing pages, fixing typos, or improving existing text content.
Requirements
- Good understanding of Markdown and MDX
- Basic understanding of how to use GitHub
- A brain and patience
- A computer and an internet connection
Setting up the project
-
Fork the project to your GitHub account.
-
Navigate to the file you want to edit in the GitHub repository of your fork.
-
Click on the edit icon on the top right corner of the file.
-
Make your changes in the editor.
-
After making changes, scroll down to the bottom of the page and write a short description of the changes you made.
-
Create a pull request to the main repository. Wait for the maintainers to review your pull request.
-
Celebrate when your pull request is merged!
IDE-based Contribution
This method is more advanced and allows you to contribute to the project in a more flexible way. You can add new pages, edit existing pages, and add new components to the Hub. This also allows you to preview your changes locally before submitting a pull request.
Requirements
- Basic understanding of Markdown and MDX and the local components exported by
@components/docs - Basic understanding of how to use GitHub
- Git installed on your machine
- A brain and patience
- A computer and an internet connection
- A code editor like VSCode or a GitHub’s Codespace
- Optional: Socket.dev CLI for supply chain security
Setting up the project
-
Fork the project, then clone it to your local machine and
cdinto the directory. If you don’t know what any of this means, refer to this video here. -
Install Node.js and pnpm:
macOS / Linux
We recommend using nvm to manage Node.js versions:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash nvm install 22Then install pnpm:
curl -fsSL https://get.pnpm.io/install.sh | sh -Windows
Download Node.js from nodejs.org or use fnm:
winget install Schniz.fnm fnm install 22Then install pnpm:
iwr https://get.pnpm.io/install.ps1 -useb | iex -
Install dependencies:
pnpm install pnpm approve-builds(
pnpm approve-buildsapproves optional native build scripts required by some dependencies.) -
Start the dev server:
pnpm dev -
Open your browser and navigate to
http://localhost:4321to see the project running. -
After making changes, make sure you’re not breaking anything by previewing your changes locally. If there are no errors, commit your changes and push them to your forked repository.
-
Create a pull request to the main repository. Wait for the maintainers to review your pull request.
-
Celebrate when your pull request is merged!
Socket.dev Firewall (Optional)
The Hub uses Socket.dev to detect supply chain attacks in npm packages. Setting up aliases lets you use pnpm as normal while scanning every install automatically.
First, install the Socket CLI globally:
npm i -g sfw
Then configure shell aliases for your platform:
macOS / Linux (Bash / Zsh)
Add to ~/.bashrc or ~/.zshrc:
alias npm="sfw npm"
alias yarn="sfw yarn"
alias pnpm="sfw pnpm"
alias npx="sfw npx"
Then run source ~/.bashrc (or ~/.zshrc) to apply.
Windows (PowerShell)
Add to your PowerShell profile ($PROFILE):
function pnpm { sfw pnpm @args }
function npm { sfw npm @args }
function npx { sfw npx @args }
Restart PowerShell to apply. Now pnpm install runs through Socket automatically.
GitHub Codespaces (browser-based editing with live preview)
The repo ships with a pre-configured devcontainer so you can contribute entirely from your browser with a live preview — no local setup required.
-
Open the mscerts/hub repository on GitHub and click Code → Codespaces → Create codespace on main (or your fork’s branch).
-
Wait ~2 minutes for the container to build. VS Code opens in the browser with all extensions pre-installed and dependencies installed.
-
In the integrated terminal, start the dev server:
pnpm devPort 4321 is forwarded automatically. Click the pop-up or navigate to the Ports panel to open a live preview of the Hub.
-
Edit any MDX file in
src/content/docs/and the browser preview refreshes automatically. -
When done, commit your changes via the Source Control panel and open a pull request.
This approach is equivalent to visual editing — you see the rendered result of every change in real time, without needing to install anything locally.
Scaffolding a new exam page
Instead of copying an existing page and editing it manually, use the scaffold script to generate a correctly-structured starting point:
node scripts/new-exam.mjs --code AZ-999 --name "Microsoft Azure Whatever"
Optional flags:
| Flag | Purpose |
|---|---|
--beta | Adds a beta status banner import |
--labs | Adds an Exam Labs link in the Get Started block |
The script:
- Validates the exam code format and determines the correct content area
- Creates
src/content/docs/<area>/<CODE>.mdxwith all five required tabs - Prints a checklist of what to fill in next (exam URL description, training course link, etc.)
The new page is automatically picked up by the sidebar — no manual astro.config.mjs edits needed.
VSCode Support
We recommend using VSCode or GitHub Codespaces for contributing. The repo includes a pre-configured .vscode/settings.json with Markdown paste and drop settings, and a .devcontainer configuration for a one-click Codespaces setup.
Recommended extensions:
Where to begin?
If you’re new to the project, you can start by fixing typos, adding new studying resources, or improving existing guides. This will help you get familiar with the project structure and the way content is written.
Here are some resources that will help you understand how the Hub works better: