How to find, download, and integrate Pure Admin themes into your application.
The homepage shows all available themes with live search and tag filtering. Each theme card shows the color palette, supported modes (light/dark), and font. Click a theme to see its full detail page with documentation, variants, and download options.
You can also browse from the command line:
# List all themes\nnpx @keenmate/pureadmin list\n\n# Search by name or description\nnpx @keenmate/pureadmin search dark\n\n# Show full details for a theme\nnpx @keenmate/pureadmin info audi\n\n# Or use the API directly\ncurl https://pureadmin.io/api/themes?q=dark&tags=Dark
Click the download button on any theme's detail page at /theme/:slug.
If the theme has multiple versions, use the version dropdown to pick a specific one.
# Download the latest version\nnpx @keenmate/pureadmin download audi\n\n# Download a specific version\nnpx @keenmate/pureadmin download audi --version 2.0.2\n\n# Or use curl directly\ncurl -fsSL -o audi.zip https://pureadmin.io/api/themes/audi/download
Built-in themes are part of the @keenmate/pure-admin-core package.
Community themes have their own packages (listed on each theme's detail page).
# Built-in themes (corporate, audi, dark, express, minimal)\nnpm install @keenmate/pure-admin-core\n\n# Community themes (check the theme's detail page for the package name)\nnpm install @keenmate/pure-admin-cafeindustrial-theme
pure-admin-theme-audi-2.0.2.zip\n├── theme.json # Manifest with metadata, checksums, colors\n├── css/audi.css # Compiled CSS — drop into any project\n├── scss/audi.scss # SCSS source — for customization\n├── assets/\n│ └── fonts/ # Bundled font files (if any)\n├── preview/ # Thumbnail (if any)\n└── README.md # Generated usage instructions
The theme.json inside the ZIP contains the full theme metadata including
integrity checksums (see Integrity System).
The simplest integration — no build tools required. Extract the ZIP and link the CSS file:
<link rel="stylesheet" href="path/to/css/audi.css">
If the theme bundles fonts, make sure the assets/fonts/
directory
is accessible relative to the CSS file. The CSS uses relative url()
paths like ../assets/fonts/MyFont.woff2.
For full control over theme variables, use the SCSS source. See the Theme Customization guide for details on overriding variables, swapping fonts, and baseline correction.
// your-project/styles.scss\n\n// Override variables before importing\n$primary-bg: #0066cc;\n$card-border-radius: 8px;\n\n// Import the theme\n@import '@keenmate/pure-admin-theme-audi/src/scss/audi';
Compile with sass:
sass styles.scss output.css \\\n --load-path=node_modules \\\n --silence-deprecation=import
Each theme has a versions array and a latest field.
The download endpoint defaults to the latest version.
# Check available versions\nnpx @keenmate/pureadmin versions audi\n\n# Or show full theme info (versions, core compat, variants, etc.)\nnpx @keenmate/pureadmin info audi
Each theme declares which version of @keenmate/pure-admin-core
it's built for
(e.g. "^2.0.0"
means >=2.0.0 and <3.0.0). You can filter themes by core version
directly via the API:
# List themes compatible with pure-admin-core 2.x
npx @keenmate/pureadmin compatible 2.0.0
# Or via the API
curl https://pureadmin.io/api/themes?core_version=2.0.0
# Combine with search
curl "https://pureadmin.io/api/themes?q=dark&core_version=2.0.0"
The core_version parameter supports semver ranges declared by themes:
^2.0.0 — matches 2.x.x (same major, any minor/patch)~2.1.0 — matches 2.1.x (same major.minor, any patch)>=1.5.0 — matches 1.5.0 and aboveThemes without a declared core version are always included (assumed compatible).
If your application fetches themes programmatically, use ETags to avoid
re-downloading unchanged themes. The API returns an ETag header
on every theme response.
# First request — store the ETag
response=$(curl -sI https://pureadmin.io/api/themes/audi)
etag=$(echo "$response" | grep -i etag | awk '{print $2}' | tr -d '\r')
echo "ETag: $etag"
# Later — only download if changed
status=$(curl -s -o /dev/null -w "%{http_code}" \
-H "If-None-Match: $etag" \
https://pureadmin.io/api/themes/audi)
if [ "$status" = "304" ]; then
echo "Theme unchanged, using cached version"
else
echo "Theme updated, re-download"
fi
The ETag for a single theme (/api/themes/:slug) is the theme's
content_sha
— it only changes when that specific theme is updated.
You can verify the downloaded ZIP matches by comparing the ETag against
checksums.content_sha
inside the ZIP's theme.json.
For containerized applications, download themes at build time:
RUN curl -fsSL -o /tmp/audi.zip \\\n https://pureadmin.io/api/themes/audi/download && \\\n unzip -o /tmp/audi.zip -d /app/themes/audi/ && \\\n rm /tmp/audi.zip
ARG THEMES_URL=https://pureadmin.io/api/bundle
RUN curl -fsSL -o /tmp/themes.zip "${THEMES_URL}" && \
unzip -o /tmp/themes.zip -d /app/themes/ && \
rm /tmp/themes.zip
RUN curl -fsSL -o /tmp/themes.zip \
"https://pureadmin.io/api/bundle?themes=corporate,audi,dark" && \
unzip -o /tmp/themes.zip -d /app/themes/ && \
rm /tmp/themes.zip
Use ETags in your CI pipeline to skip theme downloads when nothing has changed:
#!/bin/bash
# ci-download-theme.sh — download theme only if updated
THEME="audi"
CACHE_DIR=".theme-cache"
ETAG_FILE="$CACHE_DIR/$THEME.etag"
ZIP_FILE="$CACHE_DIR/$THEME.zip"
mkdir -p "$CACHE_DIR"
HEADERS=()
if [ -f "$ETAG_FILE" ] && [ -f "$ZIP_FILE" ]; then
HEADERS=(-H "If-None-Match: $(cat $ETAG_FILE)")
fi
HTTP_CODE=$(curl -s -w "%{http_code}" -o "$ZIP_FILE.tmp" \
-D "$CACHE_DIR/headers.txt" \
"${HEADERS[@]}" \
"https://pureadmin.io/api/themes/$THEME/download")
if [ "$HTTP_CODE" = "304" ]; then
echo "$THEME: unchanged (cached)"
rm -f "$ZIP_FILE.tmp"
elif [ "$HTTP_CODE" = "200" ]; then
mv "$ZIP_FILE.tmp" "$ZIP_FILE"
grep -i etag "$CACHE_DIR/headers.txt" | awk '{print $2}' | tr -d '\r' > "$ETAG_FILE"
echo "$THEME: downloaded new version"
else
echo "$THEME: download failed (HTTP $HTTP_CODE)"
rm -f "$ZIP_FILE.tmp"
exit 1
fi
Fetch theme data from your frontend or Node.js backend:
// List all themes
const res = await fetch('https://pureadmin.io/api/themes');
const { themes } = await res.json();
// Get a single theme with its metadata
const res = await fetch('https://pureadmin.io/api/themes/audi');
const { theme } = await res.json();
console.log(theme.name); // "Audi"
console.log(theme.latest); // "2.0.2"
console.log(theme.content_sha); // "sha256:61df..." (matches ETag)
// Conditional fetch with ETag
let etag = localStorage.getItem('themes-etag');
const res = await fetch('https://pureadmin.io/api/themes', {
headers: etag ? { 'If-None-Match': etag } : {}
});
if (res.status === 200) {
const data = await res.json();
localStorage.setItem('themes-etag', res.headers.get('etag'));
// process updated themes...
} else if (res.status === 304) {
// use cached data
}