Free Programming Books: what the books/ directory does not guarantee
GitHub describes it as :books: Freely available programming books. The repository metadata lists Python as its primary language. The metadata lists the CC-BY-4.0 license. This article stays within the project description and details documented in the GitHub repository README.
At a glance
- What is it?
- Free Programming Books is a CC-BY-4.0 set of Markdown files listing freely available programming books, administered by the Free Ebook Foundation. Read it as a pointer list rather than a catalog: no link checking, no difficulty ratings, no packaged release.
- Who is it for?
- Adopt it as a discovery index when you want a broad pointer list and are willing to open each title yourself. Skip it if you need a curriculum with a level marker, or a release stream you can depend on.
- Can I use it commercially?
- Yes, with credit. CC-BY-4.0 allows commercial use as long as you credit the authors and indicate what you changed. It is written for creative content, so check how it applies to any code.
- Is it still maintained?
- Yes. The repository last received commits 6 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
No install step exists, so your first use is a file read
There is nothing to install. The project publishes no package, no container image, and no release: the repository has no GitHub releases, so there is not even a version string to depend on. What it publishes is a set of Markdown files under books/, which you either read in a browser at https://ebookfoundation.github.io/free-programming-books/ or clone and treat as plain text. A first useful run is therefore a file read. Open books/free-programming-books-langs.md and you have every English title grouped by the language it teaches; books/free-programming-books-subjects.md holds the same corpus grouped by subject. What you cannot do is query the list from a terminal, because no command line interface is documented anywhere in the repository, and you cannot install a pinned snapshot, because nothing is published to install. Any tooling you build on top has to parse Markdown itself.
Two English indexes, and no documented rule linking them
English is indexed twice, and the relationship between the two files is left undefined. books/free-programming-books-langs.md groups titles by programming language, books/free-programming-books-subjects.md groups them by subject, and both are hand maintained Markdown sitting side by side in books/. The repository does not document whether a title listed in one file is also required to appear in the other, and it names no single entry point that keeps them consistent. A scripts/ directory exists at the top level, but nothing in the documentation says what lives in it or whether anything there regenerates either index. For a reader this fails quietly: a book can be corrected in the subject index and stay stale in the language index, and no file in the repository records that the two disagree.
The search page is one text field and a submit button
The hosted search is a single free text field, and that is the entire interface. The README embeds the form, so the mechanism is documented in full: it posts to the search site at https://ebookfoundation.github.io/free-programming-books-search/ with one text input named search, the placeholder Search Book or Author, and a submit control. There is no language selector, no subject selector, no difficulty filter, and no edition or year filter, so a query for a beginner title and a query for a specialist one return the same kind of result page. No documentation says what the index covers, how results are ordered, or whether a result set corresponds to a particular commit of the Markdown files. Treat the output as a shortlist and open the book itself before you plan anything around it.
CC-BY-4.0 covers the list, and says nothing about the linked books
The license stops at the curation work. The repository is published under CC-BY-4.0, and the README links the matching Creative Commons badge. That covers the Markdown files, the site, and the translations. It says nothing about any of the books the entries point to, and no per entry license, edition, or file format is stated beside a link. Nothing in the repository records when a link was last checked, whether a download still resolves, or whether a publisher changed terms, and no automated link check is described anywhere. The failure mode is specific rather than general: a title that was freely available when it was added can later become a paid edition or a dead URL, and the list keeps showing it. A missing required set of fields per entry means you should not count on the format being stated either, so a PDF expectation and an EPUB expectation can both be wrong.
Per language files carry no coverage contract and no named maintainer
Coverage in other languages is left to whoever turns up. The README indexes more than forty files under books/: Arabic, Azerbaijani, Bengali, Bulgarian, Burmese, Chinese, Czech, Catalan, Danish, Dutch, Estonian, Finnish, French, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Latvian, Malayalam, Norwegian, Persian, Polish, Portuguese for Brazil, Portuguese for Portugal, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swedish, Tamil, Telugu, Thai, Turkish, and Ukrainian before the list is cut off. Two details show how loosely this is organised. Portuguese is split across pt_BR.md and pt_PT.md, and Persian sits in fa_IR.md, a locale specific name, next to plain codes such as ja.md and ru.md. No maintainer is named per language, and no minimum coverage is defined, so a reader cannot tell from a file name whether it tracks the English indexes or holds a fraction of them, nor when it was last synced.
Nothing lands without a human reading the pull request
Entries arrive by review, and that is where the time goes. The README points contributors at docs/CONTRIBUTING.md, at docs/HOWTO.md for people new to GitHub, and at docs/CODE_OF_CONDUCT.md, with translations of the code of conduct linked as well. Two issue labels, good first issue and help wanted, mark the open work, and the pull request surface is a linked filter on merged pull requests by month. For a reader, the useful consequence is that nothing is listed until a maintainer accepted it, so unreviewed material stays out and the list carries those maintainers' judgement about what belongs. The same gate applies in reverse, because no recheck or expiry step is described. A title that stops being usable remains visible until somebody files the issue.
Last push on 2026-09-24, no releases, and an undocumented site build
The maintenance picture is checkable. The repository is not archived and the last push was on 2026-09-24, so the list is being edited now, with no release to wait for. A merged pull request is the unit of change: there is no changelog, no version file, and no migration step in the tree, because the only things that have to keep working are the Markdown and the site. The site is assembled from _config.yml and _includes/ at the top level, alongside .editorconfig, .github/, docs/, favicon.ico, and the books/, casts/, courses/, and more/ directories, and no build steps or required tool version are documented for any of it. The language breakdown lists Python as primary, which points at the scripts/ tooling rather than at the content, since the list itself is Markdown. So watch the main branch, and vendor a commit hash if a colleague needs the same snapshot later. The Free Ebook Foundation, a not for profit devoted to promoting the creation, distribution, archiving, and sustainability of free ebooks, administers the repository, and donations to it are tax deductible in the US.
The Stack Overflow original is still readable, and it stopped in 2014
This list began as a copy of the Stack Overflow question List of Freely Available Programming Books, and the README links a 2014 archive of that question. Karan Bhangui and George Stocker contributed to it, and Victor Felder moved it to GitHub so it could be updated collaboratively. The difference in approach between the two is the reason the fork exists. The Stack Overflow page is one long answer thread that stopped changing, and all it offers is reading. The repository is Markdown on a branch, with per language files, a hosted site, a search site, and an issue tracker, so an edit arrives as a diff naming the exact line that changed, and a title can be updated in place instead of being appended to a frozen post. If you want to skim a single page, the archive answers that. If you want to track editions, grep the corpus, or get a correction merged, only the repository does it.
Editorial conclusion
Adopt it as a discovery index when you want a broad pointer list and are willing to open each title yourself. Skip it if you need a curriculum with a level marker, or a release stream you can depend on. Before you send a reader or a study plan to an entry, check that book's own page for the current edition, the file format, and its license, because CC-BY-4.0 covers this list and not the books it links to.
Frequently asked questions
What are some free books on programming?
The English titles live in two Markdown files: books/free-programming-books-langs.md groups them by programming language and books/free-programming-books-subjects.md groups them by subject. Other languages have their own files under books/, such as the Chinese, Japanese, German and Russian lists.
What are the best programming books for beginners?
Nothing in the list marks a title as beginner material, and the search form has no difficulty filter, so there is no beginner view to open. The practical route is books/free-programming-books-langs.md for a language you are starting from, then reading the entries to see which one fits.
What is the best way to learn programming for free?
The repository is a pointer list rather than a curriculum: it does not order the books or prescribe a path, and no documentation defines a sequence through them. Browsing happens at https://ebookfoundation.github.io/free-programming-books/, with a separate search site, and the top level also holds courses/, casts/ and more/ directories for resources that are not books.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ebookfoundation-free-programming-books)