Praxis is a warm, focused Obsidian theme built from Minimal's proven foundation and shaped around a compact Praxis design system. It supports light and dark mode, but it is intentionally designed as a dark-first theme. It includes an Obsidian Publish companion stylesheet and keeps the Minimal-style helper classes that make notes, tables, image galleries, dashboards, and Dataview views easier to compose.

[!author] callout and |noicon callout metadata supportpublish.css for Obsidian PublishPraxis in your vault at .obsidian/themes/Praxis.theme.css and manifest.json to that folder.Praxis.BRAT can install Praxis directly from GitHub while the theme is in beta or before it is listed in the community theme catalog.
BRAT community plugin.https://github.com/voi-tech/obsidian-praxis.Praxis.Praxis targets Obsidian 1.13.0 or newer and works on desktop and mobile. It uses modern CSS selectors, including :has(), for Minimal-compatible media and table helpers.
Praxis works without plugins. If you install the optional Style Settings community plugin, Praxis exposes a small set of body-class controls:
Praxis intentionally does not mirror the full Minimal Style Settings surface. Broader typography, color, and layout preferences should be managed through Obsidian's built-in Appearance settings or custom snippets.
Add helper classes with the cssclasses property in your note:
---
cssclasses:
- cards
- table-wide
---
wide expands the readable line widthmax expands content to the maximum available widthtable-100, table-full, table-wide, table-maxtable-small, table-tiny, table-nowrap, table-wrap, table-tabulartable-center, table-lines, table-numbersrow-hover, row-alt, row-lines, row-lines-off, col-alt, col-linestable-col-1-150, table-col-1-200cards turns compatible tables into card gridslist-cards turns top-level lists into card gridscards-cover crops images to fill their card image areacards-align-bottom pushes the last card field to the bottomcards-16-9, cards-1-1, cards-2-1, cards-2-3 set image aspect ratioscards-cols-1 through cards-cols-8 force a specific number of columnsimg-100, img-wide, img-max, img-grid, img-grid-ratioiframe-100, iframe-wide, iframe-maxmap-100, map-wide, map-maxchart-100, chart-wide, chart-maxAdd these suffixes to image embeds:
#outline adds a subtle border#interface adds a framed interface treatment#invert inverts images in dark mode#invertW inverts images in light mode#circle crops the image into a circlehide-title hides the inline titlealt-title hides the inline title for notes that provide their own first headingh1-borders adds a divider treatment to H1 headingsPraxis includes custom task icons for /, -, >, <, ?, !, *, quote, l, b, i, S, I, p, c, f, k, w, u, d, +, B, a, n, R, t, P, and L.
It also supports [0] through [9] task states as horizontal progress bars, from 0% ([0]) to 90% ([9]).
Callouts use Lucide-based icons. The custom [!author] callout is styled for quotes and attributions. Add |noicon metadata to a callout to hide its icon.
The callout color semantics follow the voitech.lol design system:
| Color | Callout types |
|---|---|
| Violet | [!note] [!info] [!todo] [!abstract] [!important] |
| Mint | [!tip] [!success] [!check] |
| Orange | [!warning] [!caution] [!attention] |
| Red | [!danger] [!error] [!bug] [!fail] |
| Brown | [!quote] [!author] [!example] |
Praxis does not set a typeface. Select your preferred font in Obsidian Settings → Appearance → Font (Interface font, Text font, Monospace font). Praxis is designed with Geist in mind, but works well with any modern sans-serif at the text size.
Praxis exposes two undocumented body-class helpers for controlling animation speed across the theme. They are not configurable through Style Settings — apply them via a CSS snippet or a plugin like Body Class:
| Class | Effect |
|---|---|
body.disable-animations |
Sets all Praxis ribbon and focus transitions to 0ms |
body.fast-animations |
Halves all Praxis ribbon and focus transition durations |
Note: If your operating system has Reduce Motion enabled (macOS: System Settings → Accessibility → Display → Reduce Motion), Praxis already suppresses all transitions and animations via
@media (prefers-reduced-motion: reduce). That system setting takes precedence over these helper classes.
Praxis does not override Graph View node, edge, or label colors. Graph View uses Obsidian's default color scheme. To add branded colors, create a CSS snippet targeting .graph-view.color-fill, .graph-view.color-line, and related selectors.
publish.css is a companion stylesheet for Obsidian Publish. It shares Praxis colors, typography, callouts, cards, table helpers, image helpers, and media width helpers while staying separate from the app theme.
To use it, publish publish.css at the root of your Publish vault. Keep theme.css for the Obsidian app and publish.css for Publish; the files intentionally target different DOMs.
Style Settings does not run on Obsidian Publish, so Publish customization should be done directly through CSS variables in publish.css. The Publish stylesheet keeps the same callout color semantics as the app theme and avoids app-only Properties, CodeMirror, and workspace selectors.
Praxis is a fork and substantial adaptation of Minimal by Steph Ango. It uses Minimal as its foundation for Obsidian app structure, helper classes, compatibility patterns, and Publish-oriented thinking, then adds the Praxis design layer: warm palettes, compact spacing, task treatments, callout styling, Properties refinements, and a companion publish.css.
Minimal is released under the MIT License. Praxis preserves the copyright and license notice in theme.css and is also released under the MIT License.
If Praxis is useful to you, please also support the original Minimal project.