A self-hosted interactive map for Red Dead Redemption 2, built as a full-stack web application. Browse points of interest, explore the world, and run it entirely on your own machine.
Note: This project ships with zero game assets. You generate your own tiles and marker data locally using the included extractor. See Getting Started.
- Interactive map with pan and zoom
- Points of interest organized by category
- Marker filtering and search
- Local tile serving — no external dependencies at runtime
- SQLite database — no Docker required
- Simple one-command startup
rdr2-map/
├── frontend/ # React + TypeScript (react-leaflet)
├── backend/ # Express + SQLite API
├── rdr2_extractor/ # Python data extractor (tiles + markers)
└── start.sh # One-command startup script
The extractor is a development-only tool. Once you've generated your local data, you only need the frontend and backend to run the map.
This repository contains source code only. No game assets from Red Dead Redemption 2 are included, distributed, or hosted here. All map tiles and textures are the intellectual property of Rockstar Games / Take-Two Interactive and are protected by copyright.
By using the extractor, you are generating data for personal, non-commercial use only. You are responsible for complying with Rockstar Games' EULA and applicable law.
- Node.js 18+
- Python 3.11+
- npm
git clone https://github.com/belcaik/rdr2-map.git
cd rdr2-mapThe extractor downloads map tiles and marker data to your local machine.
cd rdr2_extractor
# Set up Python environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Run the extractor
python main.pyTiles and marker data will be saved to rdr2_extractor/data/. This step can take a while depending on how many zoom levels you configure.
cd backend
npm install
npm run import-data# From the project root
chmod +x start.sh
./start.shThen open http://localhost:5173 in your browser.
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend | http://localhost:3001 |
# Backend
cd backend && npm run dev
# Frontend (separate terminal)
cd frontend && npm run devCopy the example env files before running:
cp backend/.env.example backend/.envKey variables:
| Variable | Description | Default |
|---|---|---|
PORT |
Backend port | 3001 |
DB_PATH |
Path to SQLite database | data/rdr2.db |
TILES_DIR |
Path to local tile directory | data/tiles/ |
frontend/
├── src/
│ ├── components/ # React components (Map, Markers, Sidebar...)
│ ├── hooks/ # Custom hooks
│ ├── services/ # API client
│ └── types/ # TypeScript types
backend/
├── src/
│ ├── routes/ # Express route handlers
│ ├── db/ # SQLite setup and queries
│ └── scripts/ # Data import scripts
rdr2_extractor/
├── src/
│ ├── browser_controller.py # Selenium automation
│ ├── network_analyzer.py # Traffic analysis
│ ├── data_extractor.py # Marker extraction
│ └── tile_downloader.py # Async tile downloader
└── config/
└── default.json # Extractor configuration
- Canvas-based marker rendering (performance)
- Viewport virtualization
- Search and filter UI
- Mobile-friendly layout
- Docker Compose for self-hosting
Pull requests are welcome. For major changes, please open an issue first to discuss what you'd like to change.
MIT — source code only. See the license file for the full notice regarding third-party game assets.