Relive the great adventure… this time in the terminal realm!
- Progress Quest site: http://progressquest.com/
- Online version: http://progressquest.com/play/
- Original version: https://bitbucket.org/grumdrig/pq
Features
- Faithful port of the game logic
- Saves (with backups) to
$XDG_CONFIG_HOME/pqcli/save.dat - Terminal interface that comes in 2 flavors:
- Rich and colorful (
--curses, default) - Minimal, suitable for raw grind (
--basic)
- Rich and colorful (
- Ideal to run on your server
How it looks like
Curses interface:
Basic interface:
How to install
If you have Python 3.10 or newer, just run pip install --user pqcli and you're good to go!
Then type pqcli to run the game.
In case if you want to use the git version, the process is just a bit more complex:
$ git clone https://github.com/rr-/pq-cli.git
$ cd pq-cli
$ pip install --user .
Docker / Docker Compose
The repository includes a Dockerfile and docker-compose.yml that run the
game with --basic and keep save data in a persistent named volume.
There is no registry pipeline required for this setup: build locally, then run with Compose.
# Build image locally from the Dockerfile
docker compose build
# First run (interactive): create your character in the shared save volume
docker compose run --rm pqcli-init
# Later runs on a server (detached, default save slot 1):
docker compose up -d pqcli
# List existing saves in the same volume:
docker compose run --rm pqcli-init pqcli --basic --list-saves
# Change detached slot if needed (example: slot 2):
PQCLI_SAVE_SLOT=2 docker compose up -d pqcli
# Follow logs / stop detached container:
docker compose logs -f pqcli
docker compose stop pqcli
On first run, if no save data exists in the mounted volume, pqcli will
automatically launch an interactive character-creation bootstrap in CLI mode
before starting the normal interface.
For server usage, run first-time setup without a forced slot (pqcli-init),
then run the long-lived detached service (pqcli) that loads slot 1 by
default.
Customizing the adventure
All word lists (monsters, spells, equipment, races, classes, titles and so on) live in JSON files. To change them, copy the built-in files somewhere and edit them:
$ pqcli --dump-data ~/.config/pqcli/data
On startup, pqcli reads $XDG_CONFIG_HOME/pqcli/data/ (or the directory
given with --data-dir DIR). Each NAME.json there replaces the built-in
list of the same name. Files you leave out fall back to the built-in lists,
so you can delete the copies you don't change. If a file is malformed, pqcli
prints what is wrong and refuses to start.
The available files are spells, offense_attrib, defense_attrib,
offense_bad, defense_bad, shields, armors, weapons, specials,
item_attrib, item_ofs, boring_items, monsters, races, classes,
titles, impressive_titles and combat_verbs.
For example, to vary the combat descriptions, create combat_verbs.json.
{target} is replaced with the enemy:
[
"Executing {target}",
"In a fierce battle to thwart {target}",
"Fighting bravely against {target}",
"Kicking the butt of {target}"
]
A few things to keep in mind:
- Order matters in
spells.json: spells are learned roughly from the top down, so keep weaker spells first. - Titles near the top of
titles.jsonshow up more often. - Stats in
races.jsonandclasses.jsonare written asSTR,CON,DEX,INT,WIS,CHA,HP MaxorMP Max. - Existing characters keep their race and class even if you remove them from the lists.
Moving characters to and from the web version
pqcli reads and writes the .pqw files that the
web version's roster page saves and
loads. A character keeps its random number generator state either way, so
it carries on exactly as it would have where it came from.
-
In either interface, pick Import or Export from the main menu.
-
From the command line:
$ pqcli --import-save Grumdrig.pqw $ pqcli --list-saves 1. Grumdrig $ pqcli --export-save 1 Grumdrig.pqw
Export never overwrites an existing file. pqcli plays offline only, so online realm, guild and motto settings are dropped on import, with a warning.
Contributing
# Clone the repository:
git clone https://github.com/rr-/pq-cli.git
cd pq-cli
# Install to a local venv:
uv sync
# Install the git hooks (formatting, linting, commit messages):
uv run prek install
# Run the game and the tests:
just run
just test
This project uses uv for packaging.
Install instructions are available at uv#installation.
The justfile needs just; without it, use
uv run pqcli and uv run pytest.
Troubleshooting
_curses.error: init_pair() returned ERR
If running on Linux and you get the error _curses.error: init_pair() returned ERR,
try making sure that your $TERM variable is set to a value which supports
256 colors, such as via the following:
TERM=xterm-256color pqcli
Metadata
Release files for pqcli 1.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 | |
|---|---|---|---|---|
| pqcli-1.1.0.tar.gz | 278.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pqcli-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 346.0 kB
Release files / pqcli-1.1.0.tar.gz
| Download URL | pqcli-1.1.0.tar.gz |
|---|---|
| Size | 278.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
57b9bc341d981d6e8edd5dd8eeca8e66705a923ddae9322de0131f761ab952ae
|
|
BLAKE2b-256 checksum How to use checksums |
b3b79bc4cd659f957191bde93feab00df4a85f2ece6e4754e3e3211e8b9e555d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / pqcli-1.1.0-py3-none-any.whl
| Download URL | pqcli-1.1.0-py3-none-any.whl |
|---|---|
| Size | 67.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
75d7ce65ebdf25d6cd801bc1aceaf3774d42fc9d5f183e56cde567d06610c079
|
|
BLAKE2b-256 checksum How to use checksums |
bdca7889e3701c36b2e7052b950de246ba9e7ca71fbabfcc5de8cd8af818affe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Security for pqcli 1.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.