Getting started with v0.4.0
vanilla-ssr v0.4.0 adds lazy/conditional hydration helpers and a global configuration API. Render HTML on the server, hydrate interactions in the browser, and build admin dashboards 90% faster with minimal custom CSS.
Installation
npm install vanilla-ssr@0.4.0
Quick Start
vanilla-ssr works in two phases: server-side rendering (SSR) and client-side hydration. Start by rendering markup on your server, then hydrate it in the browser.
Step 1: Server-Side Rendering
Use the markup helpers to generate HTML on your server. These work with any backend—Node.js, .NET, PHP, Go, or Python.
import { renderModalMarkup } from 'vanilla-ssr';
const html = renderModalMarkup({
title: 'Welcome',
message: 'SSR-first UI components',
primaryButtonText: 'Confirm'
});Step 2: Client-Side Hydration
Once the HTML is in the DOM, hydrate it to add interactivity. This enables form validation, change handlers, and other dynamic features.
import { hydrateModal } from 'vanilla-ssr';
const element = document.querySelector('[data-component="modal"]');
hydrateModal(element);Step 3: Add Styles
Include the CSS file in your HTML head. The styles are designed to work with any design system and include built-in dark mode support.
<link rel="stylesheet" href="https://unpkg.com/vanilla-ssr@0.4.0/dist/vanilla-ssr.css">
What's New in v0.4.0
Added lazy/conditional hydration (hydrateOnInteraction, hydrateOnIdle) and a global configure()/getConfig() API. See the v0.4.0 changelog for details.
Step 4: Theme System
Built-in light/dark mode with 18+ customizable CSS variables. Apply themes globally or to specific elements with zero setup.
:root {
--bg-primary: #ffffff;
--text-primary: #1e293b;
--accent: #6366f1;
}
@media (prefers-color-scheme: dark) {
:root {
--bg-primary: #0f172a;
--text-primary: #f8fafc;
--accent: #8b5cf6;
}
}Step 5: Utility Components
Badges, chips, status dots, and table helpers. Eliminate 400+ lines of custom CSS for common UI patterns.
import { renderBadge, renderChip, renderStatusDot } from 'vanilla-ssr';
// Badges
const badge = renderBadge({ label: 'Active', variant: 'success' });
// Chips
const chip = renderChip({ label: 'JavaScript', removable: true });
// Status dots
const status = renderStatusDot({ status: 'online', pulse: true });Next Steps
- Browse all components to see what's available
- Try the playground to experiment with different configurations
- Check out patterns for common use cases