Open-source project
TapXWorld/ChinaTextbook avatar
TapXWorld/ChinaTextbook

ChinaTextbook's only merge tool is a Windows binary, and its README indexes mathematics only

GitHub describes it as 所有小初高、大学PDF教材。. The repository metadata lists Roff as its primary language. This article stays within the project description and details documented in the GitHub repository README.

82,433 stars18,700 forksRoffLicense varies

At a glance

What is it?
Chinese primary, junior secondary, senior secondary and university textbooks stored as PDFs, gathered because the author says ordinary people still have limited routes to free material and that watermarked copies get sold. What the README indexes is mathematics. What the tree holds is a whole curriculum, split into two schooling systems.
Who is it for?
Use this repository if you are looking for a specific Chinese-language textbook and you can browse a directory tree, because that is the only way to find one. Three things to know before you rely on it.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Activity is slowing. The repository last received commits 11 months ago.
What is it written in?
Mainly Roff, 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

Files over 50MB are stored as .pdf.1 and .pdf.2, and the extension is no longer .pdf

The reason a download from this repository is sometimes several files is GitHub's own upload limits, and the README states them: a single upload over 100MB is rejected, an upload over 50MB produces a warning, and so anything larger than 50MB is stored as multiple pieces of about 35MB each.

The naming keeps the original title and appends a numeric suffix. The example given is a first-grade primary mathematics volume:

sh
义务教育教科书 · 数学一年级上册.pdf.1
义务教育教科书 · 数学一年级上册.pdf.2

Two consequences follow, and both bite quietly. The file no longer ends in .pdf, so a viewer, a browser or a script that selects by extension will not pick it up, and some of them will not recognise the file at all. And a reader who downloads the first piece and stops gets a truncated book with no error message, because a partial PDF is still a valid file until the last page.

So the practical habit is to check whether a filename ends in a number before you assume you have the whole thing, and to count the parts before you open it.

The merge tool is one Windows binary, and other systems are said to work the same way

The README gives a three-step procedure, and the program it names is mergePDFs-windows-amd64.exe. Download it into the folder that contains the split PDFs. Make sure the executable and the split files are in the same directory. Double-click it and the merging completes automatically.

Read the name carefully, because it carries two constraints. It is a Windows build, and it is an amd64 build. The README adds a parenthetical that other operating systems work the same way, and that parenthetical is about the procedure, not about a supplied file: the three steps are a download, a shared directory and a run, and no equivalent binary for macOS, Linux or Windows on ARM is named anywhere in the repository.

That is the gap worth planning around. A parent on an Apple Silicon Mac, a student on a Linux laptop, or anyone on an ARM Windows machine has three documented steps and no program to perform step three. You reassemble the parts with a tool of your own, or you concatenate the raw bytes in order, and neither route is described in the repository.

The step-two requirement is also easy to get wrong. The executable has to sit in the same directory as the split files, not on the desktop and not in a downloads folder, and nothing in the program name or the README's phrasing tells you that before you try it.

Senior secondary maths is one directory link labelled a table of contents

The mathematics sections run primary, junior secondary, senior secondary and university, and the link types are not consistent across them.

The primary and junior secondary entries are direct file links. Twelve primary volumes, grade 1 first term through grade 6 second term, each pointing at a blob URL for a PDF inside 小学/数学/人教版/. Six junior secondary volumes, 初一 through 初三 with an upper and lower term each, pointing into 初中/数学/人教版-人民教育出版社/.

Senior secondary mathematics has exactly one entry, and it is labelled 目录, a table of contents, and it points at a tree URL for a directory rather than a file. The directory name carries the edition and the editors, so you at least learn which printing you are browsing. But you get a listing, not a book, and this is the only level in the README where you cannot reach a specific PDF from the page.

University mathematics goes one level deeper for one subject: 高等数学 resolves to 同济大学高等数学第七版, the seventh edition of the Tongji University higher mathematics text, while 线性代数, 离散数学 and 概率论 point at plain subject directories. So for university maths you get a directory for three subjects and a versioned subdirectory for the fourth, and a separate link out to an external university mathematics site for anything more.

Two schooling systems sit at the top level and only one of them appears in the README

The top-level listing is short, and two of its entries are pairs:

小学/ and 小学(五•四学制)/, primary school under the usual six-year system and under the five-four system. 初中/ and 初中(五•四学制)/, junior secondary the same way. Alongside them sit 高中/, 大学/, a .cache/ directory and one more whose name is a sentence rather than a category: 学数学最重要的刷习题在这里/, which reads as a claim about where the most useful maths drill exercises are.

The five-four system is a genuine parallel curriculum, not a variant folder. A family on the five-year primary and four-year junior secondary split has two complete directory trees available, and the README has no section for either of them. Every mathematics link in the README points into the six-three directories.

The consequence is that the README is not an index of the repository, and the folder named after a sentence is untranslatable and awkward to search for. Both are reasons to navigate the tree rather than the page: pick your system from the directory name first, then the subject, then the volume. The .cache/ directory at the root is the third oddity, a build or fetch artefact sitting next to the content.

There is no licence file, so the stated plan to open-source is not yet a grant

The README explains why the project exists, and the explanation is about access. Domestic education websites already provide free resources, it says, but most ordinary people's routes to that information remain limited, and some people profit from the gap by selling the same material with a private watermark on it. The plan is to gather the resources and open-source them, to promote universal compulsory education and remove regional educational poverty. The reason given as most important is that overseas Chinese families should be able to have their children keep learning about education in China.

That is a clear statement of intent. It is not a licence.

The top-level entries contain no LICENSE file, and the repository's licence field records as unknown. So for anyone planning to mirror these files, redistribute them in a school, or build on them, there is no stated permission anywhere in the repository. The intent sentence describes what the author plans to do; it does not tell you what you may do today.

The practical step is to ask rather than assume, and to treat any copy you already hold as unlicensed until the maintainer says otherwise. This is an observation about what the repository contains, not a legal opinion about what the law would allow.

Every link points at master, so a textbook URL is a moving target

Look at the shape of the links. The primary volume link resolves to a blob URL containing master, and so do the junior secondary volumes, the senior secondary directory, and every university subject. There is no commit hash anywhere in the README, and the repository has no GitHub releases, so there is no tag to point at instead.

A blob URL on a branch name is a promise about the future, not a citation. If a file is replaced, the same URL serves different bytes. If a file is renamed, the URL 404s. Both are ordinary operations on a repository that anyone can push to, and neither changes the README.

The consequence matters more here than it would for a code project, because a textbook has an edition. When a publisher prints a revision, the content at the same path changes and the old one becomes reachable only through history. If you are citing a textbook, or building a lesson plan against one, pin the commit hash at the point you read it and record the printing the filename gives you, which is where the 人教版 and 人民教育出版社 markers in the paths do their work.

The last push to master was on 2025-10-18, and the repository is not archived, so the material is still there. Nothing in the repository tells you how current any given volume is.

Every subject section in the README is mathematics, and the tree holds the whole curriculum

Count the subject headings in the README: 小学数学, 初中数学, 高中数学, 大学数学. Four sections, all of them mathematics. The merge-instructions section is the only other content.

The top-level directories, though, are named by school level rather than by subject: 小学, 初中, 高中, 大学. A directory named for a level holds every subject taught at that level, so the material for Chinese language, reading comprehension, English and everything else is present in the tree and simply not linked from the page.

That is the sharpest limit here, and it is worth stating plainly. A parent looking for a primary-school Chinese-language reader opens the README, finds a mathematics index, and has no way to learn from that page that the reader exists. The repository is organised so that browsing is the only way to discover it, and the directory names are in Chinese, which adds a second barrier for the overseas families the README names as the most important audience.

The README is written in Chinese with no English version and no per-subject index. Navigate by directory, and expect to browse.

Editorial conclusion

Use this repository if you are looking for a specific Chinese-language textbook and you can browse a directory tree, because that is the only way to find one. Three things to know before you rely on it. Files over 50MB are stored in 35MB pieces, so a download is often several parts that must be joined before they open as one document, and the only merge binary named is mergePDFs-windows-amd64.exe. Every link in the README points at master rather than at a commit, and there are no releases, so pin a commit hash if you need to cite a specific edition. And there is no licence file among the top-level entries, so ask the maintainer before you redistribute anything. The last push to master was on 2025-10-18.

Frequently asked questions

Why are some PDF files in ChinaTextbook split into several parts?

GitHub rejects a single upload over 100MB and warns above 50MB, so anything larger than 50MB is stored in pieces of about 35MB. The name keeps the original title with a numeric suffix, for example 义务教育教科书 · 数学一年级上册.pdf.1 and .pdf.2, and the parts have to be joined before the book opens as one document.

How do I merge a split ChinaTextbook PDF on macOS or Linux?

The README's three steps name a single program, mergePDFs-windows-amd64.exe, which you download into the folder holding the split files and then double-click. It says other operating systems work the same way, but no binary for another platform is named in the repository.

Does ChinaTextbook have a licence?

There is no licence file among the top-level entries of the repository, and the README's statement is a plan to gather and open-source the material rather than a grant of permission. If you intend to mirror or redistribute the files, ask the maintainer instead of assuming a licence applies.

Official sources

  1. Official README
  2. Project repository