I2P+ supports four built-in themes and full customization via override.css files. Themes span the router console and all webapps.
Four themes are included out of the box:
Themes apply across the router console and all webapps (SusiMail, SusiDNS, I2PSnark, login page). When routerconsole.universal.theme=true, all webapps share the same theme. When false, each webapp can have its own theme preference.
Set the active theme in the router console under Config → UI, or edit router.config:
routerconsole.theme=dark
Valid values are any theme directory name under docs/themes/console/.
override.css is the primary customization mechanism. It is a user-created CSS file placed in a theme directory. Because it loads after all other CSS, any rule in override.css wins over the theme defaults.
override.css in $I2P/docs/themes/console/<theme>/override.css/* Override the dark theme with a blue hue rotation */
html {
filter: hue-rotate(120deg);
}
body {
background: repeating-linear-gradient(to right, rgba(0,0,0,0.8) 1px,
rgba(0,0,0,0.8) 2px, rgba(0,0,32,0.6) 3px) #000;
}
img, #sb_localtunnels img, .sb *::before, #routerlogs li, .tunnelBuildStatus {
filter: hue-rotate(-120deg) !important;
}
A single-line override can completely shift the color scheme:
/* Turn green theme to ocean blue */
html { filter: hue-rotate(120deg); }
/* Un-rotate images so they stay natural colors */
img { filter: hue-rotate(-120deg) !important; }
To apply override.css to all webapps, create it in each webapp theme directory, or symlink:
ln -s ../console/dark/override.css $I2P/docs/themes/susimail/dark/override.css
ln -s ../console/dark/override.css $I2P/docs/themes/susidns/dark/override.css
ln -s ../console/dark/override.css $I2P/docs/themes/snark/dark/override.css
Each theme ships with example override files you can rename to activate:
override.css.ocean.blue — blue/cold hue rotationoverride.css.purple — purple tonesoverride.css.red — red accentsoverride.css.charcoal — dark variant of the light themeoverride.css.flat — flat design without gradientsoverride.css.lowlight — reduced brightnessoverride.css.solar.green — solarized greenoverride.css.solarsurprise — solarized variantoverride.css.purple — purple tonesmkdir -p $I2P/docs/themes/console/mytheme/images
global.cssDefine your CSS custom properties. At minimum:
:root {
--a: #494;
--active: #f90;
--hover: #f60;
--ink: #ee9;
--ink_bright: #aa3;
--bodybg: #000;
--border: 1px solid #242;
--btn: linear-gradient(180deg, #001000, #000);
--badge: linear-gradient(180deg, #020, #010);
}
console.css@import url(global.css);
@import url(../shared.css);
@import url(../images/itooplus.css);
body {
background: var(--bodybg);
color: var(--ink);
}
a { color: var(--a); }
a:hover { color: var(--hover); }
Place at minimum:
images/thumbnail.png — 48×48 picker thumbnailimages/i2plogo.png — console logoimages/favicon.svg — faviconFor each webapp, create a parallel directory with its own CSS that imports the console's global.css:
$I2P/docs/themes/susimail/mytheme/susimail.css
$I2P/docs/themes/susidns/mytheme/susidns.css
$I2P/docs/themes/snark/mytheme/snark.css
$I2P/docs/themes/login/mytheme/login.css
Set in router console → Config → UI, or edit router.config:
routerconsole.theme=mytheme