How to Organize Content into Categories Within an Awesome List: A Complete Guide

Use level-2 headings for main categories, maintain a table of contents under ## Contents, sort items alphabetically, and follow the - [Name](link) – Description format to keep awesome lists navigable and consistent with the sindresorhus/awesome conventions.

The sindresorhus/awesome repository serves as the central index for the "awesome-list" ecosystem—curated collections of resources organized into markdown-based hierarchies. To handle hundreds of entries without overwhelming readers, the project enforces strict structural conventions that every contributor must follow when organizing content into categories. Understanding these patterns ensures your list remains readable, searchable, and compatible with automated linting tools.

Establish a Clear Hierarchical Structure with Headings

Effective categorization starts with a predictable heading hierarchy that mirrors the logical domains of your topic.

Use Level-2 Headings for Main Categories

In readme.md, each primary domain uses a level-2 heading (##) to create a distinct section. For example, the repository uses ## Platforms, ## Programming Languages, and ## Front-End Development as top-level containers. These headings automatically generate anchor links (e.g., #platforms) that enable direct navigation from the table of contents.

According to the source code in readme.md (lines 79-86), this structure provides a clean foundation for the auto-generated TOC and allows readers to jump to specific areas using standard markdown anchors.

Create Level-3 Sub-Headings for Large Categories

When a category grows too large for a single bullet list, introduce level-3 headings (###) to group related items. For instance, under ## Programming Languages, you might find subsections like ### Web Frameworks or ### Mobile SDKs. This prevents unwieldy single-page lists and maintains scannability as the repository scales.

The pattern appears throughout readme.md where deep topics require nested organization, ensuring that even complex categories remain parsable by both humans and linting scripts.

Build a Navigable Table of Contents

Immediately after your introductory text, include a ## Contents section that links to every top-level category. Each entry should follow the format - [Category Name](#category-name) to create clickable navigation.

As implemented in lines 79-100 of readme.md, the TOC lists each major section (e.g., - [Platforms](#platforms)) directly under the contents heading. This convention enables quick orientation and signals the intended hierarchy to new contributors. When referencing categories elsewhere—such as in pull request comments—always use the exact anchor (#platforms) to guarantee stable navigation across different rendering platforms.

Follow the Standard Item Formatting

Consistency in list item syntax allows automated tools to parse your content and helps readers scan efficiently.

Maintain the Required Markdown Syntax

Every resource entry must use this exact pattern:

- [Resource Name](https://example.com) – Short description of the resource.

Key requirements include:

  • A dash (-) followed by a space
  • The resource name in square brackets
  • The URL in parentheses
  • An em-dash (–) or hyphen with space separating the link from the description

As shown in lines 111-114 of readme.md, entries like - [Node.js](https://github.com/sindresorhus/awesome-nodejs#readme) – Async non-blocking... demonstrate this standard formatting that the .github/workflows/repo_linter.sh script validates.

Sort Items Alphabetically

Within each category, order entries by the resource name (case-insensitive). The create-list.md guidelines explicitly require alphabetical ordering to allow readers to locate resources quickly and prevent duplicate entries. The linter enforces this rule automatically during CI checks.

Avoid Duplicate Categories and Maintain Quality

Before adding new headings, search the existing file to confirm the category does not already exist. The repo_linter.sh script in .github/workflows/ automatically checks for duplicate headings and improper markdown syntax, rejecting builds that fragment similar resources across multiple sections.

When proposing new categories, document the rationale in create-list.md and contributing.md. These files outline the naming conventions, review process, and structural requirements that maintain quality across the awesome-list ecosystem.

Summary

  • Use ## for main categories like ## Platforms or ## Programming Languages to generate TOC anchors

  • Create a ## Contents section with markdown links to each top-level category for navigation

  • Format entries as - [Name](link) – Description with consistent spacing and punctuation

  • Sort alphabetically within each category to prevent duplication and improve findability

  • Follow create-list.md guidelines and run the linter script to ensure compliance with community standards

Frequently Asked Questions

What is the proper heading level for main categories in an awesome list?

Main categories must use level-2 headings (## Category Name). This convention appears throughout readme.md (e.g., ## Platforms, ## Programming Languages) and generates the anchor links used in the table of contents. Level-3 headings (###) are reserved for sub-categories within large sections.

How should items be ordered within a category?

Items must be sorted alphabetically by the resource name, ignoring case. The contribution guidelines in create-list.md explicitly require alphabetical ordering, and the .github/workflows/repo_linter.sh script enforces this during continuous integration checks to prevent duplication and improve scannability.

What is the standard markdown format for list items?

Use the pattern - [Resource Name](URL) – Description. This includes a dash followed by a space, the resource name in square brackets, the URL in parentheses, an em-dash (or hyphen with space), and a brief description. This format appears consistently throughout readme.md (lines 111-114) and is validated by the repository's linter.

Where can I find the official guidelines for creating an awesome list?

The canonical guidelines reside in create-list.md (authoring standards and naming conventions) and contributing.md (review process and linting rules). The readme.md file serves as the reference implementation showing the live structure of a maintained awesome list, while .github/workflows/repo_linter.sh contains the automated validation logic that checks for proper categorization and formatting.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →