Johannes Schwartz529 downloadsConfigurable control center for the TTRPG Tools plugin suite.
TTRPG Tools - Controls is a configurable command center for the TTRPG Tools plugin ecosystem in Obsidian.
Build a personalized sidebar of the actions you use most: organize controls into groups, arrange buttons freely, customize their appearance, and keep your tabletop workflow one click away.
Buttons from unavailable providers remain in the layout and are automatically disabled. Your dashboard configuration is preserved even when a provider plugin is temporarily turned off.
TTRPG Tools - Controls currently supports actions from:
Available actions depend on the installed provider plugins and their current state.
Controls also provides built-in management actions for:
The Style Settings action is shown as unavailable when the Style Settings plugin is not installed or enabled.
The Toggle files and folders action can be added multiple times. Each button has its own independent configuration for folders and files.
Campaign/GM NotesCampaign/GM Notes/Secrets.mdVisibility buttons do not delete files and do not remove them from vault search, links, embeds, or other plugins.
Build or download the plugin files.
Create the following folder in your vault:
.obsidian/plugins/ttrpg-tools-controls
Copy these files into the folder:
main.js
manifest.json
styles.css
Enable TTRPG Tools - Controls in:
Settings → Community plugins
Open the Command Palette.
Run:
TTRPG Tools - Controls: Open controls
You can also use the dashboard icon in the ribbon.
Open the plugin settings to configure your control center:
The Controls pane updates when provider action states change, for example when an action becomes available after a calendar, map, timeline, or other relevant resource is loaded.
The GM Interface is a dedicated, configurable navigation pane intended for quick access to campaign material during a session.
Open Settings → TTRPG Tools - Controls.
In the GM Interface section, select Configure GM Interface.
Create one or more GM pages and choose a start page.
Add columns and entries to each page.
Run:
TTRPG Tools - Controls: Open GM interface
The GM Interface opens in the left side pane.
Hover an entry thumbnail to open its target in an anchored preview panel. Nested GM-page targets open additional preview panels alongside the current one. Markdown-note targets are rendered directly in the preview panel.
GM Interface entries can use dark custom background colors for readability in dark themes. The Light-theme box brightness Style Settings option brightens these custom entry backgrounds only while a light Obsidian theme is active. This allows the same GM Interface color configuration to remain usable when switching between dark and light themes.
Internal links in rendered GM note previews retain their regular Obsidian navigation behavior:
Enable Click headings to fold in the plugin settings to fold or unfold sections in Obsidian Reading view by clicking the heading text itself.
Links, buttons, form controls, editable content, and the native collapse indicator inside a heading retain their normal behavior.
Right-click the tab header of a supported built-in Obsidian side pane to open the Controls pane-management menu.
Supported panes:
The menu can pin a pane, link it with another tab, move it to a new window on desktop, or permanently remove it from the workspace layout. Removed panes are stored in the Controls settings and are detached again after layout changes and after restarting Obsidian, so Obsidian does not automatically add them back.
Use Restore removed panes from the same managed context menu to add a previously removed pane back to its original side.
The plugin settings provide independent JSON backups for:
Exports are downloaded as JSON files. Imports use a vault-relative path to a JSON file and replace the respective current configuration after confirmation.
Plugins can integrate with Controls by exposing a public property named:
plugin.controlsApi
The API contract is:
interface ControlsProviderApi {
apiVersion: 1;
providerId: string;
providerName: string;
getActions(): ControlsProviderAction[];
executeAction(actionId: string): Promise<void>;
onActionsChanged?(callback: () => void): () => void;
}
Each action should use a stable identifier, for example:
map.open
timeline.open
soundboard.play
event.create
Providers should expose only public user-facing actions. Controls intentionally does not access provider-internal views, private fields, modals, or stored data directly.
MIT