{"id":13482146,"url":"https://github.com/tracyhenry/Kyrix","last_synced_at":"2025-03-27T12:32:21.330Z","repository":{"id":34666184,"uuid":"114918438","full_name":"tracyhenry/Kyrix","owner":"tracyhenry","description":"Interactive details-on-demand data visualizations at scale","archived":false,"fork":false,"pushed_at":"2023-06-22T17:15:54.000Z","size":54305,"stargazers_count":148,"open_issues_count":20,"forks_count":26,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-03-20T02:56:48.371Z","etag":null,"topics":["d3js","dataviz","declarative-language","interactive-visualizations","postgresql","spatial-index","visualization-grammar","visualization-tools"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tracyhenry.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}},"created_at":"2017-12-20T18:28:26.000Z","updated_at":"2025-03-19T00:01:08.000Z","dependencies_parsed_at":"2024-05-04T05:32:27.716Z","dependency_job_id":"2b114267-5214-40da-837c-0d33275355ed","html_url":"https://github.com/tracyhenry/Kyrix","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tracyhenry%2FKyrix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tracyhenry%2FKyrix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tracyhenry%2FKyrix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tracyhenry%2FKyrix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tracyhenry","download_url":"https://codeload.github.com/tracyhenry/Kyrix/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245845282,"owners_count":20681880,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["d3js","dataviz","declarative-language","interactive-visualizations","postgresql","spatial-index","visualization-grammar","visualization-tools"],"created_at":"2024-07-31T17:00:59.419Z","updated_at":"2025-03-27T12:32:20.981Z","avatar_url":"https://github.com/tracyhenry.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Server side"],"sub_categories":[],"readme":"\u003ch1 align=\"center\" style=\"border-bottom: none;\"\u003e Kyrix - democratizing details-on-demand data visualizations \u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/tracyhenry/Kyrix/releases/tag/v1.0.0-beta\"\u003e\u003cimg src=\"https://img.shields.io/badge/release-v1.0.0--beta-orange\" alt=\"version\"/\u003e\u003c/a\u003e\n\u003cimg src=\"https://travis-ci.org/tracyhenry/Kyrix.svg?branch=master\" alt=\"build\"/\u003e\n\u003ca href=\"https://github.com/prettier/prettier\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/code_style-prettier-ff69b4.svg\" alt=\"codestyle\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/tracyhenry/Kyrix/blob/master/LICENSE\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/apm/l/atomic-design-ui.svg\" alt=\"license\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/tracyhenry/Kyrix/wiki/How-to-Contribute\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat\" alt=\"contribution\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://gitter.im/kyrix-mit/kyrix\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/chat-gitter-yellow\" alt=\"gitter\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/tracyhenry/Kyrix-gallery/blob/master/gallery.gif\" width=\"700\" /\u003e\n\u003c/p\u003e\n\nKyrix facilitates the creation of data visualizations with details-on-demand interactions (e.g. pan and zoom, see the demo gallery\u003csup\u003e[1](#f1)\u003c/sup\u003e above). In visualizations of such, the underlying dataset is often large. To deal with large data, Kyrix is focused on optimizing two goals: 1) usable declarative API library for visualization developers and 2) 500ms response time to user interactions, which is required to enable interactive browsing. \n\n   1. \u003csmall id=\"f1\"\u003e _This gallery GIF is itself a Kyrix application._ \u003c/small\u003e\n\n## Installation instructions for the impatient\n\n1. Install [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/) (must be `v1.17.0` or later). For Mac users, installing [Docker Desktop](https://docs.docker.com/docker-for-mac/install/) will install Docker Compose automatically. Ubuntu 18.04 users can also simply install with `sudo apt update; sudo apt install -y docker.io docker-compose;`.\n2. Run `sudo ./run-kyrix.sh --nba --build` in the root directory. You might need to make `run-kyrix.sh` executable, i.e. `sudo chmod +x run-kyrix.sh`.  \n3. Wait a couple minutes, then point your browser at `\u003cip address\u003e:8000` - remember that if you are using a cloud instance you may (probably) need to open your cloud provider's firewall for this port. If that sounds scary, you can create an SSH tunnel from your PC (e.g. Mac) using `ssh -N \u003cserver ipaddr\u003e -L 8000:\u003csame ipaddr\u003e:8000` to forward your laptop's port 8000 to the server via [SSH tunneling](https://www.tecmint.com/create-ssh-tunneling-port-forwarding-in-linux/). \n\nnote that you'll need to wait for a message saying `Backend server started...` like this:\n```\nServing /project\nNew project definition coming...\nThere is diff that requires recomputing indexes. Shutting down server and recomputing...\nPrecomputing...\nDone precomputing!\nCompleted recomputing indexes. Server restarting...\nBackend server started...\n*** done! Kyrix ready at: http://\u003chost\u003e:8000/\n```\n\nGetting started by reading a [**tutorial**](https://github.com/tracyhenry/Kyrix/wiki/Tutorial), and [**more documentations**](https://github.com/tracyhenry/Kyrix/wiki).\n\n## Setup-free big data visualizations\nKyrix is fully dockerized, with a live PostgreSQL database running right after docker startup. Front-end vis libraries often assume data fits in browser memory, and thus scale to only small data. By working with a containerized database, Kyrix scales to much larger data while being free of the hassle of installing and maintaining databases. \n\nDocker works by creating fully isolated virtual machines (\"containers\") on your computer, making it much\neasier to achieve correct installations every time ([learn more](https://opensource.com/resources/what-docker)). See [docker config details](https://github.com/tracyhenry/Kyrix/wiki/Docker-Config-Details). \n\n## Declarative authoring\nKyrix offers two declarative grammars for authoring complex details-on-demand visualizations. [Low-level Kyrix grammar](https://github.com/tracyhenry/Kyrix/wiki/API-Reference) is verbose but expressive. [Kyrix-S grammar](https://github.com/tracyhenry/Kyrix/wiki/Kyrix%E2%80%90S-API-Reference) is a high-level and concise grammar designed for zoomable scatterplot visualizations. For example, Kyrix-S turns\n```javascript\n{\n    data: {  \n        db: \"nba\",  \n        query: “SELECT * FROM games\"  \n    },  \n    layout: {  \n        x: {  \n            field: \"home_score\",  \n            extent: [69, 149]  \n        },  \n        y: {  \n            field: \"away_score\",  \n            extent: [69, 148]  \n        },  \n        z: {  \n            field: \"agg_rank\",  \n            order: \"asc\"  \n        }  \n    },  \n    marks: {  \n        cluster: {  \n            mode: \"circle\"\n        },  \n        hover: {  \n            rankList: {  \n                mode: \"tabular\",  \n                fields: [\"home_team\", \"away_team\", \"home_score\", \"away_score\"],  \n                topk: 3  \n            },  \n            boundary: \"convexhull\"  \n         }  \n    },  \n    config: {  \n        axis: true  \n    }  \n};\n```\ninto\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/tracyhenry/Kyrix/tree/master/compiler/examples/nba_cmv\"\u003e\n\u003cimg src=\"https://media.giphy.com/media/d7xqGWf1Q4sftNOuZd/giphy.gif\" width = \"375\"/\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n## Embedding into your favourite web app\nKyrix offers [APIs](https://github.com/tracyhenry/Kyrix/wiki/Web-Embedding) to integrate a kyrix application into a web application. There's no limit on what you can imagine: complex coordinated views, programmatic pan/zoom control, cross filtering...  \n\n## Telling us about your Kyrix app\nWe'd like to learn more about your application requirements to make Kyrix better. If you have built a Kyrix app, send us a screenshot on [Gitter](https://gitter.im/kyrix-mit/kyrix)!\n\n## Contributing to Kyrix\nWe welcome contributions! Please [let us know](https://gitter.im/kyrix-mit/kyrix) about your change beforehand if it is big. Also, see [contributing guidelines](https://github.com/tracyhenry/Kyrix/wiki/How-to-Contribute). \n\nKyrix is maintained by a group of researchers at [MIT's data system group](http://dsg.csail.mit.edu/). The system is not possible without the contribution from these wonderful developers:\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/tracyhenry\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/5410441?s=460\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eWenbo Tao\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/asah\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/140002?s=400\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAdam Sah\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/houxinli\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/23057640?s=460\u0026u=9a5f5bb1fef5b1ea70b04157827ec6d9da0438d5\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eXinli Hou\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/xiaoyu4321\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/29280476?s=460\u0026u=446b5fec827ab6a6b1873b7f064cb4278b0c0179\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eXiaoyu Liu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/yediwang\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/31806079?s=460\u0026u=569fb50cd58c0033932381f513f703e1f2dcca36\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eYedi Wang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/peterg17\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/2456071?s=460\u0026u=4996c118f8e54c76c8c10839d6992cad3e6fdf5b\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePeter Griggs\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/mschoema\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/32960718?s=460\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMaxime Schoemans\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/ericazhou7\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/37673328?s=460\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eErica Zhou\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/abhishek-bassan\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/7061250?s=460\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAbhishek Bassan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/ScarlettZ98\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/31007583?s=460\u0026u=ab9b1b1720de52a06259757a1dd0331a879bbabc\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eScarlett Zhang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/amyzhaang\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/26984692?s=460\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAmy Zhang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/jperaino\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/7572179?s=460\u0026u=6d57f8dd49e1c1cdf0f9ce42bb33803f8d777348\u0026v=4\" width=\"70px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJim Peraino\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n\n  \u003c/tr\u003e\n  \n\u003c/table\u003e\n\n## Disclaimer\nThe current [`v1.0.0-beta`](https://github.com/tracyhenry/Kyrix/releases/tag/v1.0.0-beta) release contains research-quality code, and is intended for demo purposes. The code should not be used for large-scale secure serving. Currently, [`v1.0.0-beta`](https://github.com/tracyhenry/Kyrix/releases/tag/v1.0.0-beta) only supports data with up to 10~100 millions of data records. We plan to release a distributed version of Kyrix in the future. \n\n## Citing Kyrix\n```bibtex\n@inproceedings{tao2019kyrix,\n  title={Kyrix: Interactive pan/zoom visualizations at scale},\n  author={Tao, Wenbo and Liu, Xiaoyu and Wang, Yedi and Battle, Leilani and Demiralp, {\\c{C}}a{\\u{g}}atay and Chang, Remco and Stonebraker, Michael},\n  booktitle={Computer Graphics Forum},\n  volume={38},\n  number={3},\n  pages={529--540},\n  year={2019},\n  organization={Wiley Online Library}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftracyhenry%2FKyrix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftracyhenry%2FKyrix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftracyhenry%2FKyrix/lists"}