{"id":34659473,"url":"https://github.com/demogorgon1/graphtail","last_synced_at":"2026-05-24T21:31:27.548Z","repository":{"id":65650637,"uuid":"594086274","full_name":"demogorgon1/graphtail","owner":"demogorgon1","description":"Real-time visualization of CSV graphs.","archived":false,"fork":false,"pushed_at":"2025-08-20T08:35:42.000Z","size":107,"stargazers_count":0,"open_issues_count":4,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-20T10:05:27.577Z","etag":null,"topics":["command-line","cpp","csv","debugging","graphs","heatmaps","monitoring","tail","tools","utility","visualization"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/demogorgon1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-01-27T15:12:17.000Z","updated_at":"2025-08-20T08:35:45.000Z","dependencies_parsed_at":"2023-02-17T20:00:58.239Z","dependency_job_id":null,"html_url":"https://github.com/demogorgon1/graphtail","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/demogorgon1/graphtail","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demogorgon1%2Fgraphtail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demogorgon1%2Fgraphtail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demogorgon1%2Fgraphtail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demogorgon1%2Fgraphtail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/demogorgon1","download_url":"https://codeload.github.com/demogorgon1/graphtail/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demogorgon1%2Fgraphtail/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33452032,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-24T19:21:36.376Z","status":"ssl_error","status_checked_at":"2026-05-24T19:21:10.562Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","cpp","csv","debugging","graphs","heatmaps","monitoring","tail","tools","utility","visualization"],"created_at":"2025-12-24T18:51:19.566Z","updated_at":"2026-05-24T21:31:27.543Z","avatar_url":"https://github.com/demogorgon1.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# graphtail\n[![Build](https://github.com/demogorgon1/graphtail/actions/workflows/cmake.yml/badge.svg)](https://github.com/demogorgon1/graphtail/actions/workflows/cmake.yml)\n\nYou've got a program that outputs a bunch of numbers to a CSV file? You want to visualize those numbers with graphs \nin real-time, while the program is still running and appending new numbers to the file?\nIf you can say yes to both those questions, _graphtail_ might be the tool you need.\n\n![test4](https://user-images.githubusercontent.com/7039567/216010144-ea1f3a02-7bfb-458b-9fbe-73104bd3e721.gif)\n\n## Installing\n### From source\nFirst of all you'll need git and cmake to acquire and build the project. Then you can run:\n```\ngit clone https://github.com/demogorgon1/graphtail.git\ncd graphtail\nmkdir build\ncd build\ncmake ..\ncmake --build .\n```\nOn Windows, if successful, you'll find ```graphtail.exe``` in ```src\\Debug```.\nOn Linux (and similar), if successful, you can run ```make install``` to install ```graphtail```.\n\n### Downloading binaries\nFor Windows you can download the zip'd .exe file available under \"Releases\".\n\n## Usage\n```\ngraphtail [options] \u003cinput files\u003e\n```\nRenders numeric data from input CSV files into a window. Any changes to the files will automatically update the window.\n\nOption|Description\n-|-\n```--row_delim=\u003ccharacter\u003e```| Character used as row deliminator in CSV files or ```new_line```. Defaults to ```new_line```.\n```--column_delim=\u003ccharacter\u003e```| Character used as column deliminator in CSV files. Defaults to ```;```.\n```--width=\u003cwidth\u003e```\u003cbr\u003e```--height=\u003cheight\u003e```| Sets the size of the window. Defaults to a 1000x500.\n```--font_size=\u003csize\u003e```| Sets the size of the font used to display information. Defaults to 14.\n```--x_step=\u003cpixels\u003e```| Instead of stretching graph to fit the width of the window, each data point will advance the specified number of pixels the x-axis. This option can be used in a group definition.\n```--y_min=\u003cmin\u003e```\u003cbr\u003e```--y_max=\u003cmin\u003e```| Clamp the graph y-axis to the specified range. Default is to stretch. This option can be used in a group definition.\n```--histogram_threshold=\u003cvalue\u003e```| Histogram values must be higher than this to be rendered. Default is to not have a threshold. This option can be used in a group definition.\n```--is_size```| Numbers will be shown with K/M/G suffixes if large enough. This option can be used in a group definition.\n```--groups=\u003cdefinition\u003e```| Defines graph groups. See example below. If no groups are defined, all columns will get their own group automatically.\n```--config=\u003cpath\u003e```| Loads configuration from specified file. See below for an example of a configuration file.\n\n## Keyboard shortcuts\nKey|Action\n-|-\nESC|Terminate program.\nF1|Toggle x-axis stretching to fit window width.\n\n## Group definitions\nAll graphs will be shown separately per default, but you can group specific ones together if you want to with the ```--groups``` option.\n\nGroup description syntax looks a bit wonky because it's easy to parse, but it's quite simple:\n\n```{``` marks the beginning of a group and ```}``` ends it. Inside the brackets you can use ```i(column)``` to added ```column``` to the group. ```column``` can also be a wildcard (for example ```*something*```), which will cause any column with a name matching the wildcard to be added to the group. Inside the group you can also specify group-specific parameters with ```!option=value```. You can see which options can be specified per group in the list above.\nUse ```h(name)(column1, column2, ...)``` to turn the group into a histogram heatmap.\n\n### Example 1\n\n![example1](https://user-images.githubusercontent.com/7039567/216309538-c6c89bf0-3584-4a7d-8733-97b90be9ba78.png)\n\n```\n--groups={i(foo)i(bar)!y_min=0!y_max=1}{i(baz)}\n```\n\nThis will cause the columns ```foo``` and ```bar``` to be added to the same group and the y-axis will be clamped between 0 and 1. The column ```baz``` will be put in a separate group.\n\n### Example 2\n\n![example2](https://user-images.githubusercontent.com/7039567/216310991-768b63ec-21e5-449c-aba1-6d8f42171c67.png)\n\n```\n--groups={h(foo)(foo1,foo2,foo3,foo4)!histogram_threshold=0}\n```\n\nRender columns ```foo1```, ```foo2```, ```foo3```, and ```foo4``` as a histogram heatmap named ```foo```. Cells of the heatmap must have a value of at least 0 to be rendered.\n\n## Configuration files\nA configuration file is a list of statements:\n\n```\ninput /path/to/some/csv-file\nwidth 500\nheight 500\ngroups {i(foo)i(bar)}\n```\n\nAlternatively you can specify values like this:\n\n```\nbegin groups\n  {\n    i(foo)\n    i(bar)\n  }\nend\n```\n  \nThis is particularily useful if you have a lot of groups and you want your configuration to be more readable.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemogorgon1%2Fgraphtail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdemogorgon1%2Fgraphtail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemogorgon1%2Fgraphtail/lists"}