finds.dev← search

// the find

ahmadawais/chartli

★ 793 · TypeScript · updated Mar 2026

CLI that turns plain numbers into terminal charts. ascii, spark, bars, columns, heatmap, unicode, braille, svg.

chartli is a Node CLI that reads numeric text/CSV and renders it as a terminal chart in one of eight formats (ascii, spark, bars, columns, heatmap, unicode, braille, svg). It's aimed at developers who want a quick visual on data living in a pipe or log file without opening a notebook or a browser.

Format coverage is unusually wide for this category — unicode block charts, braille dot-matrix, and an actual SVG writer all live in the same tool, plus axis labels, series labels, and a --first-column-x flag for treating a column as the domain. There's a second, independent implementation of the same chart logic written in Rust (rust/src/charts/*.rs), compiled and wrapped for npm distribution via rust/npm/bin/chartlir.js, which suggests someone actually cared about Node startup latency rather than just shipping a toy. Test files are split per renderer (ascii, braille, svg, unicode, normalize) and the project uses biome + tsup + vitest, a normal modern toolchain rather than a bespoke build.

Running two parallel implementations of the same rendering logic (TypeScript in src/, Rust in rust/src/) with no shared spec or fixtures between them is a real maintenance risk — nothing in the README says which one npx chartli actually runs, and feature drift between the two will be invisible until a user hits it. The only GitHub Actions workflow is release-rust.yml; there's no visible CI step running the vitest suite or biome lint on PRs, so the tests that exist are not actually enforced. The input format itself is undocumented — every example just points at a pre-made .txt file, and nothing explains the delimiter rules, header detection, or how --first-column-x decides a column is a label versus data, so you're reverse-engineering the parser from sample files. The repo also carries .commandcode/taste/taste.md scaffolding in both the root and rust/ directories, which signals a non-trivial chunk of this was AI-generated boilerplate rather than hand-written — worth spot-checking the chart math itself for the same treatment before trusting edge cases like uneven series lengths.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →