Quest Bound is a free and open source engine for creating digital tabletop role playing games. This repo contains all of its source code, its open source license and terms of use.
Report Bugs or Request Features
Join our Discord Server to join discussions and troubleshoot issues.
Special thanks to those who have supported Quest Bound's development above and beyond what's been expected of them.
T.L. Bainter
GM Pak
Quest Bound is a web application written entirely in TypeScript, a high level programming language that compiles to JavaScript. You will run two separate applications to use Quest Bound--a server and a client. When both are running, you'll access Quest Bound through a web browser of your choice.
Download the source code as a zip file and unzip it on your computer anywhere you'd like. Even though Quest Bound will be running on your own computer, it is not a native application, so it isn't picky about where its files are located.
Docker
To make it as easy to run as possible, Quest Bound has been encapsulated into a Docker container. Docker is a separate application that will run Quest Bound inside a virtual machine on your computer, relieving you of downloading and installing the several specific runtimes QB requires.
Download Docker Desktop. You will not need a paid account.
Database Client
It is sometimes helpful to view the data in your database through a graphical client. This isn't strictly necessary. You can also run SQL commands through your terminal to execute raw database queries. My favorite client for Postgres is Postico. A great alternative is DB Beaver.
Text Editor
You will only find this useful if you intend to edit Quest Bound's source code. If you do, you likely already have a favorite code editor. Mine is VS Code.
Boostrapping Quest Bound only needs to be done once. After you get it running the first time, you can simply start it.
Install and open Docker Desktop.
Troubleshooting Tips for Docker on Windows
Open your computer's terminal (Terminal on MacOS and Linux, CMD Prompt on Windows).
In your terminal, navigate to wherever you placed the unzipped source code. For example:
cd ~/Documents/quest-bound-main
This command will vary depending on your operating system and where you placed the unzipped source code. In most terminal applications, dragging the folder into the terminal will paste its absolute path.
Once in the top level directory, called quest-bound-main, run the following command:
docker compose up --build
The docker command should have been made available on your machine when you installed Docker Desktop. If it isn't, follow the steps here.
This command will install several Docker images on your machine. Each of them has a critical piece of infrastructure that Quest Bound needs. After those are downloaded, it will build the server and client applications. This should take five to ten minutes total.
When it's finished, you should see four new images listed in Docker Desktop.
- quest-bound-client
- quest-bound-server
- redis/redis-server-stack
- postgres
In your containers list, you should see a new collapsible list of containers called quest-bound. If this parent container is running, go ahead a click the stop button to stop it.
This should clear the running process in your terminal.
Windows machines, especially those running Windows 10 or earlier, need a subsystem called Windows Subsystem for Linux (WSL). When installing Docker, you may run into an error like this:
Read through this thread to update to the latest version of WSL.
Follow this guide to enable virtualization from your computer's BIOS.
It might be helpful to store the quest-bound-main directory with the wsl file structure, instead of the usual C:\\ path. For example:
\\wsl.localhost\Ubuntu\home\<user>\Documents\quest-bound-main
Open Docker Desktop and click on quest-bound-main to see a list of containers and a running log.
Start each container in this order, waiting for the corresponding message to show it started successfully.
- quest-bound-redis:
Ready to accept connections tcp - quest-bound-db:
database system is ready to accept connections - quest-bound-server:
[server]: Server is running at http://localhost:8000 - quest-bound-client:
Local: http://localhost:5173/
Once all four containers are running successfully, open a web browser to test the services.
http://localhost:8000
http://localhost:5173
You can find documentation on developing Quest Bound on this repo's wiki.
To report bugs, create an issue in this repository and select the bug template. Issues will be updated and closed as they are addressed.
Use discussions to chat about potential features and updates with other users.
To submit a contribution, push your work to a feature branch and create a pull request to the main branch. Follow the PR template. Currently, all pull requests are reviewed by a single code owner, but this policy may change over time.
My name's Curt and I've been a professional software developer since 2017, working for companies ranging between small startups to as large as Amazon Web Services.
Quest Bound is the most ambitious and complex project I have ever worked on. What started as a simple idea for a more intelligent character generator evolved into an accessible engine for creating the digital versions of custom TTRPGs. Eventually, it became clear that what I wanted to do was bring the power to create D&D Beyond level applications to independent game creators.
I spent nearly two years building Quest Bound, half of that full time while living on savings and all of it working more hours in a day than I should have been. When I realized I couldn't make QB work as a sustainable business, I decided to open source it so others may continue to use it forever. It is my hope that other developers and TTRPG enthusiasts will contribute to QB's continued development over time.
I've made a lot of mistakes and have learned an incredible amount by building Quest Bound--as a developer, an aspiring entrepenuer and as a responsible consumer of tabletop gaming. I consider Quest Bound to be my contribution to this community of gamers. Please use it freely, share it with others and contribute to it to make it better for everyone.







