
The best, most advanced, most powerful JavaScript fireworks ever made.
Smooth as butter. The high preset aims at 60fps with 5,000 particles and 10 rockets in the air, across 15 shell types. WebGL 2 first, Canvas when it has to be, multi-line text, a Super Grand Finale, and zero dependencies.
Some libraries just draw circles and call them fireworks. Grand Fireworks renders genuine pyrotechnic geometry β crossettes that split mid-air, weeping willows that trail gravity-realistic embers, galactic spirals, and chrysanthemum shells that bloom. Built for landing pages, hero sections, celebrations, and anyone who refuses to ship a half-baked effect.
View source on GitHub Β· Download source ZIP Β· Open the GitHub Pages site Β· What changed in 1.11.1
WebGL 215 shellsText fireworksSound engineGuided workbenchEvery feature, compared
Quick start
<script src="GrandFireworks.js"></script>
<script>
const fireworks = new GrandFireworks();
fireworks.start();
</script>The zero-argument constructor creates a transparent fullscreen overlay, uses the cinematic style with the high adaptive performance preset, does not start automatically, and runs indefinitely once started.
CDN
Load directly from GitHub via jsDelivr β no build step, no bundler required.
<script src="https://cdn.jsdelivr.net/gh/travisjmac/grand-fireworks-js@latest/dist/GrandFireworks.min.js"></script>To stay on one release rather than following the latest, pin its tag:
<script src="https://cdn.jsdelivr.net/gh/travisjmac/grand-fireworks-js@v1.11.1/dist/GrandFireworks.min.js"></script>Experiences
Explore the default fireworks show, a cinematic scene, or the hands-on feature lab.
Build it into anything
Grand Fireworks is designed to be dropped into an existing page, experience, or game without adopting a framework or rebuilding your UI. Create one instance, choose a container, and trigger shells, text, finales, or your own gameplay events from ordinary JavaScript. The engine handles the spectacle; your project keeps its own rules, controls, and personality.
Configure your show
How it compares
Every row is a Grand Fireworks feature. fireworks-js gets a mark only where version 2.10.8 has that same feature. Open the comparison on its own page.
| Feature | Grand Fireworks JS | fireworks-js |
|---|---|---|
| Renderer | ||
| WebGL 2 renderer | β | β |
| Canvas 2D renderer | β | β |
| Automatic Canvas fallback when WebGL is unavailable | β | β |
| Point-sprite particles | β | β |
| Device-pixel-ratio cap | β | β |
| WebGL context-loss recovery | β | β |
| Long-exposure trails | β | β |
| Bloom | β | β |
| Star-shaped sparks | β | β |
| Rocket exhaust | β | β |
| Explosion flashes | β | β |
| Full-screen flash | β | β |
| Shells | ||
| Grand peony shell | β | β |
| Imperial chrysanthemum shell | β | β |
| Weeping willow shell | β | β |
| Royal palm shell | β | β |
| Diamond ring shell | β | β |
| Crossette supreme shell | β | β |
| Golden brocade shell | β | β |
| Dragon fish shell | β | β |
| Majestic comet shell | β | β |
| Cascading horsetail shell | β | β |
| Starburst shell | β | β |
| Glitter nova shell | β | β |
| Crown jewel shell | β | β |
| Thunder clap shell | β | β |
| Galactic spiral shell | β | β |
| Show | ||
| Automatic launching show | β | β |
| Intensity control | β | β |
| Opening salvo | β | β |
| Gravity | β | β |
| Air drag | β | β |
| Wind | β | β |
| Camera zoom | β | β |
| Layer opacity | β | β |
| Color control | β | β |
| Named color themes | β | β |
| Named visual styles | β | β |
| Mixed style | β | β |
| Random show | β | β |
| Global speed control | β | β |
| Grouped salvos | β | β |
| Secondary crackle | β | β |
| Ember color burn | β | β |
| Shimmer | β | β |
| Sparkle | β | β |
| Pointer launches a rocket | β | β |
| Burst at an exact point | β | β |
| Fly a rocket from one point to another | β | β |
| Draw inside an element you choose | β | β |
| Transparent fullscreen overlay | β | β |
| Pause and resume | β | β |
| Stop the show | β | β |
| Wait until shells in the air finish | β | β |
| Clear the sky | β | β |
| Launch a shell on demand | β | β |
| Change options while running | β | β |
| Read the current options | β | β |
| Runtime stats | β | β |
| Text | ||
| Text fireworks | β | β |
| Multi-line text | β | β |
| Hybrid particle and crisp text | β | β |
| Text position and alignment | β | β |
| Text tilt | β | β |
| Text dissolve, hold, and fall | β | β |
| A sequence of text messages | β | β |
| Finale | ||
| Grand finale | β | β |
| World Ender | β | β |
| Show duration | β | β |
| Sound | ||
| Sound effects | β | β |
| Turn sound on and off | β | β |
| Volume control | β | β |
| Procedural launch, whistle, boom, and crackle | β | β |
| Ambient hiss | β | β |
| Stereo panning | β | β |
| Performance | ||
| Quality presets, including a 60fps target | β | β |
| Adaptive quality | β | β |
| Pause when the tab is hidden | β | β |
| Pause when scrolled offscreen | β | β |
| Reduced-motion support | β | β |
| Particle cap | β | β |
| Rocket cap | β | β |
| Building with it | ||
| TypeScript declarations | β | β |
| Zero runtime dependencies | β | β |
| Host-driven frame loop | β | β |
| React component | β | β |
| Preact component | β | β |
| Solid component | β | β |
| Vue component | β | β |
| Svelte component | β | β |
| Angular component | β | β |
| Custom element | β | β |
| SSR-safe React, Vue, and Svelte mounts | β | β οΈ React use client |
| Configuration reference | β | β |
| Guided workbench | β | β |
| Copy the running configuration | β | β |
| Live demo | β | β |
β supported Β· β οΈ partial Β· β not supported
Verified October 2026 against fireworks-js 2.10.8 and Grand Fireworks JS 1.11.1. Sources: fireworks.ts, types.ts, sound.ts, README.
Fireworks Command v0.3