A desktop application for managing D&D hex crawl campaigns, built with Electron, React, and TypeScript.
- Hex Grid Editor: Visual hex grid with customizable terrain types and LOD (Level of Detail) zoom system
- Campaign Management: Create, save, load, and export campaigns
- Content Tracking: Track locations, encounters, NPCs, treasures, and clues per hex
- Discovery Status: Mark hexes as undiscovered, discovered, or cleared
- Time & Weather: In-game calendar with weather simulation
- Procedural Generation: Random terrain and encounter generation
- Multi-Window Support: Open multiple campaigns simultaneously
- Autosave: Automatic saving with 2-second debounce
- Undo/Redo: Full history support for all edits
- Tabletop Markers: Place figurine-style markers for settlements, landmarks, players, and more
- Map Export: Export maps to PNG, JPEG, or PDF with print-ready and player handout presets
- Export Options: Export campaign data to JSON or Markdown formats
Download the latest release from the Releases page.
- Download the
.dmgfile - Open and drag Hexal to Applications
- Available for both Intel (x64) and Apple Silicon (arm64)
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Build macOS only
npm run build:mac- Frontend: React 18, TypeScript
- Desktop: Electron 35
- Build: Vite, electron-builder
- State Management: React Context + useReducer
- Rendering: HTML5 Canvas
hexal-electron/
├── electron/ # Electron main process
│ ├── main.ts # Main process entry point
│ └── preload.ts # Preload script for IPC
├── src/
│ ├── components/ # React components
│ ├── stores/ # State management contexts
│ ├── services/ # Utility services (hex geometry, time, weather)
│ ├── styles/ # CSS styles
│ ├── types/ # TypeScript type definitions
│ └── data/ # Static data (calendars, weather effects)
├── index.html
├── package.json
├── tsconfig.json
└── vite.config.ts
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.