Rebuilt the landing hero with CSS-first reveals and cut time-to-interactive in half.
// STYLE GUIDE
Sections & elements, broken down
A reference for the building blocks that make up this site: the colour and type foundations, the reusable UI elements, and every named section pattern with where it’s used.
// FOUNDATIONS: COLOUR
Colour palette
Orange is a structural accent only. Surfaces stay near-black; text steps down through four greys.
// FOUNDATIONS: TYPE
Typography
Headings
Animate Astro fast
Body
The quick brown fox jumps over the lazy dog.
Eyebrows / code / meta
npm install @astroanimate/core
// ELEMENTS
UI elements
Buttons
Primary (orange fill), secondary (outline), and the nav install pill.
Eyebrow label
Monospace, uppercase, orange, prefixed with //. Opens nearly every section.
Badges & tags
The NEW badge (sidebar/components), pill tag chips (blog/showcase), and numbered index.
Status pills
Colour-coded states used on the changelog and roadmap.
Status pulse
The live pulsing indicator from @astroanimate/core/Loader.
Accordion
Native disclosure with an animated +/− marker. Used on the FAQ.
Does AstroAnimate ship JavaScript?
Not by default. CSS-first components add zero runtime JS. Only opt-in components load JavaScript.
Card
The base surface: hairline border, near-black fill, orange border + lift on hover.
CSS-first by default
Core animations render from CSS with no client runtime unless you opt in.
// LIBRARY COMPONENTS
Real @astroanimate/core components in use
The site uses the actual animation library in two places, shown live below.
// SECTION PATTERNS
Named sections
Every recurring block on the site, named, described, and shown with a miniature live example. Click “View live” to see it in context.
Astro Animation Library
Built for Astro
An animation library for Astro
CSS-first motion, no runtime JS unless you opt in.
| Feature | AstroAnimate | Others |
|---|---|---|
| Zero runtime JS | ✓ | ✕ |
| Islands-aware | ✓ | ~ |
Free, MIT-licensed, and developed in the open on GitHub.
No runtime unless opt-in.
Respects reduced motion.
Where motion belongs in an Islands architecture…
Does AstroAnimate ship JavaScript?
Not by default. CSS-first components add zero runtime JS.
// COMPONENTS & PATTERNS
Components & patterns
Additional building blocks, several are interactive, so try them right here.
Open source, MIT licensed.
- All CSS-first components
- TypeScript types
- Community support
For production sites & teams.
- Everything in Core
- Premium UI components
- Priority support
- Figma kit
For agencies & studios.
- Everything in Pro
- Up to 10 seats
- Shared license
npm install @astroanimate/core, then import a component by its subpath.src
components
pages
Does AstroAnimate ship JavaScript?
Not by default. CSS-first components add zero runtime JS. Only opt-in components load JavaScript.
Is it free to use?
Yes. MIT licensed and free for commercial and open-source projects.
Does it respect reduced motion?
Yes, automatically. Animations are minimised when prefers-reduced-motion is set.
// ANIMATION SHOWCASE
Animation showcase
Seven motion patterns the site reaches for, CSS-first where possible, with JavaScript added only where it earns its place. Each respects reduced-motion and degrades cleanly without script.
MotionthatfitsthewayAstroalreadyworks.
Install the core
Add @astroanimate/core. Zero runtime JS ships until you opt in to an engine.
Import a component
Pull in a component by its subpath. Everything is fully typed out of the box.
Apply and ship
Drop it into your markup. Motion renders from CSS in fully static builds.
- Nova Portfolio Hero reveal
- Driftwave SaaS Scroll fade
- Ember Docs Typewriter
- Verdant Store Count up
// DEV-TOOL & DOCS
Dev-tool & docs
The interactive surface a developer actually operates: command palette, callouts, API reference, integrations, and the small feedback affordances that make docs feel alive. Every example below is live; try them right here.
Components are imported by subpath, one import per component.
CSS-first components ship zero runtime JS, so they render on static markup.
Named (barrel) imports from the package root are not supported.
Removing a client directive from an opt-in island disables its motion entirely.
/api/v1/components/typewriter-text Returns the prop schema and defaults for the TypewriterText component.
| Name | Type | Required | Description |
|---|---|---|---|
text | string | yes | The string to animate in. |
speed | number | no | Characters per second. Defaults to 30. |
delay | number | no | Milliseconds before the animation starts. |
cursor | boolean | no | Show the blinking caret. Defaults to true. |
curl https://api.astroanimate.dev/v1/components/typewriter-text \
-H "Authorization: Bearer $AA_TOKEN" {
"name": "TypewriterText",
"props": {
"text": { "type": "string", "required": true },
"speed": { "type": "number", "default": 30 },
"cursor": { "type": "boolean", "default": true }
}
} Animate Astro fast
This card previews the selected theme. The rest of the site stays untouched.
Get started// BLOG & CONTENT
Blog & content
The editorial building blocks (bylines, related reading, progress, filtering, and pull quotes) that make up an AstroAnimate article and its surrounding blog index.
Scroll this box to watch the bar fill. The progress is measured against this container’s scroll position, not the window’s.
Astro’s whole pitch is shipping less JavaScript. So the moment you reach for animation, there’s a tension: most motion libraries assume a hydrated, client-rendered tree.
The fix is to express the common cases (entry, reveal, and transition animations) in CSS and the Web Animations API, which run on statically rendered markup. No directive, no island, no runtime.
A typewriter heading or a fade-up on a hero doesn’t need a framework. With AstroAnimate it’s a single subpath import and a component, and it renders in a fully static build.
Some effects really do need a runtime: spring physics, gesture tracking, timeline orchestration. Those belong on an island, and only there.
The mental model: CSS-first for presentation motion, islands for interaction. Most sites are 90% the former.
Whatever approach you choose, honour prefers-reduced-motion. AstroAnimate does this automatically. When a visitor opts out, motion is minimised.
Motion and Astro’s performance goals aren’t at odds, as long as you let CSS do the ordinary work and save hydration for the parts that are genuinely interactive.
- Animating Astro Islands without hurting hydration
- A field guide to scroll-triggered reveals
- AstroAnimate 0.1.2: CountUp & easing presets
- prefers-reduced-motion, done properly
- Measuring animation cost in a static build
- 01 Why CSS-first beats a runtime for 90% of motion 12.4k views
- 02 The hydration tax nobody talks about 9.1k views
- 03 Building a typewriter heading with zero JS 7.8k views
- 04 Easing curves that actually feel good 6.2k views
- 05 Page transitions without a framework 5.5k views
If an animation can be expressed in CSS, expressing it in JavaScript is a tax you pay on every page load.
// FORMS & INPUTS
Forms & inputs
The full input toolkit: fields and their states, choice controls, ranged inputs, autocomplete, multi-step flows, file upload, and consent.
- TypewriterText
- FadeInText
- CountUp
- ScrollReveal
- ParallaxImage
- GlassCard
Review your details and submit.
Drag files here or browse
PNG, JPG, or SVG up to 5MB
// FEEDBACK & STATUS
Feedback & status
How the interface talks back: transient toasts, inline alerts, tooltips, and the placeholders shown while content is empty or loading.
Heads up. A new version of the docs is available.
Saved. Your changes are live.
Careful. This action can’t be undone.
Failed. Couldn’t reach the server. Try again.
No projects yet
Create your first project to start animating.
// DATA DISPLAY
Data display
Ways to show numbers and structured records: metric cards, sortable tables, spec sheets, billing toggles, simple charts, and activity feeds.
| Component ↕ | Downloads ↕ | Size (KB) ↕ | Updated |
|---|---|---|---|
| TypewriterText | 18,420 | 1.2 | Jun 18 |
| CountUp | 12,880 | 0.9 | Jun 21 |
| ScrollReveal | 9,560 | 1.6 | Jun 12 |
| GlassCard | 6,240 | 2.1 | May 30 |
- Runtime JS
- 0 KB (CSS-first core)
- Dependencies
- None
- License
- MIT
- Framework
- Astro 4+
- TypeScript
- First-class, fully typed
- Released v0.1.2 with CountUp
- Merged easing-presets PR #142
- Opened discussion on scroll triggers
// COMMERCE & PRODUCT
Commerce & product
The retail building blocks: product cards, ratings and reviews, cart summaries, faceted filters, urgency timers, and avatar groups.
“Dropped the kit into an Astro site and shipped the same day. Zero runtime JS and the motion feels great.”
// MEDIA & LAYOUT
Media & layout
Blocks built around imagery and arrangement: carousels, captioned figures, video heroes, alternating feature rows, team grids, and responsive embeds.
Motion that loads instantly
No runtime unless you ask
Entry, reveal, and transition motion renders from CSS, shipped in a static build with zero hydration cost.
Opt in where it matters
Gesture and physics-driven effects load only on the island that needs them, never site-wide.