About Venz

Venz makes it easy to create a chart from numbers.

Venz visualizes numeric data using SVG charts. You feed it numbers and it tries to detect the data structure automatically. The chart can then be downloaded in SVG, PNG, webP or AVIF format. Or create a link that contains all details to share.

There are multiple ways to create a chart:

  • By pasting text
  • By dropping a file onto the chart
  • By creating a URL

The numbers can be in plain text or JSON format.

Contents

Unlabeled numbers

Numbers separated by space, comma, semicolon, or newline:

81, 99, 95, 66, 8, 14, 63, 58, 10, 98
77
25
23
64
88
26
55
71
9
9

Copy-paste the numbers onto the chart, or try this example link:

https://try.venz.dev?type=line&data=81,99,95,66,8,14,63,58,10,98

Paste numbers repeatedly to add series, or try this example link:

https://try.venz.dev?type=line&data=81,99,95,66,8,14,63,58,10,98&data=77,25,23,64,88,26,55,71,9,9

Labeled numbers in rows

2025-01 150
2025-02 120
2025-03 180
2025-04 170
2025-01 150 150 160
2025-02 120 110 120
2025-03 180 180 210
2025-04 170 190 180
1.0.0 3
1.0.1 3.05
1.1.0 2.88
1.2.0 2.9
1.2.1 2.8

If the labels are recognized as date or semver, they're sorted accordingly.

Copy-paste the labeled numbers onto the chart, or try this example link:

https://try.venz.dev?type=pivot&lp=br&br=1&label=2025-01&label=2025-02&label=2025-03&label=2025-04&data=150,150,160&data=120,110,120&data=180,180,210&data=170,190,180

Pasting additional data results onto the chart results in merged data with additional series.

Labeled numbers in columns

col-A col-B col-C
----- ----- -----
 1.2    2    2.5
 1.1    1.9  2.4
1.15    1.8  2.4
0.98    2.2  2.6
col-A,col-B,col-C
1.2,2,2.5
1.1,1.9,2.4
1.15,1.8,2.4
0.98,2.2,2.6

Copy-paste the labeled numbers onto the chart, or try this example link:

https://try.venz.dev?type=line&lp=br&label=Col-A&label=Col-B&label=Col-C&data=1.2,1.1,1.15,0.98&data=2,1.9,1.8,2.2&data=2.5,2.4,2.4,2.6

Instead of separate parameters, the data can be the full text:

https://try.venz.dev?type=line&lp=br&data=col-A+col-B+col-C +1.2++++2++++2.5 +1.1++++1.9++2.4 1.15++++1.8++2.4 0.98++++2.2++2.6

JSON with numbers

[5, 4, 5]
[
  [5, 4, 6],
  [4, 5, 3],
  [3, 6, 4]
]

Copy-paste the labeled numbers onto the chart, or try an example link:

https://try.venz.dev?type=line&data=[5,3,4]

https://try.venz.dev?type=line&data=[[5,4,6],[4,5,3],[3,6,4]]

JSON with labels and numbers

[
  ["Bananas", 5],
  ["Apples", 4],
  ["Oranges", 3]
]

Copy-paste the labeled numbers onto the chart, or try this example link:

https://try.venz.dev?type=bar&labelY=Units&data=[["Bananas",5],["Apples",4],["Oranges",3]]

JSON with labels and numbers series

[
  ["Bananas", [5, 4, 5]],
  ["Apples", [4, 5, 4]],
  ["Oranges", [3, 6, 3]]
]

Copy-paste the labeled numbers onto the chart, or try this example link:

https://try.venz.dev?type=line&data=[["Bananas",[5,4,6]],["Apples",[4,5,3]],["Oranges",[3,6,4]]]

Hyperfine

Venz was originally created to visualize hyperfine output. The name Venz is derived from bENchmark VisualiZer.

Drop the file or paste its contents generated by hyperfine --export-json. See the examples and use configurations to create and manage hyperfine commands.

Example command:

hyperfine --warmup 3
  'sleep 0.35'
  'sleep 0.31'
  'sleep 0.33'
  --export-json results.json

Example output:

{
  "results": [
    {
      "command": "sleep 0.35",
      "mean": 0.35,
      "stddev": 0,
      "median": 0.35,
      "user": 0.0001,
      "system": 0.0001,
      "min": 0.35,
      "max": 0.35,
      "times": [0.35, 0.35, 0.35],
      "exit_codes": [0, 0, 0]
    },
    {
      "command": "sleep 0.31",
      "mean": 0.31,
      "stddev": 0,
      "median": 0.31,
      "user": 0.0001,
      "system": 0.0001,
      "min": 0.31,
      "max": 0.31,
      "times": [0.31, 0.31, 0.31],
      "exit_codes": [0, 0, 0]
    }
  ]
}

Drop the file results.json or copy-paste its contents onto the chart, or try this example link:

https://try.venz.dev?type=median&br=1&data={"results":[{"command":"sleep+0.35","mean":0.36833403254,"stddev":0.0022131087112131635,"median":0.36842083684000004,"user":0.004151359999999998,"system":0.0044277399999999995,"min":0.36323077384,"max":0.37231769084000005,"times":[0.36811944084000003,0.36773835784000003,0.37231769084000005,0.36323077384,0.36910831584000003,0.36815719084000004,0.36806119084000005,0.36868448284000005,0.36923681584,0.36868606584],"exit_codes":[0,0,0,0,0,0,0,0,0,0]},{"command":"sleep+0.31","mean":0.32774909924,"stddev":0.0016290075685424868,"median":0.32849373234,"user":0.00461136,"system":0.004440939999999999,"min":0.32424739884000003,"max":0.32908635784,"times":[0.32766448284000005,0.32852669084,0.32894244084,0.32859089984,0.32424739884000003,0.32908635784,0.32780769084000005,0.32539560684,0.32846077384000005,0.32876864984000004],"exit_codes":[0,0,0,0,0,0,0,0,0,0]},{"command":"sleep+0.33","mean":0.34931401164000003,"stddev":0.0038889942457800007,"median":0.34879402384,"user":0.0042200599999999994,"system":0.004495439999999999,"min":0.34237498284,"max":0.35686323184,"times":[0.34762089884,0.34802077484000005,0.34890223184,0.34985627484000004,0.34892852384000006,0.34237498284,0.34777194084,0.34868581584,0.35686323184,0.35411544084],"exit_codes":[0,0,0,0,0,0,0,0,0,0]}]}

Mitata

Drop the file or paste its contents generated by run({ format: 'json' }). Series data is truncated to 100k samples each (a notification will show if there is any data loss).

Example script:

import { run, bench } from 'mitata';

bench('sleep 2.1s', () => new Promise(resolve => setTimeout(resolve, 2100)));
bench('sleep 2.2s', () => new Promise(resolve => setTimeout(resolve, 2200)));
bench('sleep 2.3s', () => new Promise(resolve => setTimeout(resolve, 2300)));

await run({ format: 'json' });
node sleep.ts > results.json

Example output:

{
  "layout": [{ "name": null, "types": [] }],
  "benchmarks": [
    {
      "alias": "sleep 2.1s",
      "runs": [
        {
          "stats": {
            "samples": [
              2100617875, 2101011375, 2101379667, 2101386334, 2101409917,
              2101517584, 2101943916, 2102111417, 2102819000, 2102983959,
              2103255958, 2107508833
            ],
            "min": 2100617875,
            "max": 2107508833,
            "p25": 2101379667,
            "p50": 2101517584,
            "p75": 2102819000,
            "p99": 2103255958,
            "p999": 2103255958,
            "avg": 2102328819.5833333,
            "ticks": 12
          },
          "args": {},
          "name": "sleep 2.1s"
        }
      ],
    }
  ]
}

Drop the file results.json or copy-paste its contents onto the chart, or try this example link:

https://try.venz.dev?type=median&br=1&data={"benchmarks":[{"alias":"sleep+2.1s","runs":[{"stats":{"samples":[2100617875,2101011375,2101379667,2101386334,2101409917,2101517584,2101943916,2102111417,2102819000,2102983959,2103255958,2107508833]},"name":"sleep+2.1s"}]},{"alias":"sleep+2.2s","runs":[{"stats":{"kind":"fn","samples":[2200299791,2200441500.000004,2200454208,2201334625,2201374125,2201430041,2201702959,2201707625,2201790375,2202938000,2203260584,2206625291]},"name":"sleep+2.2s"}]},{"alias":"sleep+2.3s","runs":[{"stats":{"kind":"fn","samples":[2299657708,2300495375,2300578541,2300587458,2300834125,2300846292,2301183417,2301186208,2301333500,2301397208.9999924,2301521375,2301543250],"min":2299657708,"max":2301543250,"p25":2300578541,"p50":2300846292,"p75":2301333500,"p99":2301521375,"p999":2301521375,"avg":2300930371.4999995,"ticks":12,"heap":{"_":11,"total":22904,"min":1928,"max":2240,"avg":2082.181818181818}},"name":"sleep+2.3s"}]}]}

Create URL

Create links to share visualizations of your data.

Example: https://try.venz.dev?type=line&data=3;2;3;4;2;5&data=4;3;2;5;6;4

URL parameters

  • data
    • numbers for the data series
    • separated by comma or semicolon
    • can be repeated
  • label
    • label for the data series
    • separated by comma or semicolon
    • can be repeated
    • first label belongs to first data series, etc.
  • type
    • chart type
    • default: median
    • values
      • median
      • box
      • scatter
      • line
      • pivot
      • bar
  • labelY
    • label for y-axis
    • default: median (s)
  • labelX
    • label for x-axis
    • default: Run #
    • only visible with scatter and line chart type
  • color
    • color for the data series
    • can be repeated
    • first color belongs to first data series, etc.
  • lp
    • legend position
    • default: tr
    • values
      • tr
      • tl
      • br
      • bl
      • n
  • br
    • break y-axis scale
    • default: 0
    • values
      • 0
      • 1

Example code snippets to create URL

const url = new URL('/', 'https://try.venz.dev');
url.searchParams.set('type', 'line');
url.searchParams.append('data', '1;2;3');
url.searchParams.append('data', '4;5;6');

console.log(url.toString());
const url = new URL('/', 'https://try.venz.dev');
url.searchParams.set('type', 'line');

const series = [[1, 2, 3], [4, 5, 6]];
for (const values of series) {
  url.searchParams.append('data', values.join(','));
}

console.log(url.toString());