The canonical map from each upstream Go (or other-language) project to its
SugarCraft port. Source-of-truth for library identity: when adding a
new port, link the upstream repo here first, then thread the same row
into PROJECT_NAMES.md and the website
(docs/index.html).
When this file changes, the corresponding row in
docs/index.html(homepage lib / app grids) and the per-lib detail page underdocs/lib/must update too. The contributor playbook inAGENTS.mdwalks through the full add-a-lib flow.
Status legend:
- π’ v1 ready (public API + tests + docs + demo)
- π‘ in progress (some surface shipped, gaps tracked in the audit)
- π΄ planning (entry exists but no code yet)
- π split into its own repo (lives under
github.com/sugarcraft/<name>)
| Upstream | SugarCraft port | Subdir | Composer pkg | Namespace | Status | Role |
|---|---|---|---|---|---|---|
| β (pioneering) | CandyAsync | candy-async/ |
sugarcraft/candy-async |
SugarCraft\Async |
π | Shared async vocabulary β CancellationToken, Subscriptions, AsyncOps (withTimeout, retry, debounce, throttle). No upstream parallel β shared foundation for ReactPHP usage across the monorepo. |
| charmbracelet/bubbletea | SugarCraft | candy-core/ |
sugarcraft/candy-core |
SugarCraft\Core |
π’ | Elm-architecture TUI runtime |
| charmbracelet/lipgloss | CandySprinkles | candy-sprinkles/ |
sugarcraft/candy-sprinkles |
SugarCraft\Sprinkles |
π’ | Declarative styling + layout |
| charmbracelet/harmonica | HoneyBounce | honey-bounce/ |
sugarcraft/honey-bounce |
SugarCraft\Bounce |
π’ | Spring physics + Newtonian projectile sim |
| lrstanley/bubblezone | CandyMouse | candy-mouse/ |
sugarcraft/candy-mouse |
SugarCraft\Mouse |
π’ | Canonical bubblezone port β self-contained Mark/Scan/Get mouse hit-testing + ZoneClickTracker (bubblezone issue #10 fix). CandyZone is the TEA-facing faΓ§ade layered over this. |
| β³ faΓ§ade over CandyMouse (bubblezone) | CandyZone | candy-zone/ |
sugarcraft/candy-zone |
SugarCraft\Zone |
π’ | TEA-facing faΓ§ade over candy-mouse β Manager plus hover / drag / multi-click trackers and package-level Zones. Delegates Mark/Scan to SugarCraft\Mouse; not a second bubblezone port. |
| charmbracelet/bubbles | SugarBits | sugar-bits/ |
sugarcraft/sugar-bits |
SugarCraft\Bits |
π‘ | 14 prebuilt components (TextInput, ItemList, Table, β¦) |
| NimbleMarkets/ntcharts | SugarCharts | sugar-charts/ |
sugarcraft/sugar-charts |
SugarCraft\Charts |
π‘ | Sparkline / Bar / Line / Heatmap / Scatter / TimeSeries / OHLC / picture |
| charmbracelet/huh | SugarPrompt | sugar-prompt/ |
sugarcraft/sugar-prompt |
SugarCraft\Prompt |
π’ | Form library β Note / Input / Confirm / Select / MultiSelect / Text / FilePicker |
| charmbracelet/glamour | CandyShine | candy-shine/ |
sugarcraft/candy-shine |
SugarCraft\Shine |
π‘ | Markdown β ANSI renderer (themes, syntax, OSC 8 hyperlinks) |
| charmbracelet/fang | CandyKit | candy-kit/ |
sugarcraft/candy-kit |
SugarCraft\Kit |
π’ | CLI presentation helpers (StatusLine / Banner / Section / Stage / HelpText) |
| charmbracelet/wish | CandyWish | candy-wish/ |
sugarcraft/candy-wish |
SugarCraft\Wish |
π’ | SSH-server middleware framework (leans on host sshd); pluggable Transport: InProcessTransport (default β candy-pty supervisor + Spawn middleware) or HostSshdTransport (legacy, opt-in β inline middleware + BubbleTea) |
| charmbracelet/promwish | CandyMetrics | candy-metrics/ |
sugarcraft/candy-metrics |
SugarCraft\Metrics |
π’ | Telemetry primitives + CandyWish session middleware |
| charmbracelet/log | CandyLog | candy-log/ |
sugarcraft/candy-log |
SugarCraft\Log |
π’ | Minimal, colorful logging library |
| charmbracelet/colorprofile | CandyPalette | candy-palette/ |
sugarcraft/candy-palette |
SugarCraft\Palette |
π’ | Terminal color detection + ICC profile handling |
| charmbracelet/x/mosaic | CandyMosaic | candy-mosaic/ |
sugarcraft/candy-mosaic |
SugarCraft\Mosaic |
π’ | Image-to-cell renderer (Sixel, Kitty, iTerm2, Unicode half-block); Picker facade; ext-gd |
| charmbracelet/x/vt | CandyVt | candy-vt/ |
sugarcraft/candy-vt |
SugarCraft\Vt |
π‘ | In-memory virtual terminal emulator; ANSI byte stream β cell grid + cursor + mode state |
| charmbracelet/x/ansi | CandyAnsi | candy-ansi/ |
sugarcraft/candy-ansi |
SugarCraft\Ansi |
π’ | ANSI escape-sequence parser and state machine (SGR, cursor, erase, DEC modes); feeds into CandyVt for cell-grid rendering |
| charmbracelet/vte | CandyBuffer | candy-buffer/ |
sugarcraft/candy-buffer |
SugarCraft\Buffer |
π’ | Cell-grid value objects β Buffer (2-D cell grid) and Cell (rune/style/link/width); shared foundation for all rendering; Buffer::diff() ships in step-26 |
| charmbracelet/x/vcr | CandyVcr | candy-vcr/ |
sugarcraft/candy-vcr |
SugarCraft\Vcr |
π’ | Record + replay candy-core sessions β JSONL/YAML cassettes, Recorder hook, Player + Byte/Screen assertions, CLI |
| charmbracelet/x/xpty | CandyPty | candy-pty/ |
sugarcraft/candy-pty |
SugarCraft\Pty |
π’ | PTY primitive (Linux + macOS) β contract interfaces (PtySystem / MasterPty / SlavePty / Child / Process / Pump / Termios) + PosixPtySystem, PosixPtyPair, PosixMasterPty, PosixSlavePty, PosixChild, PosixProcess (non-PTY spawn), PosixPump (byte pump w/ EOF grace + SIGWINCH + keepalive callbacks), ChildPollTrait (shared proc_get_status lifecycle), PosixTermios (FFI) + SttyTermios (fallback), TermiosFactory, SizeIoctl, SignalForwarder, PtySystemFactory (DI-friendly resolution; UnsupportedPlatformException on Windows). Legacy facades (Pty, Spawn, Child) remain @deprecated through v1.x. Opt-in TIOCSCTTY via controllingTerminal: true (Ctrl+C β SIGINT) using bin/pty-shim.php; all syscalls via FFI to libc. |
| β (extracted from sugar-bits + sugar-prompt) | CandyForms | candy-forms/ |
sugarcraft/candy-forms |
SugarCraft\Forms |
π‘ | Foundation: form primitives (TextInput, TextArea, ItemList, Viewport, FilePicker, Field interface, Confirm, Form) β extraction in progress |
| charmbracelet/bubbles (focus) β original | CandyFocus | candy-focus/ |
sugarcraft/candy-focus |
SugarCraft\Focus |
π’ | Dependency-free focus ring β ordered focusable regions with a single focused member + wrap-around Tab/Shift-Tab traversal. No 1:1 upstream; original SugarCraft component inspired by bubbles' focus handling and sugar-dash's FocusManager. |
| charmbracelet/bubbles (list/viewport) β original | SugarGallery | sugar-gallery/ |
sugarcraft/sugar-gallery |
SugarCraft\Gallery |
π’ | Poster grids & rails for media TUIs β a 2-D virtualized, sparse, absolute-indexed PosterGrid with owner-driven need-range paging (+ optional candy-zone mouse), a horizontal Rail carousel, and a renderer-agnostic PosterCard tile. No 1:1 upstream; original SugarCraft component inspired by bubbles' list/viewport and the phlix web media grid. |
| sahilm/fuzzy (Go) + internal | CandyFuzzy | candy-fuzzy/ |
sugarcraft/candy-fuzzy |
SugarCraft\Fuzzy |
π’ | Fuzzy string matching with scored matched indices β Smith-Waterman + Sahilm algorithms. Unblocks filter-highlighting UI across the ecosystem. Extracted from candy-forms. |
| ratatui/ratatui | CandyLayout | candy-layout/ |
sugarcraft/candy-layout |
SugarCraft\Layout |
π‘ | Foundation: Cassowary simplex + greedy constraint solvers for terminal layout |
| β (pioneering) | CandyTesting | candy-testing/ |
sugarcraft/candy-testing |
SugarCraft\Testing |
π | Test harness for TEA programs β ProgramSimulator, golden-file assertions, snapshot helpers. No upstream parallel β pioneering what bubble-tea issue #1654 never shipped. |
| β (pioneering) | CandyInput | candy-input/ |
sugarcraft/candy-input |
SugarCraft\Input |
π | Terminal escape sequence decoder β legacy keys, Kitty keyboard protocol (CSI ?u), SGR 1006 mouse, focus events, bracketed paste. No upstream parallel β the missing input layer for PHP TUI; unblocks sugar-readline production use. |
| treilik/bubblelister | CandyLister | candy-lister/ |
sugarcraft/candy-lister |
SugarCraft\Lister |
π’ | |
| treilik/bubbleboxer | SugarBoxer | sugar-boxer/ |
sugarcraft/sugar-boxer |
SugarCraft\Boxer |
π’ | |
| rmhubbert/bubbletea-overlay | SugarVeil | sugar-veil/ |
sugarcraft/sugar-veil |
SugarCraft\Veil |
π’ | |
| KevM/bubbleo | SugarCrumbs | sugar-crumbs/ |
sugarcraft/sugar-crumbs |
SugarCraft\Crumbs |
π’ | |
| charmbracelet/bubble-grid | SugarDash | sugar-dash/ |
sugarcraft/sugar-dash |
SugarCraft\Dash |
π’ | |
| Genekkion/theHermit | CandyHermit | candy-hermit/ |
sugarcraft/candy-hermit |
SugarCraft\Hermit |
π’ | |
| Evertras/bubble-table | SugarTable | sugar-table/ |
sugarcraft/sugar-table |
SugarCraft\Table |
π’ | |
| erikgeiser/promptkit | SugarReadline | sugar-readline/ |
sugarcraft/sugar-readline |
SugarCraft\Readline |
π’ | |
| EthanEFung/bubble-datepicker | SugarCalendar | sugar-calendar/ |
sugarcraft/sugar-calendar |
SugarCraft\Calendar |
π’ | |
| DaltonSW/bubbleup | SugarToast | sugar-toast/ |
sugarcraft/sugar-toast |
SugarCraft\Toast |
π’ | |
| 76creates/stickers | SugarStickers | sugar-stickers/ |
sugarcraft/sugar-stickers |
SugarCraft\Stickers |
π’ |
| Upstream | SugarCraft port | Subdir | Composer pkg | Namespace | Status | Role |
|---|---|---|---|---|---|---|
| starter scaffold | CandyMold | candy-mold/ |
sugarcraft/candy-mold |
App\ |
π’ | composer create-project skeleton β counter Model + bin + tests |
| charmbracelet/gum | CandyShell | candy-shell/ |
sugarcraft/candy-shell |
SugarCraft\Shell |
π‘ | Composer-installable CLI of 13 subcommands |
| charmbracelet/freeze | CandyFreeze | candy-freeze/ |
sugarcraft/candy-freeze |
SugarCraft\Freeze |
π’ | Code β SVG screenshot (no GD / Imagick required) |
| charmbracelet/glow | SugarGlow | sugar-glow/ |
sugarcraft/sugar-glow |
SugarCraft\Glow |
π’ | Markdown CLI viewer / pager (consumes CandyShine) |
| charmbracelet/sequin | SugarSpark | sugar-spark/ |
sugarcraft/sugar-spark |
SugarCraft\Spark |
π’ | ANSI escape-sequence inspector |
| charmbracelet/wishlist | SugarWishlist | sugar-wishlist/ |
sugarcraft/sugar-wishlist |
SugarCraft\Wishlist |
π’ | SSH endpoint launcher (YAML / JSON shortcuts directory) |
| charmbracelet/skate | SugarSkate | sugar-skate/ |
sugarcraft/sugar-skate |
SugarCraft\Skate |
π’ | Personal key/value store |
| charmbracelet/pop | SugarPost | sugar-post/ |
sugarcraft/sugar-post |
SugarCraft\Post |
π’ | |
| charmbracelet/soft-serve | CandyServe | candy-serve/ |
sugarcraft/candy-serve |
SugarCraft\Serve |
π’ | |
| charmbracelet/crush | SugarCrush | sugar-crush/ |
sugarcraft/sugar-crush |
SugarCraft\Crush |
π’ | TUI AI coding agent β 7 providers, tools, skills, hooks, agents, MCP, SQLite sessions |
| Broderick-Westrope/tetrigo | CandyTetris | candy-tetris/ |
sugarcraft/candy-tetris |
SugarCraft\Tetris |
π’ | Tetris clone β SRS / 7-bag / NES scoring |
| yorukot/superfile | CandyFiles | candy-files/ |
sugarcraft/candy-files |
SugarCraft\Files |
π’ | Dual-pane file manager |
| jesseduffield/lazygit | SugarStash | sugar-stash/ |
sugarcraft/sugar-stash |
SugarCraft\Stash |
π’ | Three-pane git TUI β shells out to git |
| jorgerojas26/lazysql | CandyQuery | candy-query/ |
sugarcraft/candy-query |
SugarCraft\Query |
π’ | SQLite/MySQL/PostgreSQL browser TUI β schema introspection, query editor, EXPLAIN plans, server status, alerting, query history |
| Rtarun3606k/TakaTime | SugarTick | sugar-tick/ |
sugarcraft/sugar-tick |
SugarCraft\Tick |
π’ | Privacy-first coding-time tracker β JSONL on disk |
| maxpaulus43/go-sweep | CandyMines | candy-mines/ |
sugarcraft/candy-mines |
SugarCraft\Mines |
π’ | Minesweeper β first-click safety / flood-fill |
| namzug16/gifterm | CandyFlip | candy-flip/ |
sugarcraft/candy-flip |
SugarCraft\Flip |
π’ | ASCII GIF viewer (ext-gd) |
| maxcurzi/tplay Β· seatedro/glyph Β· joelibaceta/video-to-ascii | SugarReel | sugar-reel/ |
sugarcraft/sugar-reel |
SugarCraft\Reel |
π’ | Terminal video player (mp4 β ascii/ansi/half-block/sixel/kitty); no single upstream β ffmpeg pipe + pure-PHP GIF fallback, delta repaint, seek, speed, audio companion |
| kbrgl/flapioca | HoneyFlap | honey-flap/ |
sugarcraft/honey-flap |
SugarCraft\Flap |
π’ | Flappy Bird clone β bird is a HoneyBounce projectile |
The SugarCraft brand has three prefixes β pick one when you add a new port. Suffixes are short, technical, and describe the role.
| Prefix | Meaning | Example uses |
|---|---|---|
| Candy- | foundation / system / framework | runtime (SugarCraft), shell (CandyShell), markdown (CandyShine) |
| Sugar- | components / data / forms / apps | components (SugarBits), forms (SugarPrompt), charts (SugarCharts) |
| Honey- | math / physics / motion | spring physics (HoneyBounce), Flappy clone (HoneyFlap) |
Candy- (Files) is the file manager naming. Don't mint new prefixes without a discussion in
PROJECT_NAMES.md.
- Pick the upstream repo and the SugarCraft prefix + suffix following the cheat sheet above.
- Add a row to the matching table here (libraries vs apps).
- Add the same name + prefix discussion to
PROJECT_NAMES.mdβ this is the canonical place for naming-decision history. - Follow the contributor playbook in
AGENTS.mdfor the rest of the integration (composer.json, examples, tests, docs, website tile, VHS demo).