How to Create Milestones in GitHub Projects (Step-by-Step)
GitHub Milestones are time-boxed containers for issues and pull requests that represent a significant deliverable — a release, a sprint, or a feature set. For engineering teams that work directly in GitHub, milestones provide a lightweight way to group work and track progress without leaving the tool where code lives.
This guide covers creating GitHub milestones, linking issues and PRs, tracking progress, and using milestones for release planning.
Step-by-step guide
Create a milestone
Navigate to your GitHub repository > Issues > Milestones > New Milestone. Give the milestone a name that describes the deliverable: "v2.1.0 Release," "Sprint 12," or "Q3 Auth Improvements." Add a description and set a Due Date. The due date drives the milestone progress bar and deadline tracking.
Assign issues to the milestone
Open any issue and use the Milestone field in the right sidebar to assign it to a milestone. For bulk assignment, go to the Issues list, select multiple issues using the checkboxes, and use the Milestone dropdown at the top. Issues can only belong to one milestone at a time.
Link pull requests to the milestone
Open a pull request and assign it to a milestone using the same sidebar field. When the PR is merged, the associated issue (linked via "Closes #123" in the PR description) is automatically closed and marked complete in the milestone progress.
Track milestone progress
Go to Issues > Milestones and click your milestone. You will see: a progress bar showing open vs. closed issues by count and story points (if you use GitHub Issues estimate labels), the due date with days remaining, and the list of all open and closed issues.
Use milestones for release planning
For software releases, create milestones aligned with version numbers. Tag the milestone with the release branch. When all issues in the milestone are closed, create a GitHub Release pointing to the milestone. The release notes auto-populate from closed issue titles and PR descriptions.
Close or reopen milestones
When a milestone is complete, close it via Milestones > Close Milestone. Closed milestones are archived but remain visible in the Milestones history. If scope changes push work out, do not delete the milestone — move individual issues to a future milestone and close the current one on schedule.
Common mistakes
Using milestones as permanent backlogs
Milestones should have due dates and close when the date passes, whether complete or not. Open-ended milestones become dumping grounds. For permanent backlog management, use GitHub Projects boards instead.
Not linking PRs to issues
Milestones track issues, not PRs. If PRs are not linked to issues (via "Closes #123"), the milestone progress bar does not update when PRs merge. Establish a team convention that every PR closes at least one issue.
Overfilling milestones
A milestone with 50+ issues is not a plan — it is a wishlist. Keep milestones to work that is genuinely achievable in the milestone timeframe based on team velocity.
Tips
Create next sprint's milestone during the current sprint's planning session — never scramble to create it day-of
Use GitHub milestone API to export milestone data to your reporting tools
Add a milestone description that links to the sprint plan doc or PRD
Filter the Issues list by milestone to get a focused view during sprint standups
How Vantage helps
Vantage integrates with GitHub to query your codebase and surfaced completed work. Milestones in GitHub can be linked to Vantage projects so PMs can see engineering progress alongside the PRD and requirements without switching tools.