- feat(picture): add automatic tmux passthrough wrapping for Kitty graphics. Added
NTCHARTS_TMUX_PASSTHROUGHandNTCHARTS_KITTYenvironment variables for easy runtime overrides. - feat(kitty): add
kitty-probetest program - feat(ci): Restructure
go.modinto subdirectories, to shield users from unnecessary dependencies. - feat(picture): Add
picture/decoderspackage for automatic registration ofImagedecoders like PNG. Previously,picturewould pulled these in automatically, even if one didn't need it. BREAKING
- feat(picture): detect Kitty graphics support and gate Toggle on capability. In other words, don't blast the terminal with characters when it doesn't support Kitty graphics.
QueryKittySupportgates the probe based on environment variables;ForceKittyCapabilitycan override detection. - feat(picture): add
GridImagefor composing logical-cell boards and sprites into a single image for grid-aligned Kitty UIs. The config uses explicit logical-grid and terminal-cells-per-cell fields, defaults to nearest-neighbor scaling for crisp board/tile sprites, and includes a full-boardDrawOverlayhelper for grid lines and effects. - feat(picture): add
FitAnchor(AnchorCenter,AnchorTop,AnchorBottom,AnchorLeft,AnchorRight) forFitCovercropping.Config.AnchorandModel.Anchor()/Model.SetAnchor()let callers preserve a specific edge when cover-scaling overflows; the zero value remainsAnchorCenter, matching previous center-crop behavior.chartpicture,heatpicture, andpictureurlforward the same anchor config/accessors for API parity. - feat(picture): add
KittyResolutionFactorto scale encoded Kitty image resolution, saving rendering bandwidth and CPU. - feat(yomamma): add Mother's Day example app.
- feat(wasm): add cooperative yielding (
yieldToJS) during heavy rendering, and enhance web demo UI and builder. - fix(examples): enable AltScreen in full-screen views to restore terminal state on exit.
- fix(kitty): improve rendering robustness under Kitty graphics (geometry-based staleness, deferred commits, capability timeouts).
- Various bug fixes and performance improvements.
- BREAKING (visual only):
picture.Modelin Kitty mode now defaults toFitContain(preserve aspect ratio, letterbox) instead of stretching to fill the cell rectangle. Glyph and Kitty paths now produce identical aspect ratio. Restore previous Kitty behavior withpicture.Config{Fit: picture.FitFill}. - feat(picture): add
FitMode(FitContain,FitFill,FitCover),Config.Fit,Model.Fit(),Model.SetFit(). Both render paths flow through a sharedprepareSourcehelper so fit semantics are applied identically in Glyph and Kitty modes.chartpicture,heatpicture, andpictureurladd the sameConfig.Fitfield andFit()/SetFit()forwarders for API parity. - fix(picture): Glyph mode uses ansimage's
ScaleModeResize(rather thanScaleModeFit) so terminals reporting non-1:2 cell pixel ratios (line-spacing, retina cells) no longer cause Glyph to letterbox while Kitty fills.prepareSourcealready applies the chosenFitMode, so the half-block grid just renders the prepared bitmap at exactly(cols, rows*2). - feat(examples/picture):
fkey cycles fit modes (Contain → Fill → Cover) on both panes; footer shows the current fit. - Replace
github.com/eliukblau/pixterm => github.com/NimbleMarkets/pixtermuntil bugfixes are upstreamed - fix(kitty): geometry-change renders now delete the previous placement before re-transmitting, fixing stuck-at-old-geometry behavior in Ghostty (and other terminals where TransmitAndPut at new c/r doesn't relocate an already-on-screen virtual placement)
- Add web-based demos using
go-booba - feat(picture): add
Config.CellPixelWidth/CellPixelHeight,Model.SetCellPixelSize/CellPixelSize, andModel.Init/
RequestCellSize - fix(canvas,picture): clamp negative dims to 0 in
canvas.Model.Resize,
picture.Model.SetSize, andchartpicture.Model.SetSize - feat: add
picture/heatpicture— continuous-field heatmap rendered throughpicture.Model. Sampler-driven (func(x, y float64) float64); Kitty mode samples at full terminal-pixel resolution for smooth gradients, Glyph mode samples at half-block resolution for fast fallback. Includes a render throttle (one in-flight at a time, with dirty-flush follow-up) and a runtimeSamplingFactorknob to trade quality for animation smoothness on large terminals. Newexamples/heatpicture/perlindemo.
chartpicture is experimental. It renders charts as images; it can also bridge Apache ECharts. It is not very useful unless your terminal supports the Kitty Graphics Protocol. We are exploring how to improve it, but wanted to share with the community.
- feat: add
picture/chartpicturepackage — renders github.com/go-analyze/charts chart images via the embeddedpicture.Modelchartpicture.Modelproduces chart frames asynchronously throughtea.Cmd- Recipes for common sources:
WithLineRecipe,WithBarRecipe,WithEChartsJSONRecipe,WithPainterFuncRecipe - Configurable via
WithChartSource,WithRecipe,WithKittyID,WithBackground,WithTheme - Bridges
barchart.Modelandlinechart.Modeldirectly via the newbarchart.Model.Data()accessor
- fix: propagate streamlinechart height fix to wave/timeserieslinechart (#7)
- Correctness and security fixes
- feat: add
pictureandpictureurl - feat: add controls to prevent intentional or accidental memory bombs (#12 #17)
- add
DefaultMaxPointsglobal andconfig.MaxInterpolationPoints - add
GetLinePointsWithLimitandGetCirclePointsWithLimit
- add
- chore: update Golang dependencies
- feat: Support millisecond resolution in timeseries line chart (#15)
- fix: linechart label glitch (#16)
- ci: Update GitHub Action versions and add test phase
- Upgrade to BubbleTea v2.0.0 -- official release! 🎉
- Fix incorrect height in streamlinechart (#7)
This was teased out by adding better test scaffolding and then asking an LLM for help.
- Upgrade to BubbleTea v2. This lives in the
v2branches. - Thanks to @kpumuk for this contribution.
NOTE: The v2 designation is for BubbleTea API compatibility. The ntcharts API is still subject to change, as indicated by beta.
- Bug fixes and added GitHub Actions to test builds
- Sanitize AoC example
Initial Heatmap support is here! 🎉 It is still missing axis labels and better UX. We are still exploring the API. Please provide feedback on GitHub.
- ADD: Initial heatmap support (#2)
- FIX:
canvas.SetRunedid not honor Canvas' default style. - ADD:
canvas.SetRuneWithStyleandcanvas.GetCellStyle
- Add candlestick/OHLC support with (#3)
- Added
ntcharts-ohlcexample - Thanks to @tonyling for this work.
- Fix pkgsite documentation and badges.
- Welcome to the world
ntcharts! 🎉