v0.16.0
2026-04-13
Bugs
- [ ] Double images on import character: Import Character (and possibly other workflows) has vestigial code that duplicates images upon the first token art being provided. This is no longer needed and should be removed.
- [x] Can't import Vasaya to the Mad Eidolon map
- [ ] Generated monsters have no properties, actions aren't using the right damage rolls (applyDamage)
Plumbing
- [x] Before seeding system fixtures, check to see if the db already has them. Add a version number to each system fixture set, and only re-seed if the version number is higher than the version in the db.
General
- [x] Change "Help" to "Help / About" in the main menu
- [x] In the help / about page, add an "about" tab which shows the build version and date.
- [x] In the help / about page, add a "roadmap" tab which shows the roadmap, ideally with a dropdown for each major feature that expands to show the details for that feature. This can be populated from the docs/ROADMAP.md file.
- [x] In the help / about page, add a "changelog" tab which shows the changelog, ideally with a dropdown for each version that expands to show the details for that version. This can be populated from this CHANGELOG.md file.
Module System
- [x] Implement a system whereby external modules can be loaded, which can add UI elements, API endpoints, and database entities. See modules doc for detailed TODOs.
AI Rearchitecture
- [x] Add an "AI Configuration" section to the Settings page (/settings) where users can:
- Set preferences for which models to use for which AI tasks
- Enter API keys for supported providers (OpenAI, Gemini, Claude, Grok)
- See which models are already enabled via server-side environment variables (without revealing the actual keys)
- Link to documentation about how to set up and use AI features
- [x] For server operators, support environment variables for API keys that serve as defaults for all users. Each user can override with their own keys.
- [x] In any UI element that uses AI:
- If no AI is enabled for the flow, show a notification with a link to Settings
- If an in-browser model is enabled but not downloaded, prompt the user to download it (cached for future use). Do not attempt in-browser AI without the model present.
- If multiple options are enabled, show which is active and allow switching on the fly
- [x] Migrate Monster Generation from OpenAI-only to support in-browser Qwen 2.5 3B as the default, with API fallback
- [x] Implement Character Sheet Optimization using Qwen 2.5 3B (in-browser) with API fallback for complex builds
- [x] Once per production CI build, and on-demand for locally-hosted servers, use APIs to check for an updated list of models from OpenAI, Gemini, Claude, and Grok, and update the list of available models for users to choose from in the UI accordingly. If a user has selected a model that is no longer available, show a notification prompting them to select a new model. (Something like this was implemented for the Monster Generator using Gemini--it should be for all models and use cases, but also shouldn't happen on every app load, so a periodic check and a CI-triggered check seems like a good balance).
- [x] In the Settings panel, show the list of models available for each provider, and allow the user to disable models if they wish (all active by default).
Roll Tables
Map
- [x] In the Edit Grid modal, there's a UI element that allows incrementing by 0.1 units. But the main numeric stepper already allows this. Change as follows:
- Remove the extraneous UI element.
- Add an element showing the current increment size (default 1), with - and + buttons to cycle between 0.01, 0.1, 1, 10, and 100. This affects how much the main numeric stepper increments or decrements with each click.
- Numeric stepper up/down buttons increment by the currently selected increment, as do the up and down keys.
Left Sidebar
- [x] There is a special UI that shows when the selected token is a background token, with options unique to background tokens. Restore this UI. It should appear instead of the CurrentTokenBar when selecting a background token.
- [x] The existing left sidebars have the option to be modals or sidebars. Add this option to the Edit Map modal as well, with the new default being sidebar.
Token Mounting
- [x] Add a built-in action for all tokens on the Token layer, with single-square, single-target targeting, called "Mount". When executed, it prompts the user to select a token to mount.
- Once seleted, the current token teleports onto the chosen mount, centered (so if the target is 2x2, and the current token is 1x1, it will be centered on a grid corner, not in a grid square).
- If the tokens are the same size, the current token will shrink by 25% so the rear token can be seen.
- The "rider" token should be on a higher z-index (or webGL equivalent) than the "mount" token so it renders on top.
- Multiple tokens can mount the same target. When two+ riders are present, arrange them so they aren't stacked on top of each other. For instance, a 2x2 mount can fit four 1x1s on top before shrinking tokens.
- Don't enforce any size restrictions for mounts or riders; leave that to the GM.
- When the mount token moves, the rider token moves with it, maintaining its relative position on the mount. This applies to all movement types (click-drag, keyboard, actions/macros).
- [x] Add a built-action for all tokens on the Token layer, called "Dismount". It is visible and usable only for tokens that are currently mounted. When executed, the current token dismounts from its mount and teleports to the nearest unoccupied space.
Character Sheet
- [x] In the New Character modal, the Campaign and Party fields need the following changes:
- Currently, they are dropdowns. Change to typeahead with multiple select (the character sheet detail page already has this component).
- When the typeahead is clicked, a dropdown of choices appears. This dropdown should be sorted alphabetically.
- [x] The character sheet detail page should have the same UI for artwork that the Edit Token modal has. To wit:
- Left panel: Strip of existing artwork, with edit and trash icons. Edit opens a drawer to change the source image.
- Right panel: Token and Portrait containers. User can draw artwork from the left panel into these slots to designate which source image to use for each. Beneath each is an edit button that opens a drawer to change tokenization / portrait parameters for that image, and a trash icon that unlinks that source image from the token or portrait (but doesn't delete the source image).
- [x] When a character is imported onto a map, its token artwork should match the character artwork, including tokenization and portrait art settings. Remove old logic to duplicate the artwork for the token, since we no longer need to do that to have separate token and portrait images.
Equipment
- [x] Make the necessary db, api, and UI changes such that each piece of equipment has:
- An image (optional) using existing UI for uploading and selecting images
- A custom name (optional, defaults to the name of the item as chosen)
- A description field (optional)
- [x] Add the ability to create custom equipment without selecting equipment from the system
- [x] Add an option to add a Composite Item. A composite item has one name and one description, but can have 0-n sub-items, which can be any equipment item (including other composite items). Should be as easy as adding a 'parent' column; most of the work is in the UI.