Skip to content

Supported Inputs

Vizb reads generic tables and benchmark output. Use --parser to pick one. Or leave it as the default auto and let vizb detect the format from the content.

CSV and JSON are the simplest inputs. Hand vizb a table and it charts the numeric columns.

Comma-separated tables. Numeric columns each become their own chart. Use --group to promote other columns into chart dimensions.

Terminal window
vizb data.csv -o output.html
vizb data.csv -P csv -o output.html

See the Tabular Data guide for full rules on delimiters, headers, grouping, and aggregation.

Each input format has a different shape. Vizb’s parser registry reads them all. It converts the results into one common structure. Your charts, grouping, filtering, and merging then work the same way regardless of where the data came from.

Vizb also parses benchmark output from three languages and five frameworks.

Default parser. Reads go test -bench text or -json output.

Terminal window
go test -bench . | vizb -o output.html
# or explicitly
go test -bench . | vizb --parser go -o output.html

JSON bench events: go test -bench -json is detected automatically. No --parser is needed. It is converted before charting. It is never mistaken for tabular JSON.

Metrics extracted:

Metric Description
Execution time ns/op, with configurable unit
Memory B/op, with configurable unit
Allocations allocs/op, with configurable unit
Throughput MB/s, B/s, GB/s, or custom
Iterations Number of iterations run
Key Framework / Format Language
auto Detect from content (default)
csv Generic CSV table Any
json Generic JSON object rows or 2D arrays Any
go Go testing (benchfmt) Go
rs:criterion Criterion Rust
rs:divan Divan Rust
js:vitest Vitest JavaScript / TypeScript
js:tinybench Tinybench JavaScript / TypeScript

Want to add support for a format or framework not listed here? Parser contributions are welcome. The process looks like this:

  1. Choose a key following the <lang>:<framework> convention (e.g., py:pytest, java:jmh).
  2. Implement a parse function that extracts []shared.DataPoint from the framework’s output.
  3. Register it via parser.Register("your-key", YourParseFunc) in an init() block.
  4. Add tests with real output samples and edge cases.
  5. Open a PR on GitHub. The existing parsers in pkg/parser/ are good references.