This page is part of a static HTML representation of the TiddlyWiki at https://tiddlywiki.com/

Writing stylesheets in vanilla CSS

1st February 2026 at 4:39am

New in v5.4.0 Before v5.4.0, theme developers have to mix wikitext syntax with CSS syntax when writing stylesheets to intergrate Tiddlywiki color palettes and theme settings. With the introduction of Core CSS Variables in v5.4.0, theme developers can intergrate most Tiddlywiki palettes with vanilla CSS.

Getting Tiddlywiki palette colors

Tiddlywiki's custom properties for colors are prefixed --tpc-. Before v5.4.0, theme developers have to use the following wikitext to get a color value of a palette:

.tag {
	background: <<colour tag-background>>;
}

Since v5.4.0, theme developers can use the following CSS to get the palette color:

.tag {
	background: var(--tp-color-tag-background);
}

Getting and processing Tiddlywiki CSS settings

See Core CSS Variables for the available CSS variables. Before v5.4.0, theme developers have to use macros with filters to get and process theme settings:

.tc-sidebar-header {
	padding: 14px;
	min-height: 32px;
	margin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};
	transition:  min-height {{$:/config/AnimationDuration}}ms ease-in-out, padding-top {{$:/config/AnimationDuration}}ms ease-in-out, padding-bottom {{$:/config/AnimationDuration}}ms ease-in-out;
}

Since v5.4.0, the theme settings are also available as the CSS variables, so theme developers can use the following code:

.tc-sidebar-header {
	padding: 14px;
	min-height: 32px;
	margin-top: var(--tp-story-top);
	transition: min-height var(--tp-animation-duration) ease-in-out, padding-top var(--tp-animation-duration) ease-in-out, padding-bottom var(--tp-animation-duration) ease-in-out;
}

Limits

CSS variables can only be used in rules, while wikitext can be used everywhere. See this example:

Old way of using wikitext in media query definitions:

\define sidebarbreakpoint()
<$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/>
\end

@media (min-width: <<sidebarbreakpoint>>) {
	/* CSS rules */
}

While using CSS variables in media quert definitions doesn't work at all:

@media (min-width: var(--tp-sidebar-breakpoint)) {
	/* Doesn't work */
}