{"id":17654469,"url":"https://github.com/ramiawar/dataline","last_synced_at":"2025-05-14T18:02:49.386Z","repository":{"id":156006877,"uuid":"627950717","full_name":"RamiAwar/dataline","owner":"RamiAwar","description":"Chat with your data - AI data analysis and visualization on CSV, Postgres, MySQL, Snowflake, SQLite...","archived":false,"fork":false,"pushed_at":"2025-04-30T09:35:55.000Z","size":22930,"stargazers_count":1232,"open_issues_count":26,"forks_count":123,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-05-14T18:02:41.929Z","etag":null,"topics":["ai","chart","data-science","data-visualization","llm","sql"],"latest_commit_sha":null,"homepage":"https://dataline.app","language":"TypeScript","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/RamiAwar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":"RamiAwar","buy_me_a_coffee":null,"custom":null}},"created_at":"2023-04-14T15:00:33.000Z","updated_at":"2025-05-14T07:10:53.000Z","dependencies_parsed_at":"2024-04-01T17:52:44.621Z","dependency_job_id":"d2fb02e4-24b1-448d-a23e-914bdecae2bf","html_url":"https://github.com/RamiAwar/dataline","commit_stats":{"total_commits":710,"total_committers":13,"mean_commits":54.61538461538461,"dds":0.4112676056338028,"last_synced_commit":"51282dec31bbd3d2e6f92fa3fa9996112b0e7ebc"},"previous_names":["ramiawar/dataline"],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamiAwar%2Fdataline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamiAwar%2Fdataline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamiAwar%2Fdataline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamiAwar%2Fdataline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RamiAwar","download_url":"https://codeload.github.com/RamiAwar/dataline/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254198452,"owners_count":22030964,"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":["ai","chart","data-science","data-visualization","llm","sql"],"created_at":"2024-10-23T12:14:14.465Z","updated_at":"2025-05-14T18:02:44.343Z","avatar_url":"https://github.com/RamiAwar.png","language":"TypeScript","readme":"\n\u003cp align=\"center\"\u003e\n    \u003cstrong\u003e💬 Chat with your data using natural language 📊\u003c/strong\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    Introducing DataLine, \u003cem\u003ethe simplest and fastest way\u003c/em\u003e⚡️ to analyze and visualize your data!\u003cbr\u003e\u003cem\u003eGenerate and export charts, tables, reports in seconds with DataLine - Your AI-driven data analysis and visualization tool\u003c/em\u003e 🤓\n\u003c/p\u003e\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"https://img.shields.io/github/downloads/ramiawar/dataline/total?style=flat\u0026color=%2322c55e\"\u003e\n\u003cimg src=\"https://img.shields.io/docker/pulls/ramiawar/dataline?color=%2338bdf8\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat\"\u003e\n\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/RamiAwar/dataline/actions/workflows/test.yml\"\u003e\n    \u003cimg src=\"https://github.com/RamiAwar/dataline/actions/workflows/test.yml/badge.svg?branch=main\u0026event=push\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n## 🍿 Watch a quick demo\n\n\u003ca href=\"https://youtu.be/NN99OTVy7uA\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/34dfba7c-7ab5-4a35-8fe1-e40b298ef1ae\" height=\"300\" alt=\"DataLine logo\"\u003e\u003c/a\u003e\n\n---\n\n## Index\n\n- [Who is this for](#who-is-this-for)\n- [What is it](#what-is-it)\n- [Roadmap](#where-is-it-going)\n- [Feature Support](#feature-support)\n- [Getting started](#getting-started)\n  - [Windows](#windows)\n  - [Mac](#mac)\n  - [Linux](#linux)\n  - [Docker](#docker)\n- [Upgrading](#upgrading)\n  - [Windows](#upgrade-windows)\n  - [Mac](#upgrade-mac)\n  - [Linux](#upgrade-linux)\n  - [Docker](#upgrade-docker)\n- [Running manually](#running-manually)\n- [Authentication](#authentication)\n  - [With Docker](#with-docker)\n- [Startup Quest](#startup-quest)\n- [Supported Databases](#supported-databases)\n- [Deployment](#deployment)\n\n## Who is this for?\n\nTechnical or non-technical people who want to explore data, fast. ⚡️⚡️\n\nIt also works for backend developers to speed up drafting queries and explore new DBs with ease. 😎\n\nIt's especially well-suited for businesses given its security-first 🔒 and open-source 📖 nature.\n\n## What is it?\n\nDataLine is an AI-driven data analysis and visualization tool.\n\nIt's privacy-focused, storing everything on your device. No ☁️, only ☀️!\n\nIt hides your data from the LLMs used by default, but this can be disabled if the data is not deemed sensitive.\n\nIt can connect to a variety of data sources (Postgres, Snowflake, MySQL, Azure SQL Server, Microsoft SQL Server, [Excel](#excel-support), SQLite, CSV, sas7bdat, and more), execute queries, generate charts, and allow for copying the results to build reports quickly.\n\n## Where is it going?\n\nFor now, we're trying to help people get insights out of their data, fast.\n\nThis is meant to enable non-technical folks to query data and aid data analysts in getting their jobs done 10x as fast.\n\nBut you can still influence the direction we go in. We're building this for you, so you have the biggest say.\n\n## Feature Support\n\n- [x] Broad DB support: Postgres, MySQL, Snowflake, [Excel](#excel-support), CSV, SQLite, and more\n- [x] Generating and executing SQL from natural language\n- [x] Ability to modify SQL results, save them, and re-run\n- [x] Better support for explorative questions\n- [x] Querying data files like CSV, [Excel](#excel-support), SQLite, sas7bdat (more connection types)\n- [x] Charting via natural language\n- [x] Modifying chart queries and re-rendering/refreshing charts\n- [ ] Dashboards and triggers\n- [ ] Knowledge base and 'trainable' examples (flavor of RAG)\n- [ ] More advanced charting options (bubble, stacks, etc.)\n\nWith a lot more coming soon. You can still influence what we build, so if you're a user and you're down for it, we'd love to interview you! Book some time with one of us here:\n\n- [Rami](https://calendly.com/ramiawar/quick)\n- [Anthony](https://calendly.com/anthonymalkoun)\n\n## Getting started\n\nThere are multiple ways of setting up DataLine, simplest being using a binary executable. This allows you to download a file and run it to get started.\n\nA more flexible option is using our hosted Docker image. This allows you to setup authentication and other features if you need them.\n\n#### Windows\n\nHead over to our [releases](https://github.com/RamiAwar/dataline/tags) page, and open the most recent one. There you should find a windows-exe.zip file. Download it, unzip it, and run the `DataLine.exe` file.\n\nYou might get a `\"Windows protected your PC\"` message, which is normal (more info -\u003e run anyway). Finally, open http://localhost:7377/ in your browser.\n\n#### Mac\n\nHomebrew\n\n```bash\n# install dataline\nbrew tap ramiawar/dataline\nbrew install dataline\n\n# run dataline\ndataline\n```\n\nIf you don't like Homebrew, a binary can be found in the latest release!\n\nDataLine should then be running on port 7377 accessible from your browser: http://localhost:7377\n\n#### Linux\n\nYou can use Homebrew, see the [Mac](#mac) section.\n\nYou may also wish to use the binary instead, to do so, follow the instructions in the [Windows](#windows) section, and use the `dataline-linux.tar.zip` file instead.\n\n#### Docker\n\nYou can also use our official docker image and get started in one command. This is more suitable for business use:\n\n```bash\ndocker run -p 7377:7377 -v dataline:/home/.dataline --name dataline ramiawar/dataline:latest\n```\n\nYou can manage this as you would any other container. `docker start dataline`, `docker stop dataline`\n\nFor updating to a new version, just remove the container and rerun the command. This way the volume is persisted across updates.\n\n```bash\ndocker rm dataline\ndocker run -p 7377:7377 -v dataline:/home/.dataline --name dataline ramiawar/dataline:latest\n```\n\nTo connect to the frontend, you can then visit:\n[http://localhost:7377](http://localhost:7377)\n\n## Upgrading\n\n#### Upgrade Windows\nSame as installation, just replace old exe with new exe! Your data will still be there across versions.\n\n#### Upgrade Mac\n\nHomebrew (retains your data, don't worry about that!)\n\n```bash\nbrew update \u0026\u0026 brew upgrade dataline\n```\n\nIf you don't like Homebrew, a binary can be found in the latest release! Data will still be retained there as well.\n\n#### Upgrade Linux\n\nIf using Homebrew, same as above. Otherwise simply replace the old binary with the new one!\n\n#### Upgrade Docker \n\nFor updating to a new version, just remove the container and rerun the command. This way the volume is persisted across updates.\n\n```bash\ndocker rm dataline\ndocker run -p 7377:7377 -v dataline:/home/.dataline --name dataline ramiawar/dataline:latest\n```\n\n## Running manually\n\nFeeling spicy are we? 🌶️\nThere are a few things you should know. DataLine is split into two parts: the backend and the frontend.\n\nThe backend is a Python FastAPI server, and the frontend is a React app.\nThe frontend also includes our landing page, so you need to set up an env var first!\n\nCheck the [backend](./backend/README.md) and [frontend](./frontend/README.md) readmes.\n\n## Authentication\n\nDataLine also supports basic auth 🔒 in self-hosted mode 🥳 in case you're hosting it and would like to secure it with a username/password.\n\nAuth is NOT supported ❌ when running the DataLine executable.\n\nTo enable authentication on the self-hosted version, add the environment variables AUTH_USERNAME and AUTH_PASSWORD while launching the service. ✅\n\n### With Docker\n\nInject the env vars with the docker run command as follows:\n`docker run -p 7377:7377 -v dataline:/home/.dataline --name dataline -e AUTH_USERNAME=admin -e AUTH_PASSWORD=admin ramiawar/dataline:latest`\n\nWe plan on supporting multiple user auth in the future, but for now it supports a single user by default.\n\n## Startup Quest\n\nGo through the following checklist to explore DataLine's features!\n\n- [ ] Create a sample database connection\n- [ ] Create a new chat and rename it\n- [ ] Start asking questions about your data and getting answers\n- [ ] Refresh the page and re-run some SQL queries\n- [ ] Click inside an SQL query, modify it, and save your modification for later!\n- [ ] Try to modify your sample DB connection and explore the connection editor page\n- [ ] Try asking for a chart!\n- [ ] To really challenge it, ask a question that is answered with multiple results (charts, tables, etc.) - [example](https://www.youtube.com/watch?v=6ouSok9bOVo)\n- [ ] Add a profile picture\n\n### Supported databases\n\nSee [instructions file](./dsn-instructions.md) for more details.\n\n### Deployment\n\nThe one thing you must configure when deploying DataLine to a custom domain is CORS allowed origins.\nTo do this, add the environment variable `ALLOWED_ORIGINS` (comma separated list of origins) to your domain name(s).\n\nBy default, it is set to `http://localhost:7377,http://0.0.0.0:7377` to make it work with local Docker and local binaries.\n\nFor example, running the docker image on a remote server with IP `123.123.12.34`:\n\n```bash\ndocker run -p 7377:7377 -v dataline:/home/.dataline --name dataline -e ALLOWED_ORIGINS=\"http://123.123.12.34:7377,https://123.123.12.34:7377\" ramiawar/dataline:latest\n```\n\n### Excel Support\n\nWe support excel files, but they will have to conform to some structure for the time being. We also support multiple sheets - each sheet will be ingested as a separate table.\n\nRight now, we will try to automatically detect the 'header row' and the first column based on some manual data processing (so as to keep things secure). This means that we might detect the wrong things if you have extra rows on top / logos / branding elements.\n\nTo ensure the best quality, make sure your first row is the column names, and remove any padding rows/columns from all the sheets. If any sheet fails, the import will fail.\n\nFuture improvements to this include optionally allowing LLMs to figure out what the header row is to reduce user effort.\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://ramiawar.github.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/8523191?v=4?s=100\" width=\"100px;\" alt=\"Rami Awar\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRami Awar\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=RamiAwar\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#design-RamiAwar\" title=\"Design\"\u003e🎨\u003c/a\u003e \u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=RamiAwar\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#infra-RamiAwar\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"#platform-RamiAwar\" title=\"Packaging/porting to new platform\"\u003e📦\u003c/a\u003e \u003ca href=\"#blog-RamiAwar\" title=\"Blogposts\"\u003e📝\u003c/a\u003e \u003ca href=\"https://github.com/RamiAwar/dataline/issues?q=author%3ARamiAwar\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://anthonymalkoun.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/26882839?v=4?s=100\" width=\"100px;\" alt=\"anthony2261\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eanthony2261\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=anthony2261\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-anthony2261\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#infra-anthony2261\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"#platform-anthony2261\" title=\"Packaging/porting to new platform\"\u003e📦\u003c/a\u003e \u003ca href=\"#mentoring-anthony2261\" title=\"Mentoring\"\u003e🧑‍🏫\u003c/a\u003e \u003ca href=\"#maintenance-anthony2261\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"https://github.com/RamiAwar/dataline/issues?q=author%3Aanthony2261\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/wmahad\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11237598?v=4?s=100\" width=\"100px;\" alt=\"Walusimbi Mahad\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eWalusimbi Mahad\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=wmahad\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-wmahad\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://peter.gy\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/40776291?v=4?s=100\" width=\"100px;\" alt=\"Péter Gyarmati\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePéter Gyarmati\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=peter-gy\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=peter-gy\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/joehaddad2000\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/71342036?v=4?s=100\" width=\"100px;\" alt=\"Joe Haddad\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJoe Haddad\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=joehaddad2000\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=joehaddad2000\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/maryamalki\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/27642194?v=4?s=100\" width=\"100px;\" alt=\"maryamalki\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003emaryamalki\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=maryamalki\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=maryamalki\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/filip65\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/50335272?v=4?s=100\" width=\"100px;\" alt=\"Filip Katušin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eFilip Katušin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/RamiAwar/dataline/commits?author=filip65\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/RamiAwar/dataline/issues?q=author%3Afilip65\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","funding_links":["https://polar.sh/RamiAwar"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framiawar%2Fdataline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framiawar%2Fdataline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framiawar%2Fdataline/lists"}