1ordinateur377 downloadsAdds CSS-defined custom callouts to the editor right-click menu and colors callout options.
Cluddle Callouts is an Obsidian plugin that makes callouts easier to insert, switch, and discover while editing notes.
It adds a searchable callout picker to the editor right-click menu and provides a command to open the same picker from anywhere in Obsidian. The picker includes Obsidian's built-in callouts, a bundled cluddle callout, and custom callouts defined by your enabled CSS snippets.
If you use a lot of custom callouts, this plugin saves you from remembering callout ids or manually rewriting block syntax. You can search, preview, insert, replace, and remove callouts from one place while staying in the editor.

Until the plugin is available in Obsidian Community Plugins, install it from the latest GitHub release:
manifest.json, main.js, and styles.css from the latest release on GitHub.cluddle-callouts inside your vault at .obsidian/plugins/..obsidian/plugins/cluddle-callouts/.Settings → Community plugins.Cluddle Callouts.Development installs from a local clone still work as usual, but GitHub releases are the intended install path until the store listing is live.
cluddle callout in the builtin categoryOpen callout picker command.ArrowUp, ArrowDown, ArrowLeft, and ArrowRight to move around the picker if needed.Enter to apply the selected result, or click an item directly.If your cursor is already inside a callout, Open callout picker inserts a nested callout instead of changing the current header. Use Rename current callout type if you want to retag the current callout itself.
The release includes a bundled cluddle callout with a cloud icon. It appears under the existing builtin category and can be disabled in settings.
The picker supports keyboard workflows:
Open callout picker, Open callout picker (alternate insertion mode), or Rename current callout type in Obsidian HotkeysAlt+Enter inside the picker to use the opposite cursor-placement behavior for one insertionThe plugin reads enabled CSS snippets from your vault's Obsidian config and looks for .callout[data-callout="..."] definitions. That means custom callouts can show up in the picker automatically without requiring a separate plugin-specific registry.
The format it looks for is:
.callout[data-callout="primary-id"],
.callout[data-callout="alias-id"] {
--callout-color: 230, 126, 34;
--callout-icon: lucide-stethoscope;
--callout-concept: recognition;
--callout-groups: medical;
--callout-group-medical: primary-id alias-id;
}
For example, the bundled Cluddle-style callout uses this shape:
.callout[data-callout="cluddle"] {
--callout-color: 111, 174, 219;
--callout-icon: lucide-cloud;
--callout-concept: builtin;
--callout-groups: builtin;
--callout-group-builtin: cluddle;
background-color: #f4f6df;
}
The plugin currently uses these properties:
data-callout="..." selectors to collect the primary id and aliases--callout-color to color the picker preview--callout-icon to show a Lucide icon in the picker preview and rendered Obsidian callout--callout-groups to decide which group or groups the callout belongs to--callout-group-<group-name> to define the label shown for that group entry and its aliases--callout-concept as optional metadata for organizing related callouts in your snippetA complete real-world example is included in docs/example-medical-callouts.css.
Here is a small example of a CSS snippet entry that this plugin can process:
.callout[data-callout="indicated"],
.callout[data-callout="recommended"] {
--callout-color: 230, 126, 34;
--callout-concept: drug-usage;
--callout-groups: drug disease;
--callout-group-drug: indicated;
--callout-group-disease: symptoms;
}
With that snippet enabled in Obsidian:
indicated is treated as the primary callout idrecommended is treated as an alias for the same calloutdrug group as Indicateddisease group as SymptomsYou can define additional groups with more --callout-group-<group-name> properties. The alias list for each group is whitespace- or comma-separated, and the first alias becomes the displayed picker entry for that group.
The plugin includes settings for:
cluddle callout should appearPress Alt+Enter in the picker to use the opposite cursor-placement behavior from that default insert setting for a single insertion.
There are also commands you can bind in Obsidian Hotkeys:
Open callout pickerOpen callout picker (alternate insertion mode)Rename current callout type.obsidian/appearance.json and enabled CSS snippet files from .obsidian/snippets/ to discover custom callout definitionsVault.configDir plus narrow read-only adapter access for that discovery pathThe plugin artifact loaded by Obsidian is:
manifest.jsonmain.jsstyles.cssSource files live under src/. Build the runtime plugin artifact with:
npm install
npm run build
That bundles the source tree into the shipped main.js at the repository root.
Releases are tag-driven through GitHub Actions. To publish a release:
manifest.json, package.json, package-lock.json, and versions.json to the same version.0.1.9.The release workflow runs tests, rebuilds main.js, attests manifest.json, main.js, and styles.css, then publishes those three files as the GitHub release assets. Do not create Obsidian release assets manually unless you also recreate the same artifact attestations.
manifest.json, main.js, and styles.css