GitHub Issue Template Generator

Generate GitHub issue templates with YAML frontmatter, markdown body, and optional form elements.

Place in .github/ISSUE_TEMPLATE/ directory

Labels (comma separated)

Assignees (comma separated)

Form Fields (comma separated)

0 chars | 0 lines

What is a GitHub Issue Template?

GitHub issue templates are YAML files placed in a repository's .github/ISSUE_TEMPLATE/ directory. Instead of opening a blank text box, anyone filing an issue sees a structured form with labelled fields. This nudges reporters to include the details maintainers actually need — reproduction steps, environment, expected versus actual behaviour — and cuts down on back-and-forth.

GitHub supports two template styles. The older style is a Markdown file with YAML front matter, which simply pre-fills the issue body. The newer style, Issue Forms, uses a YAML file whose body array describes real form controls: markdown blocks, text inputs, textareas, dropdowns, and checkboxes, each with its own label, description, placeholder, and validation rules. This generator produces Issue Forms, which offer the best structure and are validated by GitHub before an issue can be submitted.

You can generate a ready-made Bug Report or Feature Request preset, or start from a Custom template and define your own fields. The preview updates as you type, and the download button saves a file you can commit directly.

Anatomy of an issue form

  • name — the label shown in GitHub's template chooser.
  • description — a short line under the name.
  • title — a default issue title, here prefixed with [Bug], [Feature], or [Issue].
  • labels and assignees — applied automatically to issues created from the template.
  • body — the ordered list of form elements rendered to the reporter.

How to Use

  1. Select Template Type — Choose Bug Report, Feature Request, or Custom template.
  2. Customize Fields — Edit the name, description, labels, assignees, and form fields as needed.
  3. Preview — The generated YAML updates in real time as you make changes.
  4. Download — Download the .yml file and place it in your repository's .github/ISSUE_TEMPLATE/ directory. GitHub automatically detects and uses it.

Form element types

The generator turns each comma-separated field into a required textarea. GitHub's Issue Forms specification supports several other control types, which you can add by editing the YAML after downloading.

type Renders as Good for
markdownStatic formatted textInstructions and headers
textareaMulti-line text boxDescriptions, long answers (the default here)
inputSingle-line text boxVersions, short identifiers
dropdownSelect listOS or severity choices
checkboxesChecklistAcknowledgements and confirmations

Example generated template

A short custom template with two fields produces YAML like this:

name: "Bug Report"
description: "Report a bug to help us improve"
title: "[Bug]: "
labels:
  - "bug"
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!
  - type: textarea
    id: description
    attributes:
      label: "Description"
      description: "Please provide description"
      placeholder: "Enter description here..."
      value: ""
    validations:
      required: true

Field names are normalised into ids: lowercase, with runs of non-alphanumeric characters replaced by underscores, so "Steps to Reproduce" becomes steps_to_reproduce.

Common use cases

  • Triage at scale — collect consistent information from every reporter so bugs can be reproduced faster.
  • New repositories — bootstrap sensible templates without hand-writing YAML.
  • Open source projects — guide first-time contributors to include the details maintainers need.
  • Bug vs feature flow — ship separate templates that apply different labels automatically.
  • Internal trackers — standardise the fields your team expects on every issue.

Frequently Asked Questions

Where do I place the template file?

Save the generated .yml file in the .github/ISSUE_TEMPLATE/ directory in your repository. If the directory does not exist, create it. GitHub reads every .yml file from this directory and presents them as options when someone opens a new issue.

What is the GitHub Issue Forms syntax?

An issue form is a YAML file with top-level keys for name, description, title, labels, and assignees, plus a body array. Each item in body has a type (markdown, textarea, input, dropdown, or checkboxes), an optional id, an attributes block, and an optional validations block such as required: true.

How do I add form elements beyond text fields?

The generator emits a required textarea for each field. To use a dropdown, checkboxes, or a single-line input, download the file and change the type value, then add the matching attributes such as options for a dropdown. GitHub validates the structure when the template is used.

What do the presets include?

The Bug Report preset uses the label bug and fields for description, reproduction steps, expected behaviour, actual behaviour, and environment. The Feature Request preset uses the label enhancement and fields for the problem statement, proposed solution, alternatives, and additional context. Custom starts with two generic fields and no label.

Why is every generated field required?

The generator marks each textarea with validations: required: true so reporters cannot submit the form with blank answers. You can relax this per field by setting required to false after downloading the file.

How are field ids generated?

Each field label is lowercased, runs of non-alphanumeric characters are replaced with underscores, and leading or trailing underscores are trimmed. So "Steps to Reproduce" becomes steps_to_reproduce, which GitHub uses as the identifier for that answer.

Can I have several templates at once?

Yes. Place multiple .yml files in the same directory — for example bug-report.yml and feature-request.yml — and GitHub will show a chooser listing all of them. Each file keeps its own name, description, and labels.

Is my data stored?

No. Everything runs entirely in your browser. Your template text is never sent to any server.