@markdy/astro
v0.7.4
Published
Astro island component for MarkdyScript animations.
Maintainers
Readme
@markdy/astro
Astro island component for MarkdyScript animated scenes.
Features
- SSR placeholder — correctly-sized
<div>prevents layout shift before hydration - Viewport-triggered hydration —
IntersectionObserverwith 100px root margin - View Transition compatible — re-observes elements on
astro:page-load - Zero config — pass your MarkdyScript code as a prop
Installation
pnpm add @markdy/astroUsage
---
import { Markdy } from "@markdy/astro";
const code = `
scene width=800 height=400 bg=#fff5f9
actor hero = figure(#c68642, m, 😎) at (400, 200)
@0.0: hero.enter(from=left, dur=0.8)
@1.5: hero.say("Hello!", dur=1.2)
`;
---
<Markdy code={code} width={800} height={400} bg="#fff5f9" autoplay />In MDX
import { Markdy } from "@markdy/astro";
export const code = `
scene width=600 height=300 bg=white
actor label = text("Hello") at (200, 130) size 40 opacity 0
@0.3: label.fade_in(dur=0.6)
`;
<Markdy code={code} width={600} height={300} autoplay />Props
| Prop | Type | Default | Description |
|---|---|---|---|
| code | string | (required) | MarkdyScript source code |
| width | number | 800 | Placeholder width in pixels |
| height | number | 400 | Placeholder height in pixels |
| bg | string | "white" | Placeholder background colour |
| assets | Record<string, string> | {} | Asset URL overrides |
| autoplay | boolean | true | Start playing on hydration |
| loop | boolean | true | Loop the animation when it ends |
| copyright | boolean | true | Show a "Powered by Markdy" badge below the animation |
| progressBar | boolean | true | Show a rainbow progress bar around the viewport border |
| class | string | — | CSS class for the outer wrapper |
Tip: Match
width,height, andbgprops to yourscenedeclaration values to avoid a visual flash on hydration.
How It Works
- Server: renders a sized placeholder
<div>with a▶ markdylabel - Client: an
IntersectionObserverwatches all.markdy-rootelements - On viewport entry: the observer fires, clears the placeholder, and calls
createPlayer()from@markdy/renderer-dom - View Transitions: listens for
astro:page-loadto re-observe newly added elements
Documentation
- Tutorial — step-by-step guide from zero to animated scenes
- Syntax Reference — complete DSL language spec
