{"id":35143322,"url":"https://github.com/ringo380/hexal","last_synced_at":"2026-02-27T04:01:06.857Z","repository":{"id":330831656,"uuid":"1123965314","full_name":"ringo380/hexal","owner":"ringo380","description":"D\u0026D Hex Crawl Campaign Manager - Desktop app with visual hex grid editor, procedural generation, time/weather tracking, and tabletop-style figurine markers. Built with Electron + React + TypeScript.","archived":false,"fork":false,"pushed_at":"2026-02-21T04:06:33.000Z","size":6210,"stargazers_count":0,"open_issues_count":13,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-21T05:10:15.252Z","etag":null,"topics":["campaign-manager","desktop-app","dnd","dungeon-master","electron","game-master-tools","hex-crawl","react","tabletop-rpg","typescript"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ringo380.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-28T02:50:07.000Z","updated_at":"2026-02-21T03:49:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"5256ec11-b423-4d68-925f-f9f5d87dda17","html_url":"https://github.com/ringo380/hexal","commit_stats":null,"previous_names":["ringo380/hexal"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/ringo380/hexal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ringo380%2Fhexal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ringo380%2Fhexal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ringo380%2Fhexal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ringo380%2Fhexal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ringo380","download_url":"https://codeload.github.com/ringo380/hexal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ringo380%2Fhexal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29884515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T23:51:21.483Z","status":"online","status_checked_at":"2026-02-27T02:00:06.759Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["campaign-manager","desktop-app","dnd","dungeon-master","electron","game-master-tools","hex-crawl","react","tabletop-rpg","typescript"],"created_at":"2025-12-28T12:57:03.758Z","updated_at":"2026-02-27T04:01:06.850Z","avatar_url":"https://github.com/ringo380.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hexal\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Version](https://img.shields.io/badge/version-1.2.5-blue.svg)](https://github.com/ringo380/hexal/releases)\n[![Documentation](https://img.shields.io/badge/docs-GitHub%20Pages-blue.svg)](https://ringo380.github.io/hexal/)\n\nA cross-platform desktop application for managing D\u0026D hex crawl campaigns, built with Electron, React, and TypeScript.\n\n![Hexal hex grid editor](docs/screenshots/hex-grid-overview.png)\n\n## Features\n\n- **Hex Grid Editor**: Visual hex grid with 10 customizable terrain types, LOD zoom, and smooth pan/zoom navigation\n- **Campaign Management**: Create, save, load, and export campaigns with autosave (2s debounce)\n- **Content Tracking**: Track locations, encounters, NPCs, treasures, and clues per hex with resolve tracking\n- **Encounter System**: Full encounter editor with creature rosters, rewards, difficulty ratings, outcomes, and reusable templates\n- **NPC Directory**: Track NPCs with race, class, alignment, attitude, faction membership, and inter-NPC relationships\n- **Region Manager**: Define named geographic regions with color-coded borders, hex assignments, and discovery status\n- **Procedural Generation**: Generate terrain, encounters, and landmarks with configurable density sliders and seeded PRNG\n- **Time \u0026 Weather**: In-game calendar system with seasonal weather simulation and travel modifiers\n- **Player View**: Second window with fog-of-war filtering, safe to project for players\n- **Session Log**: Timeline-based session logging with tags, in-game timestamps, and per-hex event tracking\n- **Tabletop Markers**: Draggable figurine-style markers for settlements, dungeons, players, and custom tokens\n- **Rivers \u0026 Roads**: Hex-edge connections for rivers and roads that render on the grid\n- **Terrain Editor**: Customize terrain types with colors, icons, move costs, and elevation\n- **Command Palette**: Quick navigation with Cmd+K to jump to any hex, region, or NPC\n- **Map Export**: Export maps to PNG, JPEG, or PDF with print-ready and player handout presets\n- **Export Options**: Export campaign data to JSON or Markdown formats\n- **Factions**: Define factions with goals, headquarters, alignment, and NPC membership\n- **Undo/Redo**: Full 50-state history for all edits\n- **Multi-Window Support**: Open multiple campaigns simultaneously\n\n## Installation\n\nDownload the latest release from the [Releases page](https://github.com/ringo380/hexal/releases).\n\n### macOS\n- Download the `.dmg` file\n- Open and drag Hexal to Applications\n- Available for both Intel (x64) and Apple Silicon (arm64)\n\n## Documentation\n\nVisit the [Hexal documentation site](https://ringo380.github.io/hexal/) for feature screenshots and a getting-started guide.\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Start development server\nnpm run dev\n\n# Build for production\nnpm run build\n\n# Build macOS only\nnpm run build:mac\n\n# Capture documentation screenshots (requires dev server running)\nnpm run screenshots\n```\n\n## Tech Stack\n\n- **Frontend**: React 18, TypeScript\n- **Desktop**: Electron 35\n- **Build**: Vite, electron-builder\n- **State Management**: React Context + useReducer\n- **Rendering**: HTML5 Canvas\n\n## Project Structure\n\n```\nhexal/\n├── electron/           # Electron main process\n│   ├── main.ts        # Main process entry point\n│   └── preload.ts     # Preload script for IPC\n├── src/\n│   ├── components/    # React components\n│   ├── stores/        # State management contexts\n│   ├── services/      # Utility services (hex geometry, time, weather)\n│   ├── styles/        # CSS styles\n│   ├── types/         # TypeScript type definitions\n│   └── data/          # Static data (calendars, weather effects)\n├── docs/              # GitHub Pages site and screenshots\n├── e2e/               # End-to-end tests and screenshot capture\n├── index.html\n├── package.json\n├── tsconfig.json\n└── vite.config.ts\n```\n\n## Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fringo380%2Fhexal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fringo380%2Fhexal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fringo380%2Fhexal/lists"}