{"id":19380010,"url":"https://github.com/graphistry/graphistry-js","last_synced_at":"2025-04-06T09:07:30.828Z","repository":{"id":21064350,"uuid":"91490805","full_name":"graphistry/graphistry-js","owner":"graphistry","description":"API for controlling and reacting to embedded visualizations","archived":false,"fork":false,"pushed_at":"2024-12-11T00:54:47.000Z","size":34322,"stargazers_count":33,"open_issues_count":60,"forks_count":6,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-02-05T03:31:40.275Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/graphistry.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-05-16T18:22:47.000Z","updated_at":"2024-07-11T07:58:27.000Z","dependencies_parsed_at":"2024-03-21T20:32:42.753Z","dependency_job_id":"0aca74b4-f161-42a3-921b-9eefe0e1bad2","html_url":"https://github.com/graphistry/graphistry-js","commit_stats":{"total_commits":581,"total_committers":9,"mean_commits":64.55555555555556,"dds":"0.35628227194492257","last_synced_commit":"8a44b91452a3a291d0bb3d8273fb5dce3265e54e"},"previous_names":[],"tags_count":136,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphistry%2Fgraphistry-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphistry%2Fgraphistry-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphistry%2Fgraphistry-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphistry%2Fgraphistry-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/graphistry","download_url":"https://codeload.github.com/graphistry/graphistry-js/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247457800,"owners_count":20941906,"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":[],"created_at":"2024-11-10T09:12:02.729Z","updated_at":"2025-04-06T09:07:30.799Z","avatar_url":"https://github.com/graphistry.png","language":"JavaScript","funding_links":[],"categories":["Graph Visualization"],"sub_categories":["Libraries"],"readme":"\u003cimg height=48 src=\"https://hub.graphistry.com/static/assets/images/logo/banner_transparent_colored.png\"\u003e\n\n\n---\n\n[![Latest docs](https://img.shields.io/badge/docs-latest-brightgreen)](https://graphistry.github.io/graphistry-js/)\n[![npm](https://img.shields.io/npm/v/@graphistry/client-api?label=%40graphistry%2Fclient-api\u0026logo=npm)](https://www.npmjs.com/package/ient-api)\n[![npm](https://img.shields.io/npm/v/@graphistry/client-api?label=%40graphistry%2Fclient-api-react\u0026logo=npm)](https://www.npmjs.com/package/@graphistry/client-api-react)\n![GitHub](https://img.shields.io/github/license/graphistry/graphistry-js)\n\n![CI main](https://github.com/graphistry/graphistry-js/workflows/CI/badge.svg) ![Security audit](https://github.com/graphistry/graphistry-js/workflows/Audit/badge.svg) ![CI docs](https://github.com/graphistry/graphistry-js/workflows/Storybook/badge.svg)\n\n[\u003cimg src=\"https://img.shields.io/badge/slack-Graphistry%20chat-yellow.svg?logo=slack\"\u003e](https://join.slack.com/t/graphistry-community/shared_invite/zt-53ik36w2-fpP0Ibjbk7IJuVFIRSnr6g)\n![Twitter Follow](https://img.shields.io/twitter/follow/graphistry)\n\n---\n\n# GraphistryJS\n## Web libraries for uploading and embedding graph visualizations\n\n - [@graphistry/client-api](projects/client-api) - Pure JS API for manipulating Graphistry visualizations \n   - [Storybook](https://graphistry.github.io/graphistry-js/?path=/story/graphistry-vanilla-js)\n - [@graphistry/client-api-react](projects/client-api-react) - Graphistry vizualization React component\n   - [Storybook](https://graphistry.github.io/graphistry-js/?path=/story/graphistry-react-style--predefined-dataset)\n - [@graphistry/node-api](projects/node-api) - Node bindings to upload into Graphistry ecosystem\n - [@graphistry/js-upload-api](projects/js-upload-api) - Pure JS library for graph upload\n - [@graphistry/cra-test](projects/cra-test) - Example react app using these libraries\n\nDev guide for contributors: [DEVELOP.md](./DEVELOP.md)\n\n\u003cbr\u003e\u003cbr\u003e\n\n# Graphistry - Visual Graph Intelligence\n\nGPU and AI acceleration for interactive visualization of large graphs. Used accross multiple industries for security, fraud, supply chain, social media analysis and more. Graphistry supports live explorations of large datasets by running server side GPUs to stream into a custom WebGL rendering engine. This enables graph metrics and dynamic layout of up to 8MM nodes and edges at a time, most older client GPUs smoothly support somewhere between 100K and 1MM elements.\n\nYou can \n\n- [Start with a free Graphistry Hub account](https://www.graphistry.com/get-started)\n- [Create Python notebooks with PyGraphistry](https://github.com/graphistry/pygraphistry)\n- [Build StreamLit dashboards in Graph-App-Kit](https://github.com/graphistry/graph-app-kit)\n- [Directly interact with Graphistry REST APIs](https://hub.graphistry.com/docs/api/)\n- [Launch your own Graphistry server with just a few clicks](https://www.graphistry.com/get-started)\n\n\u003cbr\u003e\u003cbr\u003e\n\n# JavaScript clients: Vanilla JS, React, \u0026 Node\n\n## @graphistry/client-api\n\n\u003cimg height=48 src=\"http://3con14.biz/code/_data/js/intro/js-logo.png\"/\u003e\n\nPure JavaScript API for manipulating Graphistry visualizations in the browser with async-friendly APIs\n\n```bash\nnpm install '@graphistry/client-api'\n```\n\n```javascript\nimport { graphistryJS } from \"@graphistry/client-api\"; // + variants for different bundling formats\nconst g = graphistryJS(elt);\n```\n\nSee [@graphistry/client-api project](projects/client-api/README.md) and [interactive storybook docs](https://graphistry.github.io/graphistry-js/?path=/story/graphistry-vanilla-js)\n\n\u003cbr\u003e\u003cbr\u003e\n\n## @graphistry/client-api-react\n\n\u003cimg height=48 src=\"https://raw.githubusercontent.com/jalbertsr/logo-badge-images/master/img/react_logo.png\"/\u003e\n\nReact component for manipulating Graphistry visualizations in the browser\n\n```bash\nnpm install '@graphistry/client-api-react'\n```\n\n```javascript\nimport { Graphistry } from '@graphistry/client-api-react';` // + variants for different bundling formats\n\u003cGraphistry dataset=\"myDatasetID\" /\u003e\n```\n\nSee [@graphistry/client-api-react project](projects/client-api-react/README.md), [interactive storybook docs](https://graphistry.github.io/graphistry-js/), and [Create React App project sample](projects/cra-test/README.md)\n\n\u003cbr\u003e\u003cbr\u003e\n\n## @graphistry/node-api\n\n\u003cimg height=48 src=\"https://raw.githubusercontent.com/caiogondim/javascript-server-side-logos/master/node.js/standard/454x128.png\" /\u003e\n\n**@graphistry/node-api**: Node.js bindings, including optional Typescript support, for creating visualizations and generating URLs\n\n```bash\nnpm install '@graphistry/node-api'\n```\n\n```javascript\nimport { Client, Dataset, EdgeFile, NodeFile } from \"@graphistry/node-api\";\nconst client = new Client(user, pass);\nconst ds = new Dataset(bindings, new EdgeFile(edges));\nawait ds.upload(client);\n```\n\nSee [@graphistry/node-api project](projects/node-api/README.md) and [API docs \u0026 examples](https://graphistry.github.io/graphistry-js/node-tsdocs/)\n\n\u003cbr\u003e\u003cbr\u003e\n\n# Graphistry's Architecture\n\nYou can think of Graphistry as a live data version of Google Maps.\n\nClientside (client-api \u0026 client-api-react):\n\n- Graphistry runs as an embedded iframe that streams live with your Graphistry server\n- GraphistryJS runs as a lightweight JavaScript library in your application. It simplifies creating the iframe, uploading data for visualization as needed, and sending the iframe messages to control style and interactions\n- GraphistryJS can be used to upload and view new visualizations, or run sessions for existing uploads, including those from other clients\n- User and GraphistryJS interactions will transparently leverage the Graphistry server as needed, such as for loading a graph, running analytics, drilling into data, and saving settings\n\nServerside (node-api):\n\n- GraphistryJS can be used to upload new files and stitch them into graph datasets\n- The resulting server item IDs can be sent to browsers for embedding either as iframe URLs or GraphistryJS IDs, or additional server-side manipulations\n\n## Decoupling uploads from downloads\n\nTo support server-acceleration and fast interactions, Graphistry decouples uploads from downloads\n\n### Uploads:\n\n- Multiple upload formats are possible, but we recommend parquet \u0026 arrow for the best performance and high reliability\n- Uploads are possible from browser clients (CSP/CORS support), but we generally recommend server\u003c\u003eserver communications for better speed\n- Different datasets may reuse the same file. Datasets are generally just a small amount of metadata, so for best performance, try to upload new datasets for existing files, instead of reuploading the files as well.\n\n### Downloads:\n\n- Client sessions connect to previously uploaded datasets and their files\n- Client session configurations can override settings initially defined during the upload phase\n\n## Security\n\n- You can configure your Graphistry server to run as http, https, or both\n- Uploads require authentication\n  - The `node-api` client already uses the new JWT-based protocol (\"API 3\")\n  - Deprecated: The clientside JavaScript convenience APIs still use the deprecrated \"API 1\" protocol (key-based), which lacks JWT-based authentication and authorization\n    - We recommend clients instead use `fetch` or other HTTP callers to directly invoke the REST API: See how the `node-api` performs it\n    - The client JavaScript APIs will updated to the new JWT method alongside recent CORS and SSO updates; contact staff if you desire assistance\n- Sessions are based on unguessable web keys: sharing a secret ID means sharing read access\n- Datasets are immutable and thus their integrity is safe for sharing, while session state (e.g., filters) are writable: share a copy when in doubt\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphistry%2Fgraphistry-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraphistry%2Fgraphistry-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphistry%2Fgraphistry-js/lists"}