Skip to content

Latest commit

Β 

History

History
126 lines (108 loc) Β· 16.6 KB

File metadata and controls

126 lines (108 loc) Β· 16.6 KB

Upstream β†’ SugarCraft matchup

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 under docs/lib/ must update too. The contributor playbook in AGENTS.md walks 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>)

Charmbracelet libraries

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 🟒

Apps

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

Naming conventions (cheat sheet)

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.


How to add a new row

  1. Pick the upstream repo and the SugarCraft prefix + suffix following the cheat sheet above.
  2. Add a row to the matching table here (libraries vs apps).
  3. Add the same name + prefix discussion to PROJECT_NAMES.md β€” this is the canonical place for naming-decision history.
  4. Follow the contributor playbook in AGENTS.md for the rest of the integration (composer.json, examples, tests, docs, website tile, VHS demo).