{"id":13486399,"url":"https://github.com/graphistry/graph-app-kit","last_synced_at":"2025-04-12T20:46:31.910Z","repository":{"id":39413725,"uuid":"288573762","full_name":"graphistry/graph-app-kit","owner":"graphistry","description":"Go from graph data to a secure and interactive visual graph app in 15 minutes. Batteries-included self-hosting of graph data apps with Streamlit, Graphistry, RAPIDS, and more!","archived":false,"fork":false,"pushed_at":"2025-04-02T23:40:46.000Z","size":453,"stargazers_count":220,"open_issues_count":31,"forks_count":25,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-04-04T01:07:06.324Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","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":"2020-08-18T22:02:45.000Z","updated_at":"2025-04-01T15:15:59.000Z","dependencies_parsed_at":"2023-10-18T18:51:18.575Z","dependency_job_id":"e267fc8a-2f84-4ab6-8c54-c87102322ca6","html_url":"https://github.com/graphistry/graph-app-kit","commit_stats":null,"previous_names":[],"tags_count":176,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphistry%2Fgraph-app-kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphistry%2Fgraph-app-kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphistry%2Fgraph-app-kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphistry%2Fgraph-app-kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/graphistry","download_url":"https://codeload.github.com/graphistry/graph-app-kit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248631710,"owners_count":21136559,"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-07-31T18:00:45.161Z","updated_at":"2025-04-12T20:46:31.887Z","avatar_url":"https://github.com/graphistry.png","language":"Python","funding_links":[],"categories":["Uncategorized","Python","others"],"sub_categories":["Uncategorized"],"readme":"[ ![Version](https://img.shields.io/docker/v/graphistry/graph-app-kit-st?logo=docker) ](https://hub.docker.com/r/graphistry/graph-app-kit-st/tags)\n[ ![CI](https://github.com/graphistry/graph-app-kit/actions/workflows/ci.yml/badge.svg) ](https://github.com/graphistry/graph-app-kit/actions/workflows/ci.yml)\n[ ![Publish](https://github.com/graphistry/graph-app-kit/actions/workflows/publish.yml/badge.svg) ](https://github.com/graphistry/graph-app-kit/actions/workflows/publish.yml)\n[ ![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/graphistry/graph-app-kit-st?logo=docker) ](https://hub.docker.com/repository/docker/graphistry/graph-app-kit-st/builds)\n✔️ Linux\n✔️ OS X\n❌ Windows ([#39](https://github.com/graphistry/graph-app-kit/issues/39))\n\n\n[![Uptime Robot status](https://img.shields.io/uptimerobot/status/m787548531-e9c7b7508fc76fea927e2313?label=hub.graphistry.com)](https://status.graphistry.com/) [\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)](https://twitter.com/graphistry)\n\n\n# Welcome to graph-app-kit\n\nTurn your graph data into a secure and interactive visual graph app in 15 minutes! \n\n\n![Screenshot](https://user-images.githubusercontent.com/4249447/92298596-8e518600-eeff-11ea-8276-069281a4af93.png)\n\n## Why\n\nThis open source effort puts together patterns the Graphistry team has reused across many graph projects as teams go from code-heavy Jupyter notebook experiments to deploying streamlined analyst tools. Whether building your first graph app, trying an idea, or wanting to check a reference, this project aims to simplify that process. It covers pieces like: Easy code editing and deployment, a project stucture ready for teams, built-in authentication, no need for custom JS/CSS at the start, batteries-included data + library dependencies, and fast loading \u0026 visualization of large graphs.\n\n## What\n\n* **Minimal core**: The barebones dashboard server. In provides a StreamLit docker-compose container with PyData ecosystem libraries and examples of visualizing data from various systems. Install it, plug in credentials to various web services like cloud databases and a free [Graphistry Hub](https://hub.graphistry.com) visualization account, and launch. It does not have GPU ETL and GPU AI libraries.\n\n* **Full core**: Initially for AWS, the full core bundles adds to the docker-compose system: Accounts, Jupyter notebooks for authoring, serves StreamLit dashboards with both public + private zones, and runs Graphistry/RAPIDS locally on the same server. Launch with on click via the Cloud Formation template.\n\n* **Full core + DB**: DB-specific variants are the same as minimal/full, and add simpler DB-specific quick launching/connecting.\n\n## Get started\n\n### Quick (Local code) - full GPU core + third-party connectors\n\n**Note**: Base image includes Nvidia RAPIDS and AI dependencies so is quite large, see CPU alternative for a lightweight alternativve\n\n**Note**: Use `sudo` for docker-compose commands if your configuration requires it and is giving permission error\n\n```bash\n# Minimal core\ngit clone https://github.com/graphistry/graph-app-kit.git\ncd graph-app-kit/src/docker\n\n# Enable docker buildkit\n# ... or run docker-compose via provided alias script `./dc`\nexport DOCKER_BUILDKIT=1\nexport COMPOSE_DOCKER_CLI_BUILD=1\n\n# Build\ndocker-compose build\n\n# Optional: Edit src/docker/.env (API accounts), docker-compose.yml: Auth, ports, ...\n\n# Launch\ndocker-compose up -d\ndocker-compose logs -f -t --tail=100\n```\n\n=\u003e `http://localhost:8501/`\n\nTo [add views](docs/views.md) and relaunch:\n\n```bash\n# Add dashboards @ src/python/views/\u003cyour_custom_view\u003e/__init__.py\n\ndocker-compose up -d --force-recreate\n```\n\n### Quick (Local code) - minimal CPU core + third-party connectors\n\nSame commands as above, but use `./dc.cpu`, which aliases `docker-compose -f docker-compose.yml -f override/cpu.override.yml`:\n\n```bash\ngit clone https://github.com/graphistry/graph-app-kit.git\ncd graph-app-kit/src/docker\n./dc.cpu build\n...\n./dc.cpu up\n```\n\n### Quick Launchers - minimal/full core\n\n1. Quick launch options:\n\n**Full**: [![Launch Stack](https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png)](https://console.aws.amazon.com/cloudformation/home?region=region#/stacks/new?stackName=graph_app_kit_full\u0026templateURL=https://graph-app-kit-repo-public.s3.us-east-2.amazonaws.com/templates/latest/core/graphistry.yml)\n\n* Public + protected Streamlit dashboards, Jupyter notebooks + editing, Graphistry, RAPIDS\n* Login to web UI as `admin` / `i-instanceid` -\u003e file uploader, notebooks, ...\n* Dashboards: `/public/dash` and `/private/dash`\n* [More info](docs/setup.md)\n\nAdmin:\n\n```bash\n# launch logs\ntail -f /var/log/cloud-init-output.log -n 1000\n\n# app logs\nsudo docker ps\nsudo docker logs -f -t --tail=1 MY_CONTAINER\n\n# restart a graphistry container\ncd graphistry \u0026\u0026 sudo docker-compose restart MY_CONTAINER\n\n# restart caddy (Caddy 1 override)\ncd graphistry \u0026\u0026 sudo docker-compose -f docker-compose.gak.graphistry.yml up -d caddy\n\n# run streamlit\ncd graph-app-kit/public/graph-app-kit \u0026\u0026 docker-compose -p pub run -d --name streamlit-pub streamlit\ncd graph-app-kit/private/graph-app-kit \u0026\u0026 docker-compose -p priv run -d --name streamlit-priv streamlit\n```\n\n**Minimal**: Open Streamlit, ssh to connect/add [free Graphistry Hub username/pass](https://www.graphistry.com/get-started):\n\n**Database-specific**: [Amazon Neptune](docs/neptune.md), [TigerGraph](docs/tigergraph.md)\n\n2. [Add views](docs/views.md)\n\n3. [Main configurations and extensions](docs/extend.md): Database connectors, authentication, notebook-based editing, and more\n\n### Native (Experimental)\n\nInstall dependencies, pick location of views folder, and run:\n\n```bash\ncd src/python\npip3 install -r requirements-system.txt\npip3 install -r requirements-app.txt\nVIEW_PATH=\"`pwd`/views\" streamlit run entrypoint.py \n```\n\n## The pieces\n\n### Core\n\n* Prebuilt Python project structure ready for prototyping\n* [Streamlit](https://www.streamlit.io/) quick self-serve dashboarding\n* [Graphistry](https://www.graphistry.com/get-started) point-and-click GPU-accelerated visual graph analytics\n* Data frames: Data wrangling via [Pandas](https://pandas.pydata.org/)and [Apache Arrow](https://arrow.apache.org/), including handling formats such as CSV, XLS, JSON, Parquet, and more\n\n* Standard Docker and docker-compose cross-platform deployment\n\n### GPU acceleration (optional) - Full\n\nFor non-minimal installs, if GPUs are present, `graph-app-kit` leverages GPU cloud acceleration:\n\n* GPU Analytics:  [RAPIDS](https://www.rapids.ai) and CUDA already setup for use if run with an Nvidia docker runtime - cudf GPU dataframes, [BlazingSQL](https://www.blazingsql.com) GPU SQL, cuGraph GPU graph algorithms, cuML libraries, and more\n\n* GPU Visualization: Connect to an external Graphistry server or, faster, run on the same GPU server\n\n### Prebuilt integrations \u0026 recipes\n\n`graph-app-kit` works well with the Python data ecosystem (pandas, cudf, PySpark, SQL, ...) and we're growing the set of builtins and recipes:\n\n* Graph databases\n  \n  * [AWS Neptune](https://aws.amazon.com/neptune/): [quick launch](docs/neptune.md) and [manual launch](docs/neptune-manual.md)\n  * [TinkerPop Gremlin](https://tinkerpop.apache.org/): [query demos](https://github.com/graphistry/graph-app-kit/tree/master/src/python/views/demo_neptune_01_minimal_gremlin)\n  * [TigerGraph](https://www.tigergraph.com): [setup](docs/tigergraph.md)\n\n  * Collaborations welcome!\n\n* [Jupyter notebooks](https://jupyter.org/): Use quick launchers or [integrations guide](docs/extend.md) for web-based live editing of dashboards by sharing volume mounts between Jupyter and Streamlit\n\n* [Caddy](https://caddyserver.com/): Reverse proxy for custom URLs, [automatic LetsEncrypt TLS certificates](http://letsencrypt.org/), multiple sites on the same domain, pluggable authentication (see [integrations guide](docs/extend.md))\n\n* Also you can install your [custom Python Packages](docs/additional-packages.md).\n\n## Contribute\n\nWe welcome all sorts of help!\n\n* Deployment: Docker, cloud runners, ...\n* Dependencies: Common graph packages\n* Connectors: Examples for common databases and how to get a lot of data out\n* Demos!\n\nSee [DEVELOP.md](DEVELOP.md) for more contributor information\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphistry%2Fgraph-app-kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraphistry%2Fgraph-app-kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphistry%2Fgraph-app-kit/lists"}