SyntaxCircus.FancyBlazor
0.4.0
dotnet add package SyntaxCircus.FancyBlazor --version 0.4.0
NuGet\Install-Package SyntaxCircus.FancyBlazor -Version 0.4.0
<PackageReference Include="SyntaxCircus.FancyBlazor" Version="0.4.0" />
<PackageVersion Include="SyntaxCircus.FancyBlazor" Version="0.4.0" />
<PackageReference Include="SyntaxCircus.FancyBlazor" />
paket add SyntaxCircus.FancyBlazor --version 0.4.0
#r "nuget: SyntaxCircus.FancyBlazor, 0.4.0"
#:package SyntaxCircus.FancyBlazor@0.4.0
#addin nuget:?package=SyntaxCircus.FancyBlazor&version=0.4.0
#tool nuget:?package=SyntaxCircus.FancyBlazor&version=0.4.0
FancyBlazor
<p align="center"> <img src="docs/assets/fancyblazor-marketing-640.png" width="320" alt="FancyBlazor optical mark" /> </p>
Live demo: Explore the FancyBlazor catalog
Roadmap: See the approved pre-1.0 expansion phases
Composable visual effects for Blazor: backgrounds, borders, viewport reveals, pointer motion, parallax, and shimmer—without React islands, a runtime CDN, or consumer JavaScript tooling.
FancyBlazor targets net10.0 and works with static SSR, Interactive Server,
Interactive WebAssembly, Interactive Auto, and standalone WebAssembly. It is
CSS-framework-agnostic and keeps meaningful child content as ordinary semantic DOM.
Preview software. The API may change before 1.0. Published as-is and maintained on a best-effort basis; there is no support SLA.
Install and register
dotnet add package SyntaxCircus.FancyBlazor
Register the shared runtime in every executable host. Interactive Auto apps
register it in both server and client Program.cs files.
using SyntaxCircus.FancyBlazor;
builder.Services.AddFancyBlazor();
Import the root namespace in _Imports.razor:
@using SyntaxCircus.FancyBlazor
No script tag, npm package, CDN, or manual stylesheet import is required.
First effect
<ShaderBackground Effect="ShaderEffect.Nacre"
Palette="FancyPalettes.Witchlight">
<section class="hero">
<h1>Build something that catches light.</h1>
<p>This remains semantic HTML before and after WebGL initializes.</p>
</section>
</ShaderBackground>
Before interactivity—or when WebGL is unavailable—the component displays a palette-derived CSS background and leaves the content usable.
Kinetic text
WordRotate, MorphText, and Typewriter cycle, crossfade, or progressively
type decorative text while keeping the visible motion aria-hidden and
exposing a complete accessible mirror to assistive technology. They all share
the same lifecycle as the other JS-light effects and respect
prefers-reduced-motion.
<WordRotate Words="@(new[] { "Compose", "Animate", "Ship" })" Interval="TimeSpan.FromSeconds(1.5)" />
<MorphText Words="@(new[] { "Frosted", "Faceted", "Filament" })" Mode="MorphMode.CharSplit" />
<Typewriter Text="@(new[] { "Hello, world.", "Compose with FancyBlazor." })" />
See kinetic text overview,
WordRotate,
MorphText, and
Typewriter for parameter references and
composition examples.
Atmospheric fields
CausticsBackground, TopographicBackground, and RainBackground draw
bounded Canvas 2D atmospheric fields behind semantic child content, sharing
the same lifecycle as the other Canvas 2D backgrounds: paused offscreen,
disposed cleanly, and replaced by a palette-derived static gradient when
JavaScript, Canvas 2D, or motion is unavailable.
<CausticsBackground Palette="FancyPalettes.Glacier">
<article>Semantic content</article>
</CausticsBackground>
See CausticsBackground,
TopographicBackground, and
RainBackground for parameter
references and composition examples.
Interaction and scroll
ScrollVelocity reacts to scroll speed, CompareReveal reveals one piece of
content against another by dragging a handle, and Lens shows a
pointer-following magnified view of an image over semantic content.
<CompareReveal BeforeLabel="Muted" AfterLabel="Vivid">
<Before><img src="/images/before.jpg" alt="Before" /></Before>
<After><img src="/images/after.jpg" alt="After" /></After>
</CompareReveal>
See ScrollVelocity,
CompareReveal, and
Lens for parameter references and composition
examples.
Optional WebGL preview
SyntaxCircus.FancyBlazor.WebGL is a separately installed preview companion.
It publishes at the same version as the core package while keeping Three.js and
the GPU lifecycle out of applications that do not opt in.
dotnet add package SyntaxCircus.FancyBlazor.WebGL
builder.Services.AddFancyBlazorWebGl();
This also registers core defaults. Call AddFancyBlazor(...) first when you
need to configure the shared motion, quality, pause, or diagnostics options.
<HolographicSurface Palette="FancyPalettes.Witchlight" Interactive>
<article>Semantic content remains ordinary HTML.</article>
</HolographicSurface>
The companion vendors the unmodified official Three.js r184 ESM build under MIT and requires no Node, npm, CDN, or manual script import. Its visual direction was informed by the ThreeUI effect catalog, but it includes no ThreeUI source code or assets. Treat its components, parameters, defaults, and visual output as preview API that may change before 1.0.
Optional UI companion
SyntaxCircus.FancyBlazor.UI is a separately installed companion for styled,
accessible controls: buttons, links, badges, cards, and a navbar. It publishes
at the same version as the core package and depends only on core—installing it
never pulls in the WebGL preview.
dotnet add package SyntaxCircus.FancyBlazor.UI
builder.Services.AddFancyBlazorUi();
This also registers core defaults. Call AddFancyBlazor(...) first when you
need to configure the shared motion, quality, pause, or diagnostics options.
<FancyNavbar AriaLabel="Site">
<Brand><FancyLink Href="/">Acme</FancyLink></Brand>
<Links><FancyLink Href="/pricing">Pricing</FancyLink></Links>
<Actions><FancyButton>Sign in</FancyButton></Actions>
</FancyNavbar>
Every control is a native HTML element (<button>, <a>, <span>,
<article>, <nav>, <table>, …) with typed theme tokens. All but one are
JavaScript-free; FaqAccordion is the sole exception, using a small module to
own click-driven open/closed state. Controls coexist cleanly with Bootstrap
5's Reboot and other CSS frameworks:
see Bootstrap 5 compatibility. Treat
its components, parameters, defaults, and visual output as preview API that
may change before 1.0.
Preview components
| Component | Rendering path | Purpose |
|---|---|---|
ShaderBackground |
Vendored WebGL runtime + Nacre GLSL | Decorative animated background behind real DOM |
GlowBorder |
CSS-first | Animated edge light around existing content |
Reveal |
CSS + IntersectionObserver |
Viewport-aware fade/translate/blur entrance |
Tilt |
CSS + pointer JavaScript | Perspective motion and optional glare |
GradientBackground |
CSS-first | Palette-derived animated gradient background |
Spotlight |
CSS + pointer JavaScript | Decorative pointer-following radial light |
Magnetic |
CSS + pointer JavaScript | Subtle pointer-relative content motion |
Parallax |
CSS + scroll JavaScript | Viewport-relative content offset |
Stagger |
CSS + IntersectionObserver |
Sequential direct-child viewport entry |
Shimmer |
CSS-first | Decorative highlight sweep |
GradientText |
CSS-first | Palette-derived text color treatment |
TextReveal |
CSS + IntersectionObserver |
Semantic word or character entrance |
AuroraBackground |
CSS-first | Palette-derived ambient light behind content |
NoiseOverlay |
CSS-first | Decorative grain behind content |
Ripple |
CSS + pointer JavaScript | Decorative tap/click wave around content |
CursorTrail |
Canvas + pointer JavaScript | Bounded decorative pointer particles |
GlassSurface |
CSS-first | Translucent reading plane with progressive backdrop blur |
BorderBeam |
CSS-first | Focused moving edge-light accent |
GridBackground |
CSS-first | Faded line grid behind semantic content |
DotPattern |
CSS-first | Faded dot field behind semantic content |
OrbitalGlow |
CSS-first | Palette-derived ambient orbital light |
ScrollScene |
CSS + scroll JavaScript | Continuous in-flow semantic section treatment |
ScrollIndicator |
CSS + scroll JavaScript | Decorative local reading-progress line |
ScrollBackdrop |
CSS + scroll JavaScript | Palette-derived local scroll backdrop |
ScrollVelocity |
CSS + scroll JavaScript | Scroll-speed-reactive blur and tint |
CompareReveal |
CSS + native range input | Before/after content reveal with a draggable handle |
Lens |
CSS + pointer JavaScript | Pointer-following magnified image view |
HoverLift |
CSS-first | Fine-pointer hover elevation around existing content |
PressScale |
CSS + activation JavaScript | Pointer and keyboard press response around existing content |
FocusHalo |
CSS-first | Additive focus halo around focused child content |
TextStroke |
CSS-first | Decorative text outline around semantic content |
HighlightText |
CSS-first | Editorial marker wash behind semantic text |
GradientDivider |
CSS-first | Decorative gradient separator |
WaveDivider |
CSS-first | Decorative static wave separator |
SectionDivider |
CSS-first | Decorative centered section marker |
MeshBackground |
CSS-first | Palette-derived static color field behind content |
CornerAccents |
CSS-first | Decorative opposing corners around content |
PaperSurface |
CSS-first | Tinted, lightly textured reading plane |
EdgeGlow |
CSS-first | Focused decorative edge bloom |
ConstellationBackground |
Canvas 2D + JavaScript | Bounded decorative point-and-line field behind real DOM |
ArcFlowBackground |
Canvas 2D + JavaScript | Bounded drifting-arc field behind real DOM |
FlickerGrid |
Canvas 2D + JavaScript | Bounded flickering cell grid behind real DOM |
MeteorBackground |
Canvas 2D + JavaScript | Bounded streaking-meteor field behind real DOM |
LightRaysBackground |
Canvas 2D + JavaScript | Bounded sweeping light-ray field behind real DOM |
CausticsBackground |
Canvas 2D + JavaScript | Bounded drifting caustic light-pool field behind real DOM |
TopographicBackground |
Canvas 2D + JavaScript | Bounded slowly drifting contour-line field behind real DOM |
RainBackground |
Canvas 2D + JavaScript | Bounded streaking-rain field behind real DOM |
ScrambleText |
CSS + IntersectionObserver |
Semantic character-scramble text reveal |
Marquee |
CSS animation + JavaScript | Seamless looping content scroll with one accessible copy |
NumberTicker |
JavaScript + IntersectionObserver |
Animated numeric count-up with an always-correct accessible value |
NeonText |
CSS-first | Semantic text glow and optional outline |
TypeFlow |
CSS + IntersectionObserver |
Semantic word or character entrance |
WordRotate |
CSS + IntersectionObserver |
Cycles a list of headline words with a fade/slide/blur transition while keeping the visible motion decorative |
MorphText |
CSS + IntersectionObserver |
Crossfades or character-splits between strings with a visible hold between each |
Typewriter |
CSS + IntersectionObserver |
Progressively types a list of lines with an optional caret and optional delete |
StatusPulse |
CSS-first | Decorative pulse around consumer-owned content |
LaunchHalo |
CSS-first | Decorative launch halo around consumer-owned content |
AuroraHero, ReadingSurface, ActionCard, EditorialHero, FeaturePanel |
Composition presets | Named, typed decorative stacks around semantic child content |
UI companion components
| Component | Rendering path | Purpose |
|---|---|---|
FancyButton |
Native <button> |
Themed action control with native keyboard operability |
FancyLink |
Native <a> |
Themed navigation control; href-omitting disabled state |
FancyBadge |
Native <span> |
Themed, non-interactive status label |
FancyCard |
Native <article> |
Themed content surface with optional header/footer slots |
FancyNavbar |
Native <nav> |
Themed landmark with optional brand/links/actions slots |
LogoCloud |
Native <ul> |
Themed list for consumer-owned partner/customer logos |
Testimonial |
Native <figure>/<blockquote> |
Themed quote with optional attribution/avatar slots |
CallToAction |
Native <div> |
Themed heading/copy/actions block; consumer chooses heading level |
FeatureGrid |
Native <ul> |
Themed responsive grid for consumer-owned feature callouts |
Hero |
Native <div> |
Themed intro block with optional decorative background slot |
PricingTable |
Native <table> |
Themed comparison table for consumer-owned plans and features |
FaqAccordion, FaqAccordionItem |
Native <button>/disclosure panel |
Themed, keyboard-operable Q&A list with an optional animated open/close; the only JavaScript-owning UI control |
Components intentionally compose:
<ShaderBackground>
<Reveal Effect="RevealEffect.BlurUp">
<Tilt Glare>
<GlowBorder Color="currentColor">
<article>Existing content</article>
</GlowBorder>
</Tilt>
</Reveal>
</ShaderBackground>
Global defaults
builder.Services.AddFancyBlazor(options =>
{
options.MotionPreference = FancyMotionPreference.RespectSystem;
options.Quality = FancyQuality.Auto;
options.PauseWhenHidden = true;
options.PauseWhenOffscreen = true;
options.EnableDiagnostics = false;
});
Reduced motion is respected by default. Decorative canvases and glare layers are hidden from assistive technology, wrapper components add no tab stops, and continuous rendering stops while hidden or offscreen.
Documentation and examples
- Getting started
- Component guides and API tables
- HolographicSurface preview guide
- Palettes and styling
- Accessibility
- Performance
- Hosting modes
- Deploy the interactive demo container
- Troubleshooting
- Expressive effects: what to expect
- Expressive-effects demo
- Spatial surfaces
- Spatial-surfaces demo
- WebGL surface showcase
- Narrative motion
- Narrative-motion demo
- Interaction feedback
- Interaction-feedback demo
- CSS-first catalog
- CSS-first catalog demo
- Composition and authoring
- Composition-and-authoring demo
- Atmosphere-and-accents demo
- Core-kinetic-catalog demo
- Bootstrap 5 compatibility
- UI companion demo
- Changelog
- Compiling Interactive Auto demo
Validation
dotnet restore SyntaxCircus.FancyBlazor.slnx
dotnet build SyntaxCircus.FancyBlazor.slnx --no-restore --configuration Release
dotnet test SyntaxCircus.FancyBlazor.slnx --no-build --configuration Release
dotnet pack src/SyntaxCircus.FancyBlazor/SyntaxCircus.FancyBlazor.csproj --no-build --configuration Release --output artifacts/release-preview
dotnet pack src/SyntaxCircus.FancyBlazor.WebGL/SyntaxCircus.FancyBlazor.WebGL.csproj --no-build --configuration Release --output artifacts/release-preview
pwsh eng/verify-docs.ps1
pwsh eng/verify-package.ps1 -PackageDirectory artifacts/release-preview
pwsh eng/verify-webgl-package.ps1 -PackageDirectory artifacts/release-preview -CorePackageDirectory artifacts/release-preview
pwsh eng/verify-release-packages.ps1 -PackageDirectory artifacts/release-preview
Install the Playwright browser once before the first local browser-test run; the exact command is documented in AGENTS.md.
Contributing and license
Read AGENTS.md before changing public behavior or vendored assets. FancyBlazor is MIT licensed; see LICENSE. Bundled shader.gallery and Three.js notices are in THIRD-PARTY-NOTICES.md.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.AspNetCore.Components.Web (>= 10.0.11)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on SyntaxCircus.FancyBlazor:
| Package | Downloads |
|---|---|
|
SyntaxCircus.FancyBlazor.WebGL
Preview WebGL companion effects for FancyBlazor, with semantic DOM content and automatic CSS fallbacks. |
|
|
SyntaxCircus.FancyBlazor.UI
Optional styled, accessible UI controls for FancyBlazor: buttons, links, badges, cards, and a navbar. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.4.0 | 122 | 8/31/2026 |
| 0.3.3 | 98 | 8/31/2026 |
| 0.3.2 | 125 | 8/28/2026 |
| 0.3.1 | 112 | 8/28/2026 |
| 0.3.0 | 114 | 8/28/2026 |
| 0.2.5 | 107 | 8/28/2026 |
| 0.2.4 | 104 | 8/27/2026 |
| 0.2.3 | 109 | 8/25/2026 |
| 0.2.2 | 115 | 8/24/2026 |
| 0.2.1 | 106 | 8/24/2026 |
| 0.2.0 | 96 | 8/23/2026 |
| 0.1.5 | 100 | 8/23/2026 |
| 0.1.4 | 97 | 8/23/2026 |
| 0.1.3 | 92 | 8/23/2026 |
| 0.1.2 | 99 | 8/23/2026 |
| 0.1.1 | 97 | 8/23/2026 |
| 0.1.0 | 90 | 8/23/2026 |