# Appendix U: Discussions and Gists
> **Reference companion to:** [Chapter 08: Open Source Culture](08-open-source-culture.md) | Also relevant: [Chapter 10](10-notifications-and-day-1-close.md)
>
> **Authoritative source:** [GitHub Docs: About discussions](https://docs.github.com/en/discussions)
> This appendix consolidates two related community content features: GitHub Discussions (formerly Appendix G) and GitHub Gists (formerly Appendix F).
---
## GitHub Discussions
>
> **Listen to Episode 24:** [GitHub Discussions](https://lp.csedesigns.com/ggg/PODCASTS.html) - a conversational audio overview of this chapter. Listen before reading to preview the concepts, or after to reinforce what you learned.
## Forum-Style Conversations Beyond Issues and Pull Requests
> GitHub Discussions is a built-in community forum for repositories and organizations. It's where open-ended conversations live - questions, ideas, announcements, polls, and community Q&A - separate from the action-oriented world of issues and pull requests.
### Support Hub Onboarding (Recommended For Workshop Alumni)
For ongoing support after the workshop, use:
- Support hub home: [Community-Access/support](https://github.com/Community-Access/support)
- Q&A and community discussion: [Support Hub Discussions](https://github.com/Community-Access/support/discussions)
- Trackable support requests: [Support Hub Issues](https://github.com/Community-Access/support/issues)
Suggested first steps for students:
1. Read the pinned Start Here resources in Discussions.
2. Search existing discussions before opening a new support thread.
3. Use issue templates for setup blockers or accessibility blockers so maintainers can help faster.
### Learning Cards: GitHub Discussions
Screen reader users
- The Discussions tab is in the repository's main navigation bar alongside Code, Issues, and Pull Requests -- press `T` to navigate tab items or `K` to find the "Discussions" link
- Inside a discussion, replies are `article` elements -- in NVDA press `A` to jump between replies; in JAWS use `A` as well
- The reply editor uses the same behavior as issue comments -- enter Focus Mode to type, then press `Ctrl+Enter` to submit
Low vision users
- Discussion categories appear as a sidebar panel on the left or right depending on viewport width -- look for the category list with item counts
- Answered discussions in the Q&A category display a green "Answered" badge next to the title, with the accepted answer pinned to the top
- Polls show percentage bars next to each option after you vote -- the bars use color fill to indicate proportion
Sighted users
- Discussions are organized by category with colored labels -- the sidebar shows all categories and pinned items
- In Q&A threads, look for the green checkmark on the accepted answer pinned above the regular reply timeline
- Use the upvote button (thumbs up) on replies instead of posting "+1" comments -- maintainers often sort by upvotes
## Table of Contents
1. [Discussions vs. Issues: When to Use Which](#1-discussions-vs-issues-when-to-use-which)
2. [Navigating to Discussions](#2-navigating-to-discussions)
3. [Discussion Categories](#3-discussion-categories)
4. [Creating a Discussion](#4-creating-a-discussion)
5. [Participating in Discussions](#5-participating-in-discussions)
6. [Marking an Answer](#6-marking-an-answer)
7. [Polls](#7-polls)
8. [Screen Reader Navigation Reference](#8-screen-reader-navigation-reference)
9. [Organization-Level Discussions](#9-organization-level-discussions)
10. [Accessibility Agents: What's Different Here](#10-accessibility-agents-whats-different-here)
## 1. Discussions vs. Issues: When to Use Which
**Not every conversation belongs in an issue.** GitHub Discussions exists for the conversations that don't fit:
| Use Issues When | Use Discussions When |
| --- | --- |
| You found a bug | You have a question about how something works |
| You want to request a specific feature | You want to brainstorm ideas before filing a feature request |
| There is actionable work to be done | You want community input before deciding what work to do |
| You need to track progress (labels, assign, close) | You want to have an open conversation without resolving it |
| The answer is "fixed" or "won't fix" | The conversation might not have one right answer |
**The signal for maintainers:** A question in an issue is noisier - it implies something needs to be done. The same question in Discussions doesn't trigger workflow automation and doesn't inflate the issue count.
### Common Discussions categories you'll encounter
- **Q&A** - Support questions and answers (one answer can be marked correct)
- **Ideas** - Feature brainstorming before a formal feature request
- **Announcements** - Maintainer posts about releases, breaking changes, roadmaps
- **General** - Everything else
- **Show and Tell** - Community members showing what they built
## 2. Navigating to Discussions
### From a Repository
1. Navigate to the repository
2. There is a **Discussions** tab in the main navigation (alongside Code, Issues, Pull Requests, Actions, Projects)
3. Press `T` to navigate tab items, or `K` to navigate links and find "Discussions"
4. Press `Enter` to open
**If the tab is missing:** Discussions is an opt-in feature. The repository maintainer must enable it in Settings. Not all repositories use it.
### From an Organization
Large organizations can have organization-level Discussions separate from any individual repository:
1. Navigate to the organization page
2. Look for the Discussions tab at the organization level
3. These are community-wide conversations, not repo-specific
## 3. Discussion Categories
The Discussions home page is organized by category. Each category is a section with its own heading.
### Navigating categories
```text
3 → Jump to category headings
K → Navigate discussion titles within a category
Enter → Open a discussion
```
### The side panel (left or right depending on view width) shows
- All categories with item counts
- Pin/announcements section at top
- Most active discussions
- Tags (if the repo uses them)
## 4. Creating a Discussion
1. From the Discussions tab, activate **"New discussion"** button
2. Select a category (required - affects which fields appear)
3. Fill in:
- **Title** - Clear and searchable. "How do I use the daily-briefing agent?" not "Help"
- **Body** - Use Markdown. Same editor as issues
- For **Q&A** category: phrase the title as a question
4. Activate **"Start discussion"**
### Screen reader path
```text
Tab to "New discussion" button → Enter
→ Category list: ↑/↓ to select category → Enter
→ Title field: type title
→ Tab to body: Focus Mode → type or paste content
→ Tab to "Start discussion" button → Enter
```
**Before posting a question:** Search existing discussions first. Use the search bar at the top of the Discussions page or GitHub's global search with `repo:owner/name in:discussions`.
### Learning Cards: Creating a Discussion
**Screen reader users:**
- Tab to the "New discussion" button from the Discussions tab, then press Enter -- the form loads with a category selector first; arrow through categories and press Enter to select
- The title field comes after the category selector -- type a clear, searchable title; for Q&A category, phrase it as a question so it reads naturally in search results
- The body editor is the same as the issue comment editor -- enter Focus Mode to type, use Markdown formatting, and press `Ctrl+Enter` to submit the discussion
**Low-vision users:**
- The category selector appears as a list or grid of labeled options -- each category has a name and description; zoom in to read the descriptions and pick the right one
- The title and body fields stack vertically in a single-column layout -- the form is the same width as the main content area, making it easy to scan at high zoom
- After creating a discussion, a green success banner appears at the top -- scroll up if you do not see confirmation at your current zoom position
**Sighted users:**
- Categories appear as clickable cards or a list when creating a new discussion -- choose Q&A for questions (allows marking an answer), Ideas for brainstorming, General for everything else
- The "New discussion" button is prominently placed at the top-right of the Discussions tab -- the form layout is nearly identical to the new issue form
- Search existing discussions before posting -- use the search bar at the top of the Discussions page to avoid duplicate questions
## 5. Participating in Discussions
### Reading a Discussion
A discussion page is structured similarly to an issue:
- The original post at the top
- Replies in chronological order
- An "Answered" reply pinned to the top (Q&A category only)
- A reply editor at the bottom
#### Navigation
```text
H → Jump between the original post heading and reply headings
3 → Navigate individual reply headings
↓ → Read through content
```
### Replying to a Discussion
1. Navigate to the bottom of the page (or use the "Reply" button on a specific comment)
2. The reply text area behaves identically to issue comments
3. Focus Mode → type your reply
4. `Ctrl+Enter` to submit
### Replying to a Specific Comment (Nested Reply)
Each comment has a **Reply** button below it:
```text
Tab to "Reply" button on the specific comment → Enter
→ Nested text area opens under that comment
→ Focus Mode → type → Ctrl+Enter
```
### Upvoting
Instead of leaving "+1" comments, use the thumbs-up reaction on the original post or replies. Many maintainers sort discussion responses by upvotes to prioritize most-needed answers.
## 6. Marking an Answer
In the **Q&A** category, one reply can be marked as the accepted answer. This is similar to Stack Overflow's "accepted answer" mechanic.
**Only the discussion author and repository maintainers** can mark an answer.
### To mark an answer (as the discussion author)
1. Navigate to the reply you want to mark as the answer
2. Look for the **"Mark as answer"** button below the reply
3. Activate it - the reply is pinned to the top and the discussion shows a green "Answered" badge
**Why it matters:** Marked answers make Q&A discussions into searchable documentation. Anyone who searches for the same question later immediately sees the correct answer without reading the whole thread.
**To unmark an answer:** Activate "Unmark as answer" on the same reply.
## 7. Polls
Some discussion categories support embedded polls. A poll lets you gather structured vote data from the community.
### Creating a poll
1. When creating a discussion, look for the "Add a poll" option below the body editor
2. Type each poll option (up to 8 options)
3. Set poll duration (optional)
4. Submit the discussion - the poll appears inline
### Voting in a poll
```text
Navigate to the poll section
→ Radio buttons or checkboxes for each option
→ Space/Enter to vote
→ "Vote" button → Enter
```
**Poll results:** After voting, percentages appear next to each option. Screen readers announce the count and percentage per option.
## 8. Screen Reader Navigation Reference
### Discussions List
```text
T → Navigate tab bar to reach "Discussions" tab
H / 2 → Category section headings
3 → Individual discussion titles (h3 links)
K → Navigate all links (discussions, categories, pagination)
Enter → Open a discussion
/ → Focus the search bar (if supported)
```
### Inside a Discussion
```text
H → Original post heading and top-level reply headings
3 → Individual replies
↓ → Read body content
Tab → Move to interactive elements (reply buttons, reactions, mark as answer)
Ctrl+Enter → Submit a reply (when in text area)
```
#### NVDA note
- Browse mode (NVDA+Space) to read the discussion
- Enter application mode for the reply editor
- Discussion replies are `` elements - NVDA announces "article" as you navigate with H
#### JAWS note
- `A` key navigates `` elements - useful for jumping between replies
- Use Forms Mode for the reply editor
#### VoiceOver note
- VO+Right to read through content
- VO+Command+L to list all links (useful for navigating many replies quickly)
- VO+Space on the reply field to enter interaction mode
## 9. Organization-Level Discussions
Some organizations enable Discussions at the organization level, separate from any repository. These work identically to repository discussions but span the whole organization.
Common uses:
- Org-wide announcements
- Community introductions ("Introduce yourself" pinned thread)
- Cross-repo feature brainstorming
- Community spotlights and events
Find them at `github.com/ORGANIZATION/discussions`.
## 10. Accessibility Agents: What's Different Here
Accessibility Agents prompts currently operate on **issues, PRs, and code** - not directly on Discussions. If you want to respond to a discussion using Accessibility Agents:
1. Copy the discussion URL or content
2. Use `/issue-reply` with the content pasted in: the agent will draft a thoughtful, accessible response
3. Paste the result back into the discussion reply editor
This works well for first-response drafts on Q&A threads or community questions in your area of expertise.
*Return to: [Resources](appendix-x-resources.md) | [Glossary](appendix-a-glossary.md)*
---
## GitHub Gists
>
> **Listen to Episode 23:** [GitHub Gists](https://lp.csedesigns.com/ggg/PODCASTS.html) - a conversational audio overview of this chapter. Listen before reading to preview the concepts, or after to reinforce what you learned.
## Shareable Code Snippets and Notes
> Gists are a simple way to share code snippets, notes, or small files without creating a full repository. Think of them as lightweight, version-controlled pastebins.
### Learning Cards: GitHub Gists
Screen reader users
- On the Gist creation page at gist.github.com, press `D` to jump to the main landmark, then `F` to navigate form fields: Description, Filename, Content, and Visibility buttons
- Your Gists page lists each gist as an `H2` heading with its description -- press `2` or `H` to jump between gists
- Gists are full Git repositories -- you can clone them with `git clone` and edit locally using your usual screen reader workflow in VS Code
Low vision users
- Gist pages use syntax highlighting matching GitHub's current theme -- switch between light and dark mode for comfortable reading
- Public and secret gists look identical on the page; the only difference is the URL visibility -- check the "Create secret gist" or "Create public gist" button label before submitting
- The revision history link appears at the top of any gist -- click "Revisions" to see a diff view of every edit
Sighted users
- Gists live at gist.github.com, separate from regular repositories -- each gist shows a syntax-highlighted code block with filename tabs at the top
- The visibility selector is a split button at the bottom of the editor -- the dropdown arrow reveals "Create secret gist" vs "Create public gist"
- You can add multiple files to one gist using the "Add file" button below the first editor pane
## What Is a Gist?
A Gist is a Git repository that holds a single file or a small collection of files. Every Gist:
- Has its own URL (e.g., `gist.github.com/username/a1b2c3d4`)
- Is version-controlled (you can see edit history)
- Can be **public** (anyone can see) or **secret** (only people with the link can see)
- Supports Markdown rendering
- Can be embedded in web pages
- Can be cloned, forked, and starred just like repos
**Secret does not mean private.** Anyone with the URL can view a secret Gist. It's just not listed publicly on your profile.
## When to Use a Gist vs a Repository
| Use a Gist When... | Use a Repository When... |
| -------------------- | -------------------------- |
| Sharing a single code snippet | Building a full project |
| Posting configuration examples | Collaborating with multiple people |
| Quick notes or documentation | Need issues, PRs, or project management |
| Sharing logs or error messages | Want CI/CD and automated checks |
| Small utility scripts | Need multiple branches |
## Creating a Gist
### Via GitHub Web Interface
1. Navigate to [gist.github.com](https://gist.github.com)
2. **Gist description:** A short title (e.g., "NVDA configuration for GitHub")
3. **Filename:** Name your file with extension (e.g., `nvda-config.txt`, `script.py`, `notes.md`)
4. **Content:** Paste or type your code/text
5. **Visibility:**
- Select **"Create public gist"** for openly shareable content
- Select **"Create secret gist"** for link-only sharing
6. The Gist is created with a unique URL you can share
#### Screen reader navigation
- `D` to cycle landmarks to "Main"
- `F` to navigate form fields
- Tab through: Description → Filename → Content textbox → Visibility buttons
### Adding Multiple Files to a Gist
You can add multiple files to a single Gist:
1. After typing the first filename and content, select **"Add file"** (button below the editor)
2. Repeat for each additional file
3. Create the Gist
**Use case:** Share related config files together (e.g., `.vscode/settings.json` + `.vscode/keybindings.json`)
### Learning Cards: Creating a Gist
**Screen reader users:**
- On the Gist creation page at gist.github.com, press `D` to jump to the main landmark, then `F` to navigate form fields in order: Description, Filename, Content textarea, and visibility buttons
- The visibility selector is a split button -- the main button creates a public gist; Tab to the dropdown arrow next to it and press Enter to reveal the "Create secret gist" option
- Each filename field has a corresponding content textarea directly below it -- after filling one file, Tab to the "Add file" button to add another file to the same gist
**Low-vision users:**
- The Gist editor uses the same syntax highlighting as regular GitHub files -- your current theme applies; increase font size in browser zoom for comfortable editing
- The split button for public vs. secret visibility is at the bottom of the form -- the two options look nearly identical; read the button label carefully ("Create public gist" vs. "Create secret gist") before clicking
- The "Add file" button appears below the first file editor as a small text link -- zoom in to find it; each additional file gets its own filename field and content textarea
**Sighted users:**
- The Gist creation form has three main fields stacked vertically: description at the top, then filename, then a large code editor -- fill all three before choosing visibility
- The visibility split button at the bottom-right has a dropdown arrow -- click the arrow to choose between public and secret; the default (larger) button creates a public gist
- Add multiple files to a single gist using the "Add file" link below the editor -- multi-file gists are useful for sharing related configurations or code snippets together
## Editing a Gist
1. Navigate to your Gist's URL
2. Select **"Edit"** (button in the top-right)
3. Make your changes
4. Select **"Update public gist"** or **"Update secret gist"**
Every edit creates a new revision. Click **"Revisions"** to see the full edit history.
## Embedding a Gist
You can embed Gists in web pages, blog posts, or documentation:
```html
```
GitHub renders it as a formatted code block with syntax highlighting and a link back to the Gist.
**Accessibility note:** Embedded Gists are `