# Accepted Resource Types in the Free Programming Books Repository: A Complete Guide

> Explore accepted resource types in the free programming books repository including books courses cheat sheets and more. Find the best free learning materials.

- Repository: [Free Ebook Foundation/free-programming-books](https://github.com/EbookFoundation/free-programming-books)
- Tags: documentation
- Published: 2026-02-23

---

**The Free Programming Books repository accepts seven distinct resource types—Books, Cheat Sheets, Free Online Courses, Interactive Programming Resources, Problem Sets and Competitive Programming, Podcasts and Screencasts, and Programming Playgrounds—each organized in dedicated directories with specific formatting requirements.**

The EbookFoundation/free-programming-books repository is a curated collection of freely available learning materials for programmers. Understanding the accepted resource types is essential for contributors who want to add new content that meets the project's organizational standards. Each resource type is defined in the main [`README.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/README.md) and stored in specific directories with consistent formatting rules.

## Overview of Accepted Resource Types

The repository maintains seven primary categories of learning resources. These categories are explicitly listed in the [`README.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/README.md) file and each has dedicated storage locations and formatting conventions.

- **Books**: Comprehensive texts covering programming languages, frameworks, and computer science concepts, organized by language and subject.
- **Cheat Sheets**: Quick-reference guides summarizing syntax, commands, or concepts for rapid lookup.
- **Free Online Courses**: Structured video or text-based courses from universities, platforms, or individual instructors.
- **Interactive Programming Resources**: Browser-based tutorials and sandboxes allowing immediate code execution and experimentation.
- **Problem Sets and Competitive Programming**: Collections of coding challenges, algorithmic problems, and contest preparation materials.
- **Podcasts and Screencasts**: Audio and video content discussing programming topics, interviews, and tutorials.
- **Programming Playgrounds**: Online environments and REPLs for testing code snippets without local setup.

## Where Resource Types Are Defined

Resource categories are formally defined in the repository's central index. The [`README.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/README.md) file serves as the canonical reference, containing anchored sections for each resource type that link to their respective storage locations.

The physical organization follows a directory-based structure:

- **`books/`** — Contains language-specific and subject-specific book lists
- **`courses/`** — Houses free online course collections organized by language
- **`more/`** — Stores cheat sheets, interactive tutorials, problem sets, and playgrounds
- **`casts/`** — Dedicated to podcasts and screencasts

## How to Contribute to Each Resource Type

Each resource type requires specific formatting and file placement. The following sections detail the exact markdown syntax and target files for contributions.

### Adding Books

Books are stored in the `books/` directory. English books are split between language-specific files ([`free-programming-books-langs.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/free-programming-books-langs.md)) and subject-specific files ([`free-programming-books-subjects.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/free-programming-books-subjects.md)).

Example entry for [`books/free-programming-books-subjects.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/books/free-programming-books-subjects.md):

```markdown
- **[Eloquent JavaScript, 3rd Edition](https://eloquentjavascript.net/)** – *Marijn Haverbeke*  
  *A modern introduction to JavaScript with interactive examples.*

```

### Adding Cheat Sheets

Cheat sheets reside in [`more/free-programming-cheatsheets.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/more/free-programming-cheatsheets.md). These entries follow a simplified format without author attribution.

Example entry:

```markdown
- **[Git Cheat Sheet (PDF)](https://github.com/git/git/blob/master/Documentation/technical/pack-heuristics.txt)** – A concise reference for common Git commands.

```

### Adding Free Online Courses

Courses are organized in the `courses/` directory by language. The main English file is [`courses/free-courses-en.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/courses/free-courses-en.md).

Example entry:

```markdown
- **[CS50’s Introduction to Computer Science 2024](https://cs50.harvard.edu/x/2024/)** – Harvard / edX – Full introductory course covering algorithms, data structures, web development, and more.

```

### Adding Interactive Programming Resources

Interactive tutorials are stored in [`more/free-programming-interactive-tutorials-en.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/more/free-programming-interactive-tutorials-en.md). These entries emphasize browser-based execution capabilities.

Example entry:

```markdown
- **[JavaScript30 – 30 Day Vanilla JS Challenge](https://javascript30.com/)** – Interactive, no‑build‑tools required. Each day provides a small project you can run directly in the browser.

```

### Adding Problem Sets and Competitive Programming

Problem sets are cataloged in [`more/problem-sets-competitive-programming.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/more/problem-sets-competitive-programming.md). These resources focus on algorithmic challenges and contest preparation.

Example entry:

```markdown
- **[Project Euler – Problem Set](https://projecteuler.net/)** – A collection of mathematical/computer‑science challenges designed to be solved with programming.

```

### Adding Podcasts and Screencasts

Audio and video content is stored in [`casts/free-podcasts-screencasts-en.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/casts/free-podcasts-screencasts-en.md). Entries typically include episode information or series descriptions.

Example entry:

```markdown
- **[CodeNewbie Podcast – Episode 150: Learning in Public](https://www.codenewbie.org/podcast/episode-150)** – Discussions on learning strategies for programmers.

```

### Adding Programming Playgrounds

Playgrounds and online REPLs are documented in [`more/free-programming-playgrounds.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/more/free-programming-playgrounds.md). These entries highlight immediate execution environments.

Example entry:

```markdown
- **[Python Tutor – Visualize Code Execution](https://pythontutor.com/visualize.html)** – Interactive step‑by‑step execution visualizer for Python.

```

## Key Files and Directory Structure

Understanding the repository layout is crucial for proper contribution placement. The following files define and enforce the accepted resource types:

- **[`README.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/README.md)** — Central index located in the repository root that enumerates all accepted resource categories and provides navigation links to specific sections.

- **`books/`** — Directory containing curated book lists separated by programming language ([`free-programming-books-langs.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/free-programming-books-langs.md)) and subject matter ([`free-programming-books-subjects.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/free-programming-books-subjects.md)).

- **`courses/`** — Directory housing free online course collections organized by human language (e.g., [`free-courses-en.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/free-courses-en.md) for English).

- **`more/`** — Directory storing auxiliary resource types including cheat sheets, interactive tutorials, problem sets, and programming playgrounds.

- **`casts/`** — Directory dedicated to audio and video content such as podcasts and screencasts.

- **[`docs/CONTRIBUTING.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/docs/CONTRIBUTING.md)** — Contribution guidelines that specify formatting requirements and validation rules for each resource type.

## Summary

The Free Programming Books repository maintains a strict taxonomy of accepted resource types to ensure consistent organization and discoverability. Key takeaways include:

- **Seven primary categories** are accepted: Books, Cheat Sheets, Free Online Courses, Interactive Programming Resources, Problem Sets and Competitive Programming, Podcasts and Screencasts, and Programming Playgrounds.
- **Directory-based organization** places each type in specific locations: `books/`, `courses/`, `more/`, and `casts/`.
- **Standardized markdown formatting** is required for each entry, with specific conventions for author attribution, platform identification, and descriptive text.
- **Canonical definitions** reside in [`README.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/README.md), while detailed contribution rules are documented in [`docs/CONTRIBUTING.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/docs/CONTRIBUTING.md).

## Frequently Asked Questions

### What types of resources can I contribute to the Free Programming Books repository?

The repository accepts seven distinct resource types: Books, Cheat Sheets, Free Online Courses, Interactive Programming Resources, Problem Sets and Competitive Programming, Podcasts and Screencasts, and Programming Playgrounds. Each type has specific formatting requirements and must be placed in its designated directory according to the guidelines in [`docs/CONTRIBUTING.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/docs/CONTRIBUTING.md).

### Where should I place a new book contribution in the repository?

Books belong in the `books/` directory. English-language books are split between language-specific files ([`free-programming-books-langs.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/free-programming-books-langs.md)) and subject-specific files ([`free-programming-books-subjects.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/free-programming-books-subjects.md)). Non-English books are organized by language code in separate files within the same directory, following the naming convention `free-programming-books-{language-code}.md`.

### Are video tutorials accepted as courses or podcasts?

Video tutorials fall under **Free Online Courses** if they represent structured, curriculum-based learning materials. They should be added to the appropriate `courses/free-courses-{lang}.md` file. Informal video discussions or interview-style content belongs in **Podcasts and Screencasts** under the `casts/` directory, specifically in files like [`casts/free-podcasts-screencasts-en.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/casts/free-podcasts-screencasts-en.md).

### How do I format a cheat sheet entry differently from a book entry?

Cheat sheet entries in [`more/free-programming-cheatsheets.md`](https://github.com/EbookFoundation/free-programming-books/blob/main/more/free-programming-cheatsheets.md) follow a simplified format without author attribution: `- **[Title](URL)** – Description`. Book entries require author attribution in italics after the title and typically include a brief descriptive paragraph. Cheat sheets are concise references, while books are comprehensive texts requiring more detailed bibliographic information.