A module for Foundry VTT that adds keybinding labels and tooltips to actions that actually have a keybinding set.
  • JavaScript 59.7%
  • Shell 33.1%
  • Makefile 3.9%
  • CSS 3.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
g33z fd051a8937
All checks were successful
CI / check (push) Successful in 9s
Release / release (push) Successful in 20s
Release v1.1.2
2026-11-12 21:54:47 +01:00
.forgejo moving repository to forgejo; removing github stuff 2026-11-12 21:40:52 +01:00
docs adding some screenshots 2026-11-12 21:08:50 +01:00
lang init 2026-11-12 19:12:32 +01:00
scripts fixing module id for foundry deployment 2026-11-12 21:54:40 +01:00
styles fixing module id for foundry deployment 2026-11-12 21:54:40 +01:00
tools fixing module id for foundry deployment 2026-11-12 21:54:40 +01:00
.gitignore Release v0.0.2 2026-11-12 19:23:50 +01:00
CHANGELOG.md Release v1.1.2 2026-11-12 21:54:47 +01:00
CLAUDE.md fixing module id for foundry deployment 2026-11-12 21:54:40 +01:00
Makefile fixing module id for foundry deployment 2026-11-12 21:54:40 +01:00
module.json Release v1.1.2 2026-11-12 21:54:47 +01:00
README.md fixing module id for foundry deployment 2026-11-12 21:54:40 +01:00

Keybind Hints

Hovering the chat tab shows its tooltip with the keybinding: "Chat Messages Shift+C"

A Foundry VTT v14 module that shows the current keybinding next to UI elements, e.g. hovering the chat tab shows Chat Messages [Shift+C].

Keys are read live from game.keybindings, so bindings you change in Configure Controls show up immediately, including those of systems and modules.

Features

  • Tooltip hints: Foundry's own tooltip gets the key(s) appended. Elements that have a binding but no tooltip get one.
  • Hold H: shows a key badge on every visible element that has a binding (rebindable under Configure Controls > Keybind Hints).
  • Custom hints: link any element to any action by clicking it. Module settings > Manage Hints > Pick Element, or bind the "Assign Keybind Hint to Element" key. You can also hide a wrong hint ("No hint").

How an element gets its hint

Checked in this order. Only actions that currently have a binding are shown.

  1. Your own mappings (CSS selector to action, stored per user)
  2. Built-in mappings for core and dnd5e (scripts/builtins.mjs): hotbar slots, target / ruler / unconstrained movement tools, chat tab, your character in the player list and actor directory, compendium browser, sheet mode toggle
  3. Name matching: an element's tooltip or label is compared with the actions' localized names ("Toggle" / "Open" / "Show" prefixes are ignored)

Built-ins and name matching can each be turned off in the module settings.

Install

In Foundry: Add-on Modules > Install Module, paste this manifest URL:

https://git.nrdblg.de/g33z/foundryvtt-keybinds/releases/download/latest/module.json

Support

If you'd consider supporting me, I would be very grateful. Thank you very much!

Support me on Ko-fi

Development

make            # list targets
make link       # symlink this folder into Foundry's modules folder (FOUNDRY_DATA=... to override)
make check      # syntax-check scripts, validate JSON and translations
make build      # build dist/module.zip + dist/module.json locally
make foundry-dry-run  # check the foundryvtt.com release for the current version (asks for the token)
make foundry-publish  # publish the current version on foundryvtt.com by hand, if CI's step failed

Releases: add your changes under ## [Unreleased] in CHANGELOG.md, then

make release 0.2.0          # promotes the changelog, bumps module.json, commits and tags locally
git push origin main
git push origin v0.2.0      # the tag triggers the release: Forgejo release + foundryvtt.com

The release workflow publishes each version on foundryvtt.com via the Package Release API. It needs the package's release token (on the package's edit page on foundryvtt.com) as the repository secret FOUNDRY_RELEASE_TOKEN (Settings > Actions > Secrets). The token is never stored in the repository; without the secret, that step is skipped.

Console helpers

const api = game.modules.get("show-keybinds").api;
api.explain(document.querySelector('[data-tool="ruler"]')); // which action, and why
api.openManager();
api.assignFromPick();