Dates that just work.
Built for AI. Built for humans. Own your code.
Stop fighting timezones. Stop memorizing format tokens. Pull only the functions you need directly into your codebase.
Size up your dates.
Like Tailwind for dates — simple properties, consistent output. No format strings to remember.
whenny(date).xs // "2/6"
whenny(date).sm // "Feb 6"
whenny(date).md // "Feb 6, 2026"
whenny(date).lg // "February 6th, 2026"
whenny(date).xl // "Friday, February 6th, 2026"
whenny(date).clock // "7:03 AM"
whenny(date).sortable // "2026-02-06".xs2/6
.smFeb 6
.mdFeb 6, 2026
.lgFebruary 6th, 2026
Why Whenny?
AI-First Design
Clean, predictable API optimized for AI code generation. Every function does one thing well.
Own Your Code
shadcn-style install. Pull functions directly into your codebase. No dependency lock-in.
Server/Client Sync
Transfer Protocol preserves timezone context. One point in time, displayed correctly everywhere.
Size-Based Styles
Format dates like sizing — .xs .sm .md .lg .xl. Consistent output, zero thinking.
Smart Defaults
Context-aware formatting. 'just now', '5 min ago', 'Yesterday at 3pm' - automatic.
MCP Server
Expose all functions to AI assistants. Let AI pick the right date utilities for you.
Dead Simple API
Every function is predictable. Every output is useful.
Smart Formatting
whenny(date).smart()Duration
duration(seconds)Business Days
calendar.addBusinessDays(date, 5)React Hooks
LIVEuseRelativeTime(date)Pull only what you need.
Like shadcn/ui - copy code directly into your project. Full ownership, full control.
# Initialize whenny in your project
# Add only the modules you need
# Or grab everything
Click any module to copy its install command:
Server and client, finally in sync.
The Transfer Protocol carries timezone context across the wire. Store UTC, display local. Automatically.
// Store UTC, preserve origin
const payload = createTransfer(date, {
timezone: 'America/New_York'
})
// { iso, originZone, originOffset }// Display in user's local time const event = fromTransfer(payload) whenny(event.date).smart() // "3:00 PM" (auto-converted)
Ready to simplify dates?
Start with the CLI or install the package. Your choice.