Introducing: cursewords, a crossword puzzle solving interface for the terminal

I’m releasing new software today for solving crossword puzzles in the terminal. cursewords is a small Python program to open, navigate, and solve puzzles stored as .puz files. If you’re a Mac or Linux user, you can install it today by running pip3 install --user cursewords in your terminal, and then use the cursewords command to open a .puz file on your computer.

In case you’re not a crossword nerd: the .puz file was developed for popular solving software called AcrossLite, and it remains the most popular format for transmitting crosswords online, from independent creators all the way up to the New York Times.

cursewords in action on my terminal

In fact, many independent puzzle creators only distribute their puzzles as digital files. For example, I subscribe to a handful of excellent puzzle outlets—American Values Club, The Inkubator, Crossword Nation, Fireball Crosswords—that don’t offer an online solver or an app like the Times does. As a Linux user, I didn’t have a lot of options to open them: AcrossLite isn’t compatible, Web-based solutions have their limitations, and beyond that, I wanted to be able to introduce fun features like a “downs only” mode that hides the across clues. (You can try it: running cursewordswith the --downs-only flag activates this very challenging mode.)

But also, I liked the challenge of writing my own software as a way of thinking more about how crosswords are built and how we hold them in our head for navigation. I also love the retro-computing aesthetic that comes with terminal applications, and—while I think this is the first ever terminal crossword client—that it’s mostly based on tech that has remained unchanged for decades. In that way I’ve likened it to efforts to, say, imagine what a car built with first-century technology would look like: it’s not necessarily the most useful or the best, but it’s instructive (and in my case, actually works)!

As the name may suggest, cursewords relies on a famed programming library called curses that helps to build text-based user interfaces. It is also heavily indebted to a curses wrapper called blessed, and a library called puz that reads and writes .puz files.

If you’re interested in cursewords, please give it a try and let me know how it works for you. I’ve been very interested in how to solve this problem for over a month now and I am excited to talk about it more publicly.