An opinionated, open-source virtual tabletop for maps, tokens and reusable dice rolls.
Try the browser demo on itch.io — no account needed. Save Attack: d20 + 5 or Damage: 2d6 + 3 as a macro — a reusable dice-roll button — then click to roll. Try maps and grid-snapped tokens with fictional data. The demo runs independently in each browser and resets on reload; it has no multiplayer or lasting session saves. Its corresponding source is downloadable on the demo page. It is separate from the maintainer's personal installation.
Set up your own table · Italiano
Video showcase — start with the full walkthrough, then explore one short video per feature. Vers on YouTube.
Watch the trailer · 45 seconds · English
vers-trailer-v2-en-player.mp4
Download the original Full HD videos: English (MP4) · Italiano (MP4) · Credits and details
Music: “Pathfinder” by Scott Buckley · CC BY 4.0. Credits and permissions.
Vers is an opinionated virtual tabletop for role-playing games that benefit from maps, distance measurements, tokens and shared dice. It is useful across many tabletop RPGs, with familiar tools for tactical play and no requirement to adopt one particular game's rules engine.
I build Vers around the way I like to run games: practical interactions that keep the session moving, with as little setup and unnecessary complexity as possible. Features are deliberately chosen and shaped for that workflow. The aim is to make playing faster and easier, not to cover every possible rule or setting.
- One-click dice rolls: save attacks, damage or other recurring rolls as reusable macro buttons. Add temporary bonuses, use ADV/DIS and share results in the roll log. ADV/DIS compare two complete base-dice totals and apply bonuses only once. A configurable quick die handles rolls on the fly.
- A map you can work on quickly: zoom toward the cursor, measure distances, place tokens and props, draw, ping and reveal fog without leaving the table.
- Controls that stay close to play: token details remain selected while you use map tools; panels can be docked, resized and rearranged, and macro docks can be reordered by dragging.
- A shared table, separate views: live player scenes, a master view, reusable characters and NPCs, and initiative tools for encounters.
- Your own installation: invitation-based access, Italian, English, French and German UI, and documented deployment using Firebase, Supabase and Vercel.
Vers is a flexible tabletop toolkit, not a complete rules engine for every RPG. Some conveniences reflect my own play style, including HP, armor class, saving throws and ADV/DIS; use the parts that fit your game. Vers is licensed under AGPL-3.0-only. You operate your own installation and control its campaigns and user access. The interface supports Italian, English, French and German: use the ITA / ENG / FRA / DEU selector at sign-in or in the tabletop header. Your choice is saved in this browser. The source is publicly available for anyone to inspect, install and contribute to under that license.
The maintainer's personal installation is a separate, invitation-only service. It is not a public demo or a shared hosted service for repository visitors. Reading, cloning or contributing to this repository grants no access to that installation, its accounts, campaigns or files. Follow the setup guide to run your own instance with your own cloud projects and invitations.
Install and deploy · Configuration · Administration · Troubleshooting · Italian introduction
- Organize campaigns and scenes, with a separate master view and player scene.
- Upload maps, character tokens and reusable scene assets; remove your assets.
- Pan and zoom toward the cursor; measure movement, draw, ping and reveal fog.
- Manage reusable characters, NPCs, token statistics, temporary HP and initiative.
- Build macros with dice, bonuses, temporary bonuses, damage types and sections.
- Reorder macro panels by dragging them.
- Roll macros or a configurable quick die with advantage/disadvantage. Two dice totals are compared; bonuses are applied once. Results appear in the roll log.
- Keep selected-token details visible while using map tools.
- Switch all interface labels, menus, confirmations and roll explanations between Italian, English, French and German without reloading or changing campaign content.
Fog is visual, not a way to hide downloaded map pixels from a determined player. Use separate master-only scenes for confidential images. Read the security model before inviting players.
| Component | Responsibility | Needed for the documented deployment? |
|---|---|---|
| GitHub | Source repository, pull requests, Actions CI and Dependabot | Yes |
| Vercel | Next.js hosting, HTTPS, builds, Git deployments and the server authorization route | Yes |
| Firebase Authentication / Google | Google sign-in, user identity and signed ID tokens | Yes |
| Supabase | PostgreSQL, Data API, Row Level Security, Realtime and private file Storage | Yes |
| Node.js + npm | Local tooling, builds and dependency installation | Yes |
| Gitleaks | Local and CI secret scanning; not an application service | For security checks |
| Domain registrar / DNS | A custom public hostname | Optional; the Vercel hostname works |
This is the same service architecture used by the reference production installation, expressed with placeholders rather than its account details. Firebase Firestore, Firebase Storage, Firebase Hosting, Firebase Cloud Functions, Supabase Edge Functions, SMTP, Redis, OpenAI and payment services are not required by the current application. The default Supabase local configuration mentions optional services that the app does not use.
The app is Next.js + React + TypeScript. Dependencies are locked in
package-lock.json; use npm ci. See
architecture for the data and authentication flow.
- Install a current Node.js 22 patch release and Git.
- Clone this repository or your fork:
Forks should replace the clone URL with their own repository. Private forks require an authorized GitHub account.
git clone https://github.com/AleVersace/Vers.git cd Vers npm ci - Follow the production setup guide to create your own Firebase and Supabase projects, apply migrations and initialize the first campaign. There are no bundled accounts, maps or campaign invitations.
- With a configured
.env.local, run:Opennpm run dev
http://localhost:3000. For development, use separate cloud projects from production.
The browser demo above is a separate sandbox. Running npm run dev for the full app does not create cloud
resources, apply migrations or grant access to a Google account. The automated
test suite, however, uses disposable local data and does not require cloud keys.
| Task | Guide |
|---|---|
| Reproduce the hosted production setup from zero | Installation and deployment |
| Find every environment variable and understand its scope | Configuration reference |
| Invite/revoke users, create campaigns, back up and upgrade | Operations |
| Work locally, run checks and contribute | Development, Contributing |
| Diagnose login, database, Storage, Realtime and deployment errors | Troubleshooting |
| Understand what the security controls do and do not protect | Security model |
| Inspect application structure and safely upgrade naming | Architecture, Naming compatibility |
| Review privacy checks and prepare a source publication | Repository privacy |
| Publish source while retaining automatic production releases | Publication checklist |
npm run lint
npm test
npm audit --audit-level=low
npm run security:checknpm test builds the app, then runs the tests. Build-time font downloads need
network access. Install Gitleaks before the last command; see
development tooling. CI runs these checks with synthetic
data and read-only GitHub permissions, without production credentials.
Read CONTRIBUTING.md before opening a pull request. Report vulnerabilities through the private process in SECURITY.md. For ordinary bug reports, include reproduction steps, the commit and a sanitized error message. Never attach tokens, service-account files, database exports or real campaign data to an issue.
Copyright 2026 AleVersace and contributors. Code is distributed under
GNU Affero General Public License v3.0 only. When offering a modified
version over a network, provide its corresponding source as required by the
license, including your changes and installation instructions. Configure
NEXT_PUBLIC_SOURCE_URL for that exact version.
Dependencies keep their own licenses; retain third-party notices. User-uploaded maps, artwork and campaign material are not included in this repository or automatically licensed under AGPL. Operators must have permission to use the content they upload. Vers is an independent project, with no claimed affiliation with game publishers or hosting providers.
