{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "homepage": "https://asciicn.dev",
  "items": [
    {
      "name": "ascii-core",
      "type": "registry:lib",
      "title": "ASCII core",
      "description": "The CPU side of the asciicn engine: ten charsets (classic, dense, ANSI blocks, quadrants, Braille 2x4, CP437, PETSCII, katakana, halftone, Sobel edges), colour modes and palettes, a frame model with the reference tone-to-glyph mapping, cell metrics, the shared glyph atlas, a fast Canvas2D glyph grid, media sampling, a server-rendered <pre>, a CSS CRT overlay, glyph-textured fills for charts and UI, theme colours and motion hooks.",
      "docs": "asciicn's components are examples built on this engine. To have your coding agent build ASCII components of its own on it, add the agent skill if you haven't: npx shadcn@latest add https://asciicn.dev/r/asciicn-skill.json",
      "registryDependencies": [
        "utils",
        "https://asciicn.dev/r/ascii-tokens.json"
      ],
      "files": [
        {
          "path": "lib/ascii/index.ts",
          "type": "registry:lib",
          "target": "lib/ascii/index.ts"
        },
        {
          "path": "lib/ascii/charsets.ts",
          "type": "registry:lib",
          "target": "lib/ascii/charsets.ts"
        },
        {
          "path": "lib/ascii/palettes.ts",
          "type": "registry:lib",
          "target": "lib/ascii/palettes.ts"
        },
        {
          "path": "lib/ascii/frame.ts",
          "type": "registry:lib",
          "target": "lib/ascii/frame.ts"
        },
        {
          "path": "lib/ascii/measure.ts",
          "type": "registry:lib",
          "target": "lib/ascii/measure.ts"
        },
        {
          "path": "lib/ascii/glyphs.ts",
          "type": "registry:lib",
          "target": "lib/ascii/glyphs.ts"
        },
        {
          "path": "lib/ascii/atlas.ts",
          "type": "registry:lib",
          "target": "lib/ascii/atlas.ts"
        },
        {
          "path": "lib/ascii/paint.ts",
          "type": "registry:lib",
          "target": "lib/ascii/paint.ts"
        },
        {
          "path": "lib/ascii/grid.tsx",
          "type": "registry:lib",
          "target": "lib/ascii/grid.tsx"
        },
        {
          "path": "lib/ascii/crt.tsx",
          "type": "registry:lib",
          "target": "lib/ascii/crt.tsx"
        },
        {
          "path": "lib/ascii/pre.tsx",
          "type": "registry:lib",
          "target": "lib/ascii/pre.tsx"
        },
        {
          "path": "lib/ascii/sample.ts",
          "type": "registry:lib",
          "target": "lib/ascii/sample.ts"
        },
        {
          "path": "lib/ascii/pointer.ts",
          "type": "registry:lib",
          "target": "lib/ascii/pointer.ts"
        },
        {
          "path": "lib/ascii/matrices.ts",
          "type": "registry:lib",
          "target": "lib/ascii/matrices.ts"
        },
        {
          "path": "lib/ascii/blue-noise.ts",
          "type": "registry:lib",
          "target": "lib/ascii/blue-noise.ts"
        },
        {
          "path": "lib/ascii/tokens.ts",
          "type": "registry:lib",
          "target": "lib/ascii/tokens.ts"
        },
        {
          "path": "lib/ascii/color.ts",
          "type": "registry:lib",
          "target": "lib/ascii/color.ts"
        },
        {
          "path": "lib/ascii/motion.ts",
          "type": "registry:lib",
          "target": "lib/ascii/motion.ts"
        },
        {
          "path": "lib/ascii/style.ts",
          "type": "registry:lib",
          "target": "lib/ascii/style.ts"
        },
        {
          "path": "lib/ascii/pattern.tsx",
          "type": "registry:lib",
          "target": "lib/ascii/pattern.tsx"
        },
        {
          "path": "lib/ascii/fill.tsx",
          "type": "registry:lib",
          "target": "lib/ascii/fill.tsx"
        },
        {
          "path": "lib/ascii/diffuse.ts",
          "type": "registry:lib",
          "target": "lib/ascii/diffuse.ts"
        },
        {
          "path": "lib/ascii/look.ts",
          "type": "registry:lib",
          "target": "lib/ascii/look.ts"
        },
        {
          "path": "lib/ascii/scene.ts",
          "type": "registry:lib",
          "target": "lib/ascii/scene.ts"
        },
        {
          "path": "lib/ascii/audio.ts",
          "type": "registry:lib",
          "target": "lib/ascii/audio.ts"
        }
      ]
    },
    {
      "name": "ascii-export",
      "type": "registry:lib",
      "title": "ASCII export",
      "description": "Save any ASCII frame as plain .txt, ANSI escape art (.ans, truecolor or 16-colour), vector .svg with exact columns, high-DPI .png, or a WebM/MP4 video recorded from the live canvas, plus download and copy helpers.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "lib/ascii/export.ts",
          "type": "registry:lib",
          "target": "lib/ascii/export.ts"
        }
      ]
    },
    {
      "name": "miami",
      "type": "registry:component",
      "title": "Miami",
      "description": "Ocean Drive at nightfall in dots: art deco hotels with soft neon on their stepped parapets, palms in silhouette, the glass towers of Brickell in blue haze and a bay holding the neon in broken reflections.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/miami.tsx",
          "type": "registry:component",
          "target": "components/asciicn/miami.tsx"
        }
      ]
    },
    {
      "name": "tokyo",
      "type": "registry:component",
      "title": "Tokyo",
      "description": "Tokyo at night in coloured dots, built in 3D: the Tokyo Skytree in pale blue light over a dense city that runs to the horizon, with neon on the near streets, Tokyo Tower small in the distance and a moonlit Mount Fuji under a teal sky.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/tokyo.tsx",
          "type": "registry:component",
          "target": "components/asciicn/tokyo.tsx"
        }
      ]
    },
    {
      "name": "new-york",
      "type": "registry:component",
      "title": "New York",
      "description": "Manhattan at dusk across the East River: the Empire State Building's lit spire, the Chrysler crown and One World Trade Center against an amber-to-blue sky, with soft window light, broken reflections and a slow ferry.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/new-york.tsx",
          "type": "registry:component",
          "target": "components/asciicn/new-york.tsx"
        }
      ]
    },
    {
      "name": "paris",
      "type": "registry:component",
      "title": "Paris",
      "description": "Paris at blue hour, built in 3D and printed in dots: the Seine runs between stone quays and Haussmann blocks to the Eiffel Tower, lit gold from within, its reflection broken by slow ripples.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/paris.tsx",
          "type": "registry:component",
          "target": "components/asciicn/paris.tsx"
        }
      ]
    },
    {
      "name": "london",
      "type": "registry:component",
      "title": "London",
      "description": "Westminster at dusk in dots, modelled in 3D: the floodlit Elizabeth Tower with its clock faces glowing, the Palace of Westminster receding along the river to the Victoria Tower, Westminster Bridge and its lamps, and the Thames mirroring it all under a pale gold to slate sky.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/london.tsx",
          "type": "registry:component",
          "target": "components/asciicn/london.tsx"
        }
      ]
    },
    {
      "name": "dubai",
      "type": "registry:component",
      "title": "Dubai",
      "description": "Dubai at dusk from the desert in dots: the Burj Khalifa rising far above a cluster of towers in blue haze, its stepped spire gold in the last light, over rose and amber dunes under a gold-to-blue sky.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/dubai.tsx",
          "type": "registry:component",
          "target": "components/asciicn/dubai.tsx"
        }
      ]
    },
    {
      "name": "san-francisco",
      "type": "registry:component",
      "title": "San Francisco",
      "description": "The Golden Gate Bridge at blue hour in halftone dots: Art Deco towers in International Orange catching the last light, fog rolling under the deck and over the Marin Headlands, city lights on the far shore and the bay mirroring the afterglow.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/san-francisco.tsx",
          "type": "registry:component",
          "target": "components/asciicn/san-francisco.tsx"
        }
      ]
    },
    {
      "name": "hong-kong",
      "type": "registry:component",
      "title": "Hong Kong",
      "description": "Victoria Harbour at blue hour in coloured dots: lit towers climbing to the misty ridge of Victoria Peak, the Bank of China Tower and Two IFC, long reflections and a red-sailed junk under a magenta to deep blue sky.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/hong-kong.tsx",
          "type": "registry:component",
          "target": "components/asciicn/hong-kong.tsx"
        }
      ]
    },
    {
      "name": "rio",
      "type": "registry:component",
      "title": "Rio de Janeiro",
      "description": "Rio de Janeiro at dusk from the water in dots: Sugarloaf beside Morro da Urca with one cable car crossing, Christ the Redeemer pale on Corcovado, and the lamps of Copacabana curving along the shore under a gold to violet sky.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/rio.tsx",
          "type": "registry:component",
          "target": "components/asciicn/rio.tsx"
        }
      ]
    },
    {
      "name": "sydney",
      "type": "registry:component",
      "title": "Sydney",
      "description": "Sydney Harbour at blue hour in halftone dots: the Opera House's sails catching a warm glow, the Harbour Bridge with its lamps lit, the city in cool haze and the harbour mirroring them under a peach afterglow.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/sydney.tsx",
          "type": "registry:component",
          "target": "components/asciicn/sydney.tsx"
        }
      ]
    },
    {
      "name": "asciicn-skill",
      "type": "registry:item",
      "title": "asciicn agent skill",
      "description": "An agent skill that teaches Claude Code, Codex, Cursor and other coding agents to build any ASCII effect on the engine: GLSL fields, CPU grids, charsets, colour modes, scenes and export. Installs into .agents/skills/asciicn and .claude/skills/asciicn, with the engine (ascii-core, ascii-shader, ascii-export).",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-export.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": ".generated/skills/asciicn/SKILL.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/SKILL.md"
        },
        {
          "path": ".generated/skills/asciicn/references/charsets.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/charsets.md"
        },
        {
          "path": ".generated/skills/asciicn/references/engine-api.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/engine-api.md"
        },
        {
          "path": ".generated/skills/asciicn/references/examples.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/examples.md"
        },
        {
          "path": ".generated/skills/asciicn/references/export.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/export.md"
        },
        {
          "path": ".generated/skills/asciicn/references/fields.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/fields.md"
        },
        {
          "path": ".generated/skills/asciicn/references/landing-pages.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/landing-pages.md"
        },
        {
          "path": ".generated/skills/asciicn/references/placement.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/placement.md"
        },
        {
          "path": ".generated/skills/asciicn/references/quality.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/quality.md"
        },
        {
          "path": ".generated/skills/asciicn/references/recipes.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/recipes.md"
        },
        {
          "path": ".generated/skills/asciicn/references/scenes.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/scenes.md"
        },
        {
          "path": ".generated/skills/asciicn/references/theme.md",
          "type": "registry:file",
          "target": ".agents/skills/asciicn/references/theme.md"
        },
        {
          "path": ".generated/skills/asciicn/SKILL.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/SKILL.md"
        },
        {
          "path": ".generated/skills/asciicn/references/charsets.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/charsets.md"
        },
        {
          "path": ".generated/skills/asciicn/references/engine-api.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/engine-api.md"
        },
        {
          "path": ".generated/skills/asciicn/references/examples.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/examples.md"
        },
        {
          "path": ".generated/skills/asciicn/references/export.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/export.md"
        },
        {
          "path": ".generated/skills/asciicn/references/fields.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/fields.md"
        },
        {
          "path": ".generated/skills/asciicn/references/landing-pages.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/landing-pages.md"
        },
        {
          "path": ".generated/skills/asciicn/references/placement.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/placement.md"
        },
        {
          "path": ".generated/skills/asciicn/references/quality.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/quality.md"
        },
        {
          "path": ".generated/skills/asciicn/references/recipes.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/recipes.md"
        },
        {
          "path": ".generated/skills/asciicn/references/scenes.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/scenes.md"
        },
        {
          "path": ".generated/skills/asciicn/references/theme.md",
          "type": "registry:file",
          "target": ".claude/skills/asciicn/references/theme.md"
        }
      ]
    },
    {
      "name": "seed-field",
      "type": "registry:component",
      "title": "Seed field",
      "description": "Any string drawn as a field of glyphs: folded ribbons of light or warped gas, each seed with its own OKLCH palette, shape and motion. The base of Prism, Ionize, Squall, Satin and Nebula.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/seed-field.tsx",
          "type": "registry:component",
          "target": "components/asciicn/seed-field.tsx"
        }
      ]
    },
    {
      "name": "nebula",
      "type": "registry:component",
      "title": "Nebula",
      "description": "Cosmic gas drawn in glyphs: warped clouds with bright filaments, dark dust lanes and a few stars. Every seed is a different nebula.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json",
        "https://asciicn.dev/r/seed-field.json"
      ],
      "files": [
        {
          "path": "components/asciicn/nebula.tsx",
          "type": "registry:component",
          "target": "components/asciicn/nebula.tsx"
        }
      ]
    },
    {
      "name": "prism",
      "type": "registry:component",
      "title": "Prism",
      "description": "Layered glass folds in violet and teal, drawn in glyphs. Each seed bends the ribbons differently and shifts both hues.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json",
        "https://asciicn.dev/r/seed-field.json"
      ],
      "files": [
        {
          "path": "components/asciicn/prism.tsx",
          "type": "registry:component",
          "target": "components/asciicn/prism.tsx"
        }
      ]
    },
    {
      "name": "ionize",
      "type": "registry:component",
      "title": "Ionize",
      "description": "Electric blue plasma ribbons: thin, bright and tightly twisted, drawn in Braille dots.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json",
        "https://asciicn.dev/r/seed-field.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ionize.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ionize.tsx"
        }
      ]
    },
    {
      "name": "squall",
      "type": "registry:component",
      "title": "Squall",
      "description": "Stormy bands of teal and slate that churn and fold across the box, in the classic ASCII ramp.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json",
        "https://asciicn.dev/r/seed-field.json"
      ],
      "files": [
        {
          "path": "components/asciicn/squall.tsx",
          "type": "registry:component",
          "target": "components/asciicn/squall.tsx"
        }
      ]
    },
    {
      "name": "satin",
      "type": "registry:component",
      "title": "Satin",
      "description": "Deep magenta satin: a few wide folds that turn slowly and catch the light along their edges, in ANSI shade blocks.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json",
        "https://asciicn.dev/r/seed-field.json"
      ],
      "files": [
        {
          "path": "components/asciicn/satin.tsx",
          "type": "registry:component",
          "target": "components/asciicn/satin.tsx"
        }
      ]
    },
    {
      "name": "ember",
      "type": "registry:component",
      "title": "Ember",
      "description": "A low, slow fire in glyphs: flames rise from the bottom edge and break into smoke, while single sparks drift up on the wind.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ember.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ember.tsx"
        }
      ]
    },
    {
      "name": "ascii-portrait",
      "type": "registry:component",
      "title": "ASCII portrait",
      "description": "A face redrawn in fine Braille glyphs, graded for skin and shadow, with contour strokes, a develop reveal and a before/after split with the photo.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-image.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-portrait.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-portrait.tsx"
        }
      ]
    },
    {
      "name": "ascii-canvas",
      "type": "registry:component",
      "title": "ASCII canvas",
      "description": "A glyph pad you paint with the pointer: ink spreads, curls and fades into glowing trails, and clicks send ripples that bend them.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-canvas.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-canvas.tsx"
        }
      ]
    },
    {
      "name": "ascii-reveal",
      "type": "registry:component",
      "title": "ASCII reveal",
      "description": "An image that resolves out of glyphs: cells lock in and hand over to the real photo along a sweep, on view, on hover or on cue.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-image.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-reveal.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-reveal.tsx"
        }
      ]
    },
    {
      "name": "ascii-image",
      "type": "registry:component",
      "title": "ASCII image",
      "description": "Any photo redrawn in live glyphs, with every charset and colour mode, auto levels and a pointer spotlight.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-image.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-image.tsx"
        }
      ]
    },
    {
      "name": "ascii-video",
      "type": "registry:component",
      "title": "ASCII video",
      "description": "Video, a dropped file or the webcam sampled into glyphs at up to 60 fps, with audio-reactive contrast and jitter.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-image.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-video.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-video.tsx"
        }
      ]
    },
    {
      "name": "ascii-logo",
      "type": "registry:component",
      "title": "ASCII logo",
      "description": "An SVG or PNG logo redrawn in crisp glyphs, with shimmer, scan and reveal animations.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-image.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-logo.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-logo.tsx"
        }
      ]
    },
    {
      "name": "world-land",
      "type": "registry:lib",
      "title": "World land mask",
      "description": "A 3.8 KB land mask of the world from Natural Earth (public domain), shared by the ASCII globe and the dot map.",
      "registryDependencies": [],
      "files": [
        {
          "path": "components/asciicn/world-land.ts",
          "type": "registry:lib",
          "target": "components/asciicn/world-land.ts"
        }
      ]
    },
    {
      "name": "avatar",
      "type": "registry:component",
      "title": "Avatar",
      "description": "An avatar drawn in glyphs: initials set over a lit disc of Braille dots, or a photo sampled into a glyph portrait, with a status glyph and overlapping groups.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/avatar.tsx",
          "type": "registry:component",
          "target": "components/asciicn/avatar.tsx"
        }
      ]
    },
    {
      "name": "ascii-box",
      "type": "registry:component",
      "title": "ASCII box",
      "description": "A box-drawing frame that wraps any content and snaps to the glyph cell grid, with labels in its borders and a shade-glyph shadow.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-box.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-box.tsx"
        }
      ]
    },
    {
      "name": "ascii-button",
      "type": "registry:component",
      "title": "ASCII button",
      "description": "A real button set in glyphs: a box-drawing frame around a label row that inverts like a terminal selection, with a spinner while loading.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-button.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-button.tsx"
        }
      ],
      "dependencies": [
        "radix-ui"
      ]
    },
    {
      "name": "ascii-card",
      "type": "registry:component",
      "title": "ASCII card",
      "description": "A card framed in box-drawing glyphs, with its title set into the top border and an optional glyph glow lighting it from an edge or a corner.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-box.json",
        "https://asciicn.dev/r/ascii-glow.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-card.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-card.tsx"
        }
      ]
    },
    {
      "name": "ascii-glow",
      "type": "registry:component",
      "title": "ASCII glow",
      "description": "A glowing aura drawn in glyphs, falling off through any charset from an edge, a corner or any point, for heroes and cards.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-glow.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-glow.tsx"
        }
      ]
    },
    {
      "name": "divider",
      "type": "registry:component",
      "title": "Divider",
      "description": "A horizontal or vertical rule drawn in box-drawing glyphs or a repeating glyph pattern, with an optional label or ornament.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/divider.tsx",
          "type": "registry:component",
          "target": "components/asciicn/divider.tsx"
        }
      ]
    },
    {
      "name": "empty-state",
      "type": "registry:component",
      "title": "Empty state",
      "description": "A box-drawing line drawing (an inbox, a search, a folder or an unplugged cable) with a title, a description and an action, for views with nothing in them yet.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/empty-state.tsx",
          "type": "registry:component",
          "target": "components/asciicn/empty-state.tsx"
        }
      ]
    },
    {
      "name": "loader",
      "type": "registry:component",
      "title": "Loader",
      "description": "A loading indicator drawn in glyphs: a spinner from six glyph sequences, walking dots, an eighth-block wave or a Braille comet.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/loader.tsx",
          "type": "registry:component",
          "target": "components/asciicn/loader.tsx"
        }
      ]
    },
    {
      "name": "progress-bar",
      "type": "registry:component",
      "title": "Progress bar",
      "description": "A progress bar drawn in eighth-block glyphs, exact to an eighth of a cell, with stacked parts, step segments and an indeterminate comet.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/progress-bar.tsx",
          "type": "registry:component",
          "target": "components/asciicn/progress-bar.tsx"
        }
      ]
    },
    {
      "name": "skeleton",
      "type": "registry:component",
      "title": "Skeleton",
      "description": "Loading placeholders for text, blocks and avatars made of shade glyphs, with a band of denser glyphs that sweeps across the page.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/skeleton.tsx",
          "type": "registry:component",
          "target": "components/asciicn/skeleton.tsx"
        }
      ]
    },
    {
      "name": "not-found",
      "type": "registry:component",
      "title": "Not found",
      "description": "A 404 page whose code is drawn in sand: gusts wear its edges and grains drift downwind and settle, over a terminal line that echoes the missing path.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/not-found.tsx",
          "type": "registry:component",
          "target": "components/asciicn/not-found.tsx"
        }
      ]
    },
    {
      "name": "terminal-window",
      "type": "registry:component",
      "title": "Terminal window",
      "description": "A terminal window framed in box-drawing glyphs that plays a scripted session: typed commands, streamed output, spinners, block progress bars and coloured ok, warn and error lines.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-box.json",
        "https://asciicn.dev/r/loader.json",
        "https://asciicn.dev/r/progress-bar.json"
      ],
      "files": [
        {
          "path": "components/asciicn/terminal-window.tsx",
          "type": "registry:component",
          "target": "components/asciicn/terminal-window.tsx"
        }
      ]
    },
    {
      "name": "ascii-badge",
      "type": "registry:component",
      "title": "ASCII badge",
      "description": "A status badge set in glyphs, such as [ OK ], < beta > or ┤ v2 ├, with tones from the palette, a fixed width for aligned columns and an optional live dot.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-badge.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-badge.tsx"
        }
      ]
    },
    {
      "name": "ascii-tabs",
      "type": "registry:component",
      "title": "ASCII tabs",
      "description": "Tabs drawn as box-drawing folder tabs or a sliding glyph underline, with arrow-key navigation and a roving tab stop.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-tabs.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-tabs.tsx"
        }
      ]
    },
    {
      "name": "kbd-shortcut",
      "type": "registry:component",
      "title": "Keyboard shortcut",
      "description": "Keyboard shortcuts drawn as box-drawing keycaps, with Mac and PC labels and caps that press down while the visitor holds the keys.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/kbd-shortcut.tsx",
          "type": "registry:component",
          "target": "components/asciicn/kbd-shortcut.tsx"
        }
      ]
    },
    {
      "name": "status-dot",
      "type": "registry:component",
      "title": "Status dot",
      "description": "A one-glyph status indicator for online, busy, offline and error, with a distinct shape per state and a ping, turn or flash in glyphs.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/status-dot.tsx",
          "type": "registry:component",
          "target": "components/asciicn/status-dot.tsx"
        }
      ]
    },
    {
      "name": "glyph-trail",
      "type": "registry:component",
      "title": "Glyph trail",
      "description": "A layer where the pointer paints glyphs that burn bright, cool through the charset and drift away like smoke, with a slow wanderer when nobody draws.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/glyph-trail.tsx",
          "type": "registry:component",
          "target": "components/asciicn/glyph-trail.tsx"
        }
      ]
    },
    {
      "name": "redwood-light",
      "type": "registry:component",
      "title": "Redwood light",
      "description": "A redwood forest in early morning: giant trunks fading into blue-green haze, golden light shafts slanting onto a fern floor, and slow motes drifting in the light.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/redwood-light.tsx",
          "type": "registry:component",
          "target": "components/asciicn/redwood-light.tsx"
        }
      ]
    },
    {
      "name": "balloon-valley",
      "type": "registry:component",
      "title": "Balloon valley",
      "description": "Early morning over a river valley in halftone dots on cream: cool blue hills fading into haze, pale gold mist, a river catching the low sun and hot-air balloons at different depths.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/balloon-valley.tsx",
          "type": "registry:component",
          "target": "components/asciicn/balloon-valley.tsx"
        }
      ]
    },
    {
      "name": "canyon-river",
      "type": "registry:component",
      "title": "Canyon river",
      "description": "A desert canyon in late golden hour from a high rim: sunlit terracotta walls with blue shadows step back to glowing buttes while a river winds below, mirroring the blue sky.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/canyon-river.tsx",
          "type": "registry:component",
          "target": "components/asciicn/canyon-river.tsx"
        }
      ]
    },
    {
      "name": "lighthouse",
      "type": "registry:component",
      "title": "Lighthouse",
      "description": "A lighthouse on a rocky headland at blue hour, its lamp glowing amber over a calm sea, painted in halftone dots.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/lighthouse.tsx",
          "type": "registry:component",
          "target": "components/asciicn/lighthouse.tsx"
        }
      ]
    },
    {
      "name": "glacier-lagoon",
      "type": "registry:component",
      "title": "Glacier lagoon",
      "description": "Icebergs glowing blue-white on a glassy lagoon below a glacier and dark peaks, under a midnight sun sitting gold and rose on the horizon.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/glacier-lagoon.tsx",
          "type": "registry:component",
          "target": "components/asciicn/glacier-lagoon.tsx"
        }
      ]
    },
    {
      "name": "rice-terraces",
      "type": "registry:component",
      "title": "Rice terraces",
      "description": "Flooded rice terraces at a fresh dawn: silver-blue fields between dark earthen banks with lit grassy tops, mist in the valley and far ridges fading into haze.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/rice-terraces.tsx",
          "type": "registry:component",
          "target": "components/asciicn/rice-terraces.tsx"
        }
      ]
    },
    {
      "name": "torus-knot",
      "type": "registry:component",
      "title": "Torus knot",
      "description": "A lit 3D torus knot tumbling in glyphs, with p and q windings, a breaks-at-crossings outline and drag to turn.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/torus-knot.tsx",
          "type": "registry:component",
          "target": "components/asciicn/torus-knot.tsx"
        }
      ]
    },
    {
      "name": "synthwave-sun",
      "type": "registry:component",
      "title": "Synthwave sun",
      "description": "An outrun grid rolling toward a sliced setting sun, between a wireframe ridge and under a glowing horizon.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/synthwave-sun.tsx",
          "type": "registry:component",
          "target": "components/asciicn/synthwave-sun.tsx"
        }
      ]
    },
    {
      "name": "retro-computer",
      "type": "registry:component",
      "title": "Retro computer",
      "description": "A vintage workstation in glyphs: a CRT on a desktop unit and a keyboard, its screen typing a live session in real characters.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/retro-computer.tsx",
          "type": "registry:component",
          "target": "components/asciicn/retro-computer.tsx"
        }
      ]
    },
    {
      "name": "dna-helix",
      "type": "registry:component",
      "title": "DNA helix",
      "description": "A rotating double helix in glyphs, with lit backbones that pass in front of each other and base-pair rungs coloured by base.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/dna-helix.tsx",
          "type": "registry:component",
          "target": "components/asciicn/dna-helix.tsx"
        }
      ]
    },
    {
      "name": "cyber-skull",
      "type": "registry:component",
      "title": "Cyber skull",
      "description": "A rotating low-poly skull in glyphs, lit to tones with edge-glyph wireframe, a hinged jaw, glowing eyes and a scan band.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/cyber-skull.tsx",
          "type": "registry:component",
          "target": "components/asciicn/cyber-skull.tsx"
        }
      ]
    },
    {
      "name": "server-rack",
      "type": "registry:component",
      "title": "Server rack",
      "description": "A data-centre rack in box-drawing glyphs, with drive LEDs that flicker in busy spells, a slow heartbeat, port lights and light pulses running along the fibres.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/server-rack.tsx",
          "type": "registry:component",
          "target": "components/asciicn/server-rack.tsx"
        }
      ]
    },
    {
      "name": "mountain-dusk",
      "type": "registry:component",
      "title": "Mountain dusk",
      "description": "Layered ridgelines fading into evening haze, with a setting sun, a rising moon, stars coming out, the odd shooting star and mist in the valleys.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/mountain-dusk.tsx",
          "type": "registry:component",
          "target": "components/asciicn/mountain-dusk.tsx"
        }
      ]
    },
    {
      "name": "ocean-waves",
      "type": "registry:component",
      "title": "Ocean waves",
      "description": "A moonlit sea in glyphs, with swells rolling in, foam that breaks into lighter glyphs on the crests, a glittering moon path and slow clouds.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ocean-waves.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ocean-waves.tsx"
        }
      ]
    },
    {
      "name": "black-hole",
      "type": "registry:component",
      "title": "Black hole",
      "description": "A black hole seen close to edge-on: a thin disk lensed over and under a black shadow, a sharp photon ring and slow streaks flowing round.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/ascii-shader.json"
      ],
      "files": [
        {
          "path": "components/asciicn/black-hole.tsx",
          "type": "registry:component",
          "target": "components/asciicn/black-hole.tsx"
        }
      ]
    },
    {
      "name": "ascii-globe",
      "type": "registry:component",
      "title": "ASCII globe",
      "description": "A lit, rotating planet in glyphs with a day and night terminator, ocean glints, an atmosphere, markers and arcs.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json",
        "https://asciicn.dev/r/world-land.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-globe.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-globe.tsx"
        }
      ]
    },
    {
      "name": "ascii-donut",
      "type": "registry:component",
      "title": "ASCII donut",
      "description": "A lit, ray-marched torus spinning in glyphs, with specular highlights, a rim light and drag to spin.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-donut.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-donut.tsx"
        }
      ]
    },
    {
      "name": "ascii-shader",
      "type": "registry:lib",
      "title": "ASCII shader",
      "description": "The WebGL2 renderer: any GLSL field drawn as real glyphs from a device-exact glyph atlas, with every charset, colour mode, CRT post effects, pointer interaction and audio-reactive input. Pauses offscreen and shares a WebGL context budget across the page.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "lib/ascii/shader.tsx",
          "type": "registry:lib",
          "target": "lib/ascii/shader.tsx"
        },
        {
          "path": "lib/ascii/gpu.ts",
          "type": "registry:lib",
          "target": "lib/ascii/gpu.ts"
        },
        {
          "path": "lib/ascii/glsl.ts",
          "type": "registry:lib",
          "target": "lib/ascii/glsl.ts"
        },
        {
          "path": "lib/ascii/seed.ts",
          "type": "registry:lib",
          "target": "lib/ascii/seed.ts"
        }
      ]
    },
    {
      "name": "glitch-text",
      "type": "registry:component",
      "title": "Glitch text",
      "description": "Text that glitches in short bursts, with slices jumping sideways, letters swapped for block and box glyphs and a colour split, then snaps back clean.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/glitch-text.tsx",
          "type": "registry:component",
          "target": "components/asciicn/glitch-text.tsx"
        }
      ]
    },
    {
      "name": "typewriter-text",
      "type": "registry:component",
      "title": "Typewriter text",
      "description": "Terminal typing with uneven keystrokes, a block, underscore or bar cursor, an optional prompt and backspacing through a list of phrases.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/typewriter-text.tsx",
          "type": "registry:component",
          "target": "components/asciicn/typewriter-text.tsx"
        }
      ]
    },
    {
      "name": "ascii-marquee",
      "type": "registry:component",
      "title": "ASCII marquee",
      "description": "A ticker framed in box-drawing rules that steps one glyph at a time, with bullet separators, coloured price changes and an optional second row in reverse.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-marquee.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-marquee.tsx"
        }
      ]
    },
    {
      "name": "glyph-rain",
      "type": "registry:component",
      "title": "Glyph rain",
      "description": "Falling glyphs gather into a message, then fade and form again.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/glyph-rain.tsx",
          "type": "registry:component",
          "target": "components/asciicn/glyph-rain.tsx"
        }
      ]
    },
    {
      "name": "ascii-text",
      "type": "registry:component",
      "title": "ASCII text",
      "description": "Display type drawn as ASCII art in any charset, with an optional decode, scan or wipe reveal, while the real text stays in the page.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-text.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-text.tsx"
        }
      ]
    },
    {
      "name": "scramble-text",
      "type": "registry:component",
      "title": "Scramble text",
      "description": "Text whose characters cycle through katakana, braille, CP437, PETSCII or symbol glyphs and settle left to right, without moving the layout.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/scramble-text.tsx",
          "type": "registry:component",
          "target": "components/asciicn/scramble-text.tsx"
        }
      ]
    },
    {
      "name": "ascii-countdown",
      "type": "registry:component",
      "title": "ASCII countdown",
      "description": "A launch countdown in big glyph digits that scramble as they change.",
      "registryDependencies": [
        "https://asciicn.dev/r/ascii-core.json"
      ],
      "files": [
        {
          "path": "components/asciicn/ascii-countdown.tsx",
          "type": "registry:component",
          "target": "components/asciicn/ascii-countdown.tsx"
        }
      ]
    },
    {
      "name": "ascii-tokens",
      "type": "registry:item",
      "title": "ASCII tokens",
      "description": "CSS variables every asciicn piece reads: glyph ink and paper, cell size, glyph font, glow strength and the named series colours (blue, purple, green, pink, orange, red, grey), tuned for light and dark.",
      "cssVars": {
        "theme": {
          "color-ascii-ink": "var(--ascii-ink)",
          "color-ascii-paper": "var(--ascii-paper)",
          "color-ascii-blue": "var(--ascii-color-blue)",
          "color-ascii-purple": "var(--ascii-color-purple)",
          "color-ascii-green": "var(--ascii-color-green)",
          "color-ascii-pink": "var(--ascii-color-pink)",
          "color-ascii-orange": "var(--ascii-color-orange)",
          "color-ascii-red": "var(--ascii-color-red)",
          "color-ascii-grey": "var(--ascii-color-grey)"
        }
      },
      "css": {
        "@layer base": {
          ":root": {
            "--ascii-ink": "var(--primary)",
            "--ascii-paper": "var(--background)",
            "--ascii-cell": "12px",
            "--ascii-font": "ui-monospace, \"Cascadia Mono\", \"SF Mono\", \"JetBrains Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", \"Noto Sans Mono\", monospace",
            "--ascii-glow": "0.35",
            "--ascii-bloom": "var(--ascii-glow)",
            "--ascii-color-blue": "oklch(0.55 0.17 250)",
            "--ascii-color-purple": "oklch(0.53 0.2 302)",
            "--ascii-color-green": "oklch(0.56 0.15 150)",
            "--ascii-color-pink": "oklch(0.57 0.2 355)",
            "--ascii-color-orange": "oklch(0.62 0.16 52)",
            "--ascii-color-red": "oklch(0.55 0.2 27)",
            "--ascii-color-grey": "oklch(0.56 0.01 250)"
          },
          ".dark": {
            "--ascii-ink": "var(--primary)",
            "--ascii-paper": "var(--background)",
            "--ascii-glow": "0.9",
            "--ascii-color-blue": "oklch(0.72 0.14 240)",
            "--ascii-color-purple": "oklch(0.72 0.17 304)",
            "--ascii-color-green": "oklch(0.8 0.17 150)",
            "--ascii-color-pink": "oklch(0.74 0.17 354)",
            "--ascii-color-orange": "oklch(0.79 0.15 62)",
            "--ascii-color-red": "oklch(0.69 0.19 25)",
            "--ascii-color-grey": "oklch(0.66 0.01 250)"
          }
        }
      }
    }
  ],
  "name": "asciicn"
}
