jv2091k downloadsInsert, detect, and manage custom callout types with a unified modal and full icon support.
An Obsidian plugin that unifies callout insertion, detection, and management into a single tool.
Callout Control Panel gives you one hotkey to insert any callout — built-in, theme-defined, snippet-defined, or custom types you've created yourself — through a single modal dialog.
Insert callouts fast
Detect callout types automatically
Create and manage custom callout types
The plugin supports several ways to insert callouts. Pick the one that fits you best — or combine them.
Best for keyboard-driven users who insert callouts frequently.
For your most-used callouts, assign Favorite Callout 1–5 to individual hotkeys. Each favorite inserts a specific type in one keystroke. You can change which type each favorite inserts at any time.
The easiest setup for phones and tablets.
You can also add individual favorite callout commands to the mobile toolbar for one-tap access to specific types.
For users who want to design their own callout types:
.obsidian/snippets/ so your callouts persist even if the plugin is removedFor more detailed workflow ideas, see the Suggested Workflows wiki page.
main.js, manifest.json, and styles.css from the latest releasecallout-control-panel in your vault's .obsidian/plugins/ directoryThe plugin inserts standard Obsidian callout syntax:
> [!note] My title
> Content goes here
The custom type will immediately appear in the insertion modal and generate the appropriate CSS rule.
If you have CSS snippets that define callout types, the plugin will detect them automatically. The expected format is:
.callout[data-callout="your-type-name"] {
--callout-color: 68, 138, 255;
--callout-icon: lucide-star;
}
Both --callout-color (as an RGB tuple) and --callout-icon (as a Lucide icon name) are optional. If omitted, defaults will be used — and the plugin will show a warning so you know something is missing.
You can create callouts without icons for use as structural containers — for example, dashboard layouts with nested callouts. In the custom callout editor, press No icon to set --callout-icon: transparent in the generated CSS.
In your own CSS snippets, use transparent as the icon value:
.callout[data-callout="dashboard"] {
--callout-color: 32, 94, 166;
--callout-icon: transparent;
}
To fully hide the icon area, add these rules alongside your callout definition:
.callout[data-callout="dashboard"] .callout-title-icon {
display: none !important;
width: 0 !important;
min-width: 0 !important;
margin: 0 !important;
padding: 0 !important;
}
.callout[data-callout="dashboard"] .callout-title,
.callout[data-callout="dashboard"] .callout-title-inner,
.callout[data-callout="dashboard"] .callout-content {
margin-left: 0 !important;
padding-left: 0 !important;
}
The plugin will detect these callouts and display them as "no-icon" in the settings panel.
The plugin only scans enabled CSS snippets. Make sure your snippet is toggled on in Settings > Appearance > CSS snippets. If the snippet is enabled but the callout still doesn't appear, the CSS block may be malformed — the plugin will show a warning with the file name and number of unparseable entries. Check that your definition follows this structure:
.callout[data-callout="your-type"] {
--callout-color: 68, 138, 255;
--callout-icon: lucide-star;
}
Common causes: missing quotes around the type name, a missing closing brace, or extra selectors that break the pattern.
The plugin couldn't find a --callout-icon declaration in your CSS block, or the declared icon name doesn't exist. A warning triangle will appear next to the callout in the settings panel, and the tooltip will tell you whether the icon is missing or invalid. Check for typos in both the property name (--callout-icons instead of --callout-icon) and the icon name itself (lucide-chef-hatt instead of lucide-chef-hat). The icon name column will show the invalid name with a strikethrough so you can spot it quickly.
The plugin couldn't parse a --callout-color value from your CSS block. A warning triangle will appear next to the callout in the settings panel. The color must be an RGB tuple of three numbers — for example, --callout-color: 68, 138, 255;. Hex values (#44a8ff), rgb() wrappers, and CSS color names (red) are not supported by Obsidian's callout color system.
This plugin makes outbound network requests in one scenario only:
Downloading optional icon packs (Icon Packs tab in settings)
When you choose to download an additional icon pack (e.g. Octicons, RPG Awesome), the plugin fetches a JSON file from raw.githubusercontent.com. No request is made until you explicitly click the download button. Icon pack data is saved to your vault and used locally afterward — no further network access occurs.
Font Awesome icons are bundled with the plugin and require no network access.
No analytics, telemetry, or other data is ever collected or transmitted.
This plugin incorporates code from three open-source Obsidian plugins, all licensed under MIT:
See ATTRIBUTION.md for full license notices.
MIT. See LICENSE for details.