GitHub Projects and Discussions

Plan and track work with GitHub Projects boards, tables and roadmaps, automate status changes, and use Discussions and issue forms.

Lesson 12 of 30Intermediate17 min read

Issues are great for recording individual tasks, but once a project has fifty of them, you need a way to see the big picture. What's being worked on right now? What's blocked? What's planned for next month? GitHub Projects answers those questions.

A project is a flexible planning space that collects issues and pull requests, from one repository or many, and shows them as a board with columns, a table like a spreadsheet, or a roadmap on a timeline. Because it's built from real issues and pull requests, it updates itself as work happens: when a pull request merges and closes an issue, the card moves to Done.

In this lesson you'll create a project, add work to it, customise fields and views, automate the boring parts, design issue forms that collect the right information, and use Discussions for conversations that aren't tasks.

Creating a project and adding items

Open your profile or organisation, choose the Projects tab and click New project. Pick a template such as Board or Team planning, or start blank.

Add items by typing # in the bottom row and choosing an issue or pull request, or by pasting an issue's URL. You can also add a draft item, a quick note that's not an issue yet, and convert it to a real issue later. One project can hold work from many repositories, which suits teams with a separate front end and back end.

Views: board, table and roadmap

Each project can have several views, shown as tabs:

ViewLooks likeGood for
BoardColumns of cards (To do, In progress, Done)Daily stand-ups and seeing flow
TableRows and columns, like a spreadsheetSorting, filtering and bulk edits
RoadmapBars on a timelinePlanning dates and releases

Each view can filter (label:bug assignee:@me), group (by assignee or milestone) and sort. A team might keep a "My work" table, a "Bugs" board and a "Q3 roadmap", all showing the same items in different ways.

Custom fields and automation

Besides an issue's own labels and assignees, a project can add custom fields: a Status list, a Priority of High, Medium or Low, a Size number, a Date, or an Iteration for sprints. They belong to the project, so they don't clutter the issue itself.

Under the menu's Workflows, switch on built-in automation:

  • Item added: set Status to To do.
  • Pull request merged and Item closed: set Status to Done.
  • Auto-add: add new issues from a repository that match a filter, such as label:bug.

Issue forms and Discussions

An issue form is a YAML file in .github/ISSUE_TEMPLATE/ that turns "New issue" into a form with required fields, drop-down menus and checkboxes. It makes bug reports consistent, because nobody can forget the steps to reproduce.

Discussions, switched on in a repository's settings, is a forum for questions, ideas and announcements that aren't actionable tasks. Questions can have an answer marked as accepted. Keeping "How do I...?" posts in Discussions keeps the issue list focused on real work, and a good discussion can be converted into an issue when it becomes one.

GitHub Projects Syntax

Project filters and CLI

is:issue is:open label:bug
assignee:@me status:"In progress"
priority:High -label:wontfix
gh project list --owner samlee
gh project item-add 3 --owner samlee --url https://github.com/samlee/portfolio/issues/14

GitHub Projects Summary

  • GitHub Projects collects issues and pull requests from one or more repositories into a planning space.
  • Board, table and roadmap views show the same items in different ways, with filters and grouping.
  • Custom fields such as Status, Priority, Size and Iteration belong to the project.
  • Built-in workflows move items automatically when they're added, closed or merged.
  • Issue forms collect consistent reports; Discussions hold questions and ideas.

GitHub Projects Examples

Each example shows the code, the output it produces and what each part does.

Example 1

A board for a small team

Text
Project: Portfolio relaunch          View: Board, grouped by Status

To do (3)             In progress (2)          Done (4)
#21 Dark mode         #18 Contact form  @ben   #12 Hero section
#23 Blog page         #19 Fix nav (PR) @sam    #14 Footer links
Draft: Add favicon                              #15 Mobile menu
                                                #16 Image sizes
Output
Anyone can see at a glance what's planned, who is
working on what, and what's finished. When PR #19
merges, its card moves to Done automatically.
Line-by-line explanation
  1. Line 1The project title and current view.
  2. Line 3Columns come from the Status field.
  3. Line 6A draft item can be turned into an issue later.
Example 2

An issue form

YAML
name: Bug report
description: Something isn't working
labels: ["bug"]
body:
  - type: textarea
    id: steps
    attributes:
      label: Steps to reproduce
      placeholder: "1. Open the menu  2. Click Blog"
    validations:
      required: true
  - type: dropdown
    id: browser
    attributes:
      label: Browser
      options: [Chrome, Firefox, Safari, Edge]
Output
New issue > Bug report
  Steps to reproduce *    [ text box ]
  Browser                 [ Chrome  v ]
Submitting adds the "bug" label automatically.
Line-by-line explanation
  1. Lines 1 to 3The form's name, description and automatic label.
  2. Lines 5 to 11A required text area for reproduction steps.
  3. Lines 12 to 16A drop-down menu, so everyone picks from the same list of browsers.
Example 3

Adding work from the terminal

Terminal
gh issue create --title "Add dark mode" --label enhancement
gh project item-add 3 --owner samlee --url https://github.com/samlee/portfolio/issues/21
Output
https://github.com/samlee/portfolio/issues/21
Added item
Line-by-line explanation
  1. Line 1Create an issue; GitHub prints its address.
  2. Line 2Add it to project number 3 owned by samlee.

Common GitHub Projects Mistakes

Status that never changes

Don't
Cards stay in "In progress" for weeks after the work merged
Do
Turn on the "Pull request merged" and "Item closed" workflows

Using issues for questions

Don't
Issue #88: "How do I install this on a Mac?"
Do
Discussions > Q&A: "How do I install this on a Mac?"

Questions clutter the task list and are hard to find again in closed issues.

Labels for everything

Don't
Labels: priority-high, size-3, sprint-7, status-doing
Do
Project fields: Priority, Size, Iteration, Status

Fields can be sorted, filtered and charted; dozens of labels can't.

GitHub Projects in Real Projects

Projects in real teams

Small teams often run their whole planning on a single GitHub Projects board, avoiding a separate tool. Open-source projects publish public roadmaps so users can see what's coming, and use Discussions as their community forum. Large organisations create projects that span dozens of repositories, with iterations for two-week sprints and charts showing how much work is completed each cycle.

GitHub Projects FAQ

Can one GitHub project track issues from several repositories?

Yes. A project belongs to a user or organization rather than to a single repository, so you can add issues and pull requests from any repositories you can access. Add a Repository column or group by repository to see where each item lives.

Can I make a GitHub project public?

Yes. In the project's settings you can set its visibility to public or private. A public project is visible to anyone, but items from private repositories are still only shown to people who have access to those repositories.

What is the difference between milestones and projects?

A milestone belongs to one repository and groups issues towards a single goal or release, with a simple progress bar. A project can span many repositories and gives you custom fields, several views and automation. Many teams use both: milestones for releases and a project for day-to-day planning.

Can I use GitHub Projects as a personal to-do list?

Yes. Create a project under your own account and add draft items for quick notes and issues for real work across your repositories. A simple board with To do, In progress and Done columns works well for one person.

How do I hide finished items without deleting them?

Archive them. Archived items disappear from the project's views but keep their history, and you can restore them later. A built-in workflow can archive items automatically once they meet conditions you set, such as being closed.

GitHub Projects Exercises

Answer each one and check it instantly. If you get stuck, open the hint before the answer.

Fill in the blankseasy

Complete the folder where issue forms are stored.

.github//bug_report.yml
Multiple choiceeasy

Which project view shows work as columns of cards?

Multiple choicemedium

Where should a question like "How do I install this?" usually go?

Multiple choicemedium

What does the "Pull request merged" workflow do?

Multiple choicehard

Why use a custom Priority field instead of priority labels?

GitHub Projects Quiz

5 questions to check what you learned.

  1. What can a GitHub project contain?

    • Issues, pull requests and draft items, from one or more repositories
    • Only commits
    • Only issues from a single repository
    • Only files
  2. What is a draft item?

    • A closed issue
    • An unpublished release
    • A draft pull request
    • A quick note in a project that can later be converted into a real issue
  3. Which view is best for planning dates on a timeline?

    • Board
    • Roadmap
    • Table
    • Discussions
  4. What advantage do issue forms have over a blank issue?

    • They're private
    • They close automatically
    • Required fields and menus make every report include the information you need
    • They skip review
  5. What does an Iteration field help a team do?

    • Plan work in fixed time periods such as two-week sprints
    • Count commits
    • Merge pull requests
    • Sync forks