Bag of Holding is a modern, full-stack inventory management solution for Dungeons & Dragons (DnD) campaigns. It helps Dungeon Masters and players track items, containers, coins, and character assignments with a clear audit trail and a user-friendly, accessible interface.
- Backend: FastAPI (Python), SQLite, SQLAlchemy (async), Alembic
- Frontend: React, TypeScript, Material UI, Vite, Tailwind CSS
- Deployment: Docker (single image), Nginx, Supervisor
- Manage items, containers, coins, and characters
- Assign/unassign items and containers to characters and players
- Full changelog/audit trail for all actions
- Responsive, accessible dark mode UI
- Admin panel with bulk delete
- Production-ready Docker deployment
- Python 3.11+
- Node.js 18+
- Poetry (for backend dependencies)
- Navigate to the backend directory:
cd backend - Install dependencies:
poetry install
- Run database migrations:
poetry run alembic upgrade head
- Start the backend server:
poetry run uvicorn app.main:app --reload
- Open a new terminal and navigate to the frontend directory:
cd frontend - Install dependencies:
npm install
- Start the frontend dev server:
npm start
- Access the app at http://localhost:5173
- Docker and Docker Compose
- From the project root, build and start the app:
docker-compose up --build
- The app will be available at http://localhost:8080
- The backend runs at
http://localhost:8000(internal) - The SQLite database is persisted in a Docker volume
services:
app:
image: dovarfalcone988/bag-of-holding:latest
environment:
- DATABASE_URL=sqlite+aiosqlite:///app/bagofholding.db
ports:
- "3000:80"
- "8001:8000"
restart: unless-stopped
volumes:
- bagofholding_data:/app
volumes:
bagofholding_data:backend/ # FastAPI app, database, migrations
frontend/ # React app (Vite, MUI, Tailwind)
Dockerfile # Unified build for backend & frontend
nginx/ # Nginx config for static frontend & API proxy
- User authentication and roles (DM vs Player)
- Real-time updates (WebSockets)
- Export/import campaign data
- Advanced search and filtering
- Mobile app (PWA or native)
- Integration with DnD 5e APIs
- Customizable item types and currencies
- Automated backup/restore
Bag of Holding is open source and designed to be extended for your campaign's needs. Contributions and suggestions are welcome!