thing-explainer
Explain anything using only the ten hundred most common English words, the way Randall Munroe's Thing Explainer book and the Up Goer Five comic do. This project provides a lightweight function for the 1,000-word limit with enforcing loops. A checker reads the text and refuses to pass it until every single word is on the allowed list.
Three options for using it: a thing-explainer command line tool, an importable
Python library, and a Claude Code skill.
Install
pip install thing-explainer
Try it
echo "The engine converts fuel into motion." | thing-explainer
FAIL L1:C12 'converts' | The engine converts fuel into motion.
FAIL L1:C21 'fuel' | The engine converts fuel into motion.
FAIL L1:C31 'motion' | The engine converts fuel into motion.
3 banned word(s) to fix, 0 warning(s) (likely names).
FIX: converts, fuel, motion
(Note that engine passes: it really is one of the ten hundred. The list is
Munroe's actual one, not a guess.)
Use it as a library
from thing_explainer import check
issues = check("The molecule moves.")
fails = [i for i in issues if i["kind"] == "FAIL"]
if fails:
print("banned:", ", ".join(i["word"] for i in fails))
Each issue is a dict: {"kind", "word", "line", "col", "context"}, where
kind is FAIL (banned word) or WARN (likely a name). Pass your own word set
as the second argument to check against a different vocabulary.
The workflow is a loop: draft → check → fix only the flagged words → repeat
until the checker prints PASS and exits 0. You are not allowed to call it
done until the script says so.
How the rule is enforced
- Every word must appear in
wordlist.txt(~3,600 surface forms: the ~1,000 base words plus their plurals and-ing/-ed/-erendings). - FAIL: a banned word. Must be rewritten.
- WARN: a capitalised word mid-sentence that isn't on the list. Treated as a likely name or place (Jupiter, Anna) and allowed, but surfaced for review.
- Exit code is
1if it fails,0if clean. So you can drop it into a loop or a CI gate.
Examples
All three pass the checker; every word is verified against Munroe's list.
A flying machine (a plane; "plane" itself is banned!) A flying machine is a big metal bird that carries people through the sky. It has long flat arms on each side. When it runs fast along the ground, air rushes over those arms and pushes the whole thing up. Once it is high up, it keeps going fast so it does not drop. At the front, spinning parts pull it along. To come down, it slows and points its nose at the ground a little until its feet touch and roll to a stop.
A computer A computer is a box that does what you tell it, very fast. Inside is a tiny part that thinks by doing lots of small bits of adding, one after another, faster than you could ever count. It keeps things it needs to remember in another part, like a wall of little boxes. When you press keys or move your hand, the box reads that and changes what you see on the light screen. It only knows two things, on and off, but by putting many of those together it can show words, sounds, and moving pictures.
Rain Rain starts in the big water below. When the sun warms it, some of the water turns into a thing you can not see and goes up into the sky. Up high it is cold, so all those bits come together and turn back into tiny drops. Lots and lots of drops make the grey clouds you see. When the drops get too big and heavy to stay up, they fall back down on us as rain.
Files
| File | What it is |
|---|---|
src/thing_explainer/checker.py |
The checker. Run it; trust its exit code. |
src/thing_explainer/wordlist.txt |
The allowed words. Source of truth. Don't hand-edit. |
src/thing_explainer/words.js |
Raw upstream list from xkcd.com/simplewriter (provenance). |
src/thing_explainer/build_wordlist.py |
Rebuilds wordlist.txt from words.js if upstream changes. |
tests/test_checker.py |
The test suite locking in every enforcement behaviour. |
SKILL.md |
Claude Code skill: the draft → check → fix loop. |
pip install -e ".[dev]"
python -m pytest # the full suite
Credit & thanks
Everything good about this idea belongs to Randall Munroe: cartoonist behind xkcd, former NASA roboticist.
- Up Goer Five (xkcd #1133, 2012): the blueprint of the Saturn V rocket, labelled using only the ten hundred most used words. "The only flying space car we sent to another world" and all.
- Thing Explainer: Complicated Stuff in Simple Words (Houghton Mifflin Harcourt, 2015). The book that ran with it: the human body, a washing machine, the periodic table (the "pieces everything is made of"), all in the same thousand words.
- Simple Writer: Munroe's own in-browser tool that flags any word outside the list. This project is, more or less, that tool grown a spine: a hard exit code so an automated writing loop can't fib about whether it passed.
If you enjoy this, buy the book. It's beautiful, and it's the real thing.
On the word list: wordlist.txt is built
from words.js, the exact vocabulary shipped with
xkcd's Simple Writer. That list is Munroe's work, not mine, and is included here
only to make the checker runnable; see LICENSE for the provenance
note. The code in this repo is MIT; the word list's terms are Munroe's. Please
keep this credit intact in anything you build on top of it.
Metadata
Release files for thing-explainer 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| thing_explainer-0.1.0.tar.gz | 32.5 kB | Without provenance | Details for thing_explainer-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| thing_explainer-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for thing_explainer-0.1.0-py3-none-any.whl |
Total release size: 61.4 kB
Release files / thing_explainer-0.1.0.tar.gz
| Download URL | thing_explainer-0.1.0.tar.gz |
|---|---|
| Size | 32.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ab08a9a4c94ae46592dab2c0599d8debe2f1e445b19317c8bab3936178629ffd
|
|
BLAKE2b-256 checksum How to use checksums |
9294310db28f35c1a92a62233a4423abea243122883afe4ec899341395aad3e6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Release files / thing_explainer-0.1.0-py3-none-any.whl
| Download URL | thing_explainer-0.1.0-py3-none-any.whl |
|---|---|
| Size | 28.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
12df6012553218a2efdb34969819965c5da264480f673b5e101e2dae70ac9fa9
|
|
BLAKE2b-256 checksum How to use checksums |
68aed343664960b25ffde580004d867858434e16316773c7c2c411cd1c694104
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Security for thing-explainer 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.