{"id":8804,"url":"https://github.com/MarcSkovMadsen/awesome-streamlit","name":"awesome-streamlit","description":"The purpose of this project is to share knowledge on how awesome Streamlit is and can be","projects_count":101,"last_synced_at":"2026-10-04T07:00:26.038Z","repository":{"id":35163485,"uuid":"213096950","full_name":"MarcSkovMadsen/awesome-streamlit","owner":"MarcSkovMadsen","description":"The purpose of this project is to share knowledge on how awesome Streamlit is and can be","archived":false,"fork":false,"pushed_at":"2023-05-25T17:22:46.000Z","size":120451,"stargazers_count":2282,"open_issues_count":31,"forks_count":358,"subscribers_count":45,"default_branch":"master","last_synced_at":"2026-09-08T13:20:11.249Z","etag":null,"topics":["analytics","apps","awesome-list","data","data-science","exploration","finance","fun","innovation","machine-learning","mathematics","models","python","streamlit","trading"],"latest_commit_sha":null,"homepage":"https://awesome-streamlit.org","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-sa-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MarcSkovMadsen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"contributing.md","funding":null,"license":"license.md","code_of_conduct":"code-of-conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-10-06T02:07:49.000Z","updated_at":"2026-08-24T12:26:27.000Z","dependencies_parsed_at":"2024-01-12T20:04:17.714Z","dependency_job_id":null,"html_url":"https://github.com/MarcSkovMadsen/awesome-streamlit","commit_stats":{"total_commits":452,"total_committers":16,"mean_commits":28.25,"dds":0.06194690265486724,"last_synced_commit":"58b3d5cca0ba57c1d57221bf6eaef39f4b2edc07"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MarcSkovMadsen/awesome-streamlit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcSkovMadsen%2Fawesome-streamlit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcSkovMadsen%2Fawesome-streamlit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcSkovMadsen%2Fawesome-streamlit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcSkovMadsen%2Fawesome-streamlit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MarcSkovMadsen","download_url":"https://codeload.github.com/MarcSkovMadsen/awesome-streamlit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcSkovMadsen%2Fawesome-streamlit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":343072799,"owners_count":37995436,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-04T02:00:06.888Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"}},"created_at":"2024-01-12T16:18:07.488Z","updated_at":"2026-10-04T07:00:26.038Z","primary_language":null,"list_of_lists":false,"displayable":true,"categories":["Awesome Resources","Getting Started with the Awesome Streamlit Repository","APP NAME","Governance"],"sub_categories":["Prerequisites","Code quality and Tests","Installation","Streamlit.io","Awesome-Streamlit.org","Alternative","App","CI/ CD and Hosting","Code","Social","Technical","Tutorial","How to sponsor the Awesome Streamlit project","How to contribute awesome apps","How to contribute to the Streamlit Community","How to contribute to Streamlit.io","Project Layout","Article","How to contribute to the Streamlit Package","Guide","Run the Application using the image on Dockerhub","Workflow"],"readme":"# Awesome Streamlit [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/MarcSkovMadsen/awesome-streamlit)\r\n\r\n[\u003cimg src=\"https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/streamlit-logo.png?raw=true\" align=\"right\" height=\"75\" width=\"75\"\u003e](https://streamlit.io)\r\n\r\n\u003e The fastest way to build **Awesome Tools and Apps**! Powered by **Python**!\r\n\r\nThe purpose of this project is to share knowledge on how Awesome [Streamlit](https://streamlit.io/) is and can become. [Pull requests](https://github.com/MarcSkovMadsen/awesome-streamlit/pulls) are very welcome!\r\n\r\nStreamlit has just been [announced](https://towardsdatascience.com/coding-ml-tools-like-you-code-ml-models-ddba3357eace) (Oct 2019) but I see the potential of becoming the **Iphone of Data Science Apps**. And maybe it can even become the Iphone of Technical Writing, Code, Micro Apps and Python.\r\n\r\nThis project provides\r\n\r\n- A curated [list](https://github.com/MarcSkovMadsen/awesome-streamlit#awesome-resources) of Awesome Streamlit **resources**. See below.\r\n- An [**awesome Streamlit application**](https://awesome-streamlit.org) with a **gallery** of Awesome Streamlit Apps.\r\n  - Feel free to add your awesome app to the gallery via a [Pull request](https://github.com/MarcSkovMadsen/awesome-streamlit/pulls). It's easy (see below).\r\n- A [**vision**](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/AWESOME-STREAMLIT.md) on how awesome Streamlit is and can become.\r\n- A **best practices** example and **starter template** of an awesome, multipage app with an automated CI/ CD pipeline, deployed to the cloud and running in a Docker container.\r\n\r\nVisit the app at [awesome-streamlit.org](https://awesome-streamlit.org)!\r\n\r\n![Awesome Streamlit Org Animation](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/awesome-streamlit-full-branded.gif?raw=true)\r\n\r\n## The Magic of Streamlit\r\n\r\nThe only way to truly understand how magical Streamlit is to play around with it. But if you need to be convinced first, then here is the **4 minute introduction** to Streamlit!\r\n\r\nAfterwards you can go to the [Streamlit docs](https://streamlit.io/docs/) to get started. You might also visit [Awesome Streamlit docs](https://awesome-streamlit.readthedocs.io/en/latest/).\r\n\r\n[![Introduction to Streamlit](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/youtube-introduction-to-streamlit.png?raw=true)](https://www.youtube.com/watch?v=B2iAodr0fOo\u0026feature=youtu.be \"Introduction to streamlit\")\r\n\r\n## Awesome Resources\r\n\r\nA curated list of awesome streamlit resources. Inspired by [awesome-python](https://github.com/vinta/awesome-python) and [awesome-pandas](https://github.com/tommyod/awesome-pandas).\r\n\r\n### Alternative\r\n\r\n- [Bokeh](https://bokeh.pydata.org/en/latest/index.html) (#Alternative)\r\n- [Jupyter Voila](https://blog.jupyter.org/and-voil%C3%A0-f6a2c08a4a93) (#Alternative)\r\n- [Panel](http://panel.pyviz.org/) (#Alternative)\r\n- [Plotly Dash](https://plot.ly/dash/) (#Alternative)\r\n\r\n### App\r\n\r\n- [Hello-streamlit deployed on Glitch](https://glitch.com/~hello-streamlit) by [Alexander Garcia](https://github.com/djauxel) (#App, #Deployment)\r\n- [How to create and deploy data exploration web app easily using python](https://github.com/robmarkcole/mqtt-camera-streamer) (#App, #Code, #Deployment)\r\n- [Kaggle Mushrooms Dashboard](https://github.com/pierpaolo28/Data-Visualization/tree/master/Streamlit) (#App)\r\n- [NLP Based App with Streamlit](https://github.com/Jcharis/Streamlit_DataScience_Apps/tree/master/NLP_App_with_Streamlit_Python) by [Jesse E. Agbe (JCharis)](https://github.com/Jcharis) (#App, #Code)\r\n- [Powering up Apache JMeter with Streamlit](https://qainsights.com/apache-jmeter-with-streamlit-for-machine-learning/) by [Naveen Kumar](https://github.com/QAInsights) (#App, #Code)\r\n- [Quickly Build and Deploy a Dashboard with Streamlit](https://towardsdatascience.com/quickly-build-and-deploy-an-application-with-streamlit-988ca08c7e83) by [Maarten Grootendorst](https://github.com/MaartenGr) (#App, #Code, #Deployment)\r\n- [Sentiment Analyzer Tool](https://www.linkedin.com/posts/patidarparas13_code-ml-machinelearning-ugcPost-6585745929062703104-ttkv) (#App, #Code, #Social)\r\n- [Streamlit Demo](https://github.com/Poseyy/StreamlitDemo) by [Luke Posey](https://github.com/Poseyy) (#App, #Code)\r\n- [Streamlit-components-demo App](https://fullstackstation.com/streamlit-components-demo) (#App)\r\n- [Deploying web apps with Streamlit, Docker, and AWS](https://github.com/collinprather/streamlit-docker/tree/docker-compose+postgres) by [Collin Prather](https://github.com/collinprather) (#App, #Code)\r\n\r\n### Article\r\n\r\n- [Intermediate Streamlit - Tips and Tricks for an evolving app](https://towardsdatascience.com/intermediate-streamlit-d5a1381daa65) by [Peter Baumgartner](https://pmbaumgartner.github.io/) (#Article)\r\n\r\n### Awesome-Streamlit.org\r\n\r\n- [App](https://awesome-streamlit.org) by [Awesome-Streamlit.org](https://github.com/marcskovmadsen/awesome-streamlit) (#Awesome-Streamlit.org)\r\n- [Docker Image](https://cloud.docker.com/u/marcskovmadsen/repository/docker/marcskovmadsen/awesome-streamlit) by [Awesome-Streamlit.org](https://github.com/marcskovmadsen/awesome-streamlit) (#Awesome-Streamlit.org)\r\n- [Docs](https://awesome-streamlit.readthedocs.io/en/latest/) by [Awesome-Streamlit.org](https://github.com/marcskovmadsen/awesome-streamlit) (#Awesome-Streamlit.org)\r\n- [LinkedIn post that started awesome-streamlit.org](https://www.linkedin.com/feed/update/urn:li:activity:6586497522896818176) (#Awesome-Streamlit.org, #Social)\r\n- [Python Package](https://pypi.org/project/awesome-streamlit/) by [Awesome-Streamlit.org](https://github.com/marcskovmadsen/awesome-streamlit) (#Awesome-Streamlit.org)\r\n- [Repo](https://github.com/marcskovmadsen/awesome-streamlit) by [Awesome-Streamlit.org](https://github.com/marcskovmadsen/awesome-streamlit) (#Awesome-Streamlit.org)\r\n- [Resources List](https://github.com/marcskovmadsen/awesome-streamlit) by [Awesome-Streamlit.org](https://github.com/marcskovmadsen/awesome-streamlit) (#Awesome-Streamlit.org)\r\n\r\n### Code\r\n\r\n- [Awesome Streamlit Test Runner](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/test_runner_app/test_runner_app.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [Bokeh Experiments](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/bokeh_experiments/bokeh_experiments.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [Country Indicators](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/country_indicators/streamlit_country_indicators.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code, #Voila)\r\n- [Deploying Streamlit app to EC2 instance](https://medium.com/@pokepim/deploying-streamlit-app-to-ec2-instance-7a7edeffbb54) (#Code)\r\n- [Emojis](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/emojis/emojis.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [File Download Workaround](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/file_download/file_download.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [File Uploader](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/file_uploader/file_uploader.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [File Uploader - Multiple Files](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/file_uploader_multiple_files/file_uploader_multiple_files.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [Image Classifier](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/image_classifier/image_classifier.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [Iris Classifier](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/iris_classification/iris.py) by [Noah Saunders](https://morioh.com/p/7066169a0314) (#App In Gallery, #Code, #Machine Learning)\r\n- [Iris EDA App](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/iris_eda_app/iris_eda_app.py) by [Jesse E. Agbe (JCharis)](https://github.com/Jcharis) (#App In Gallery, #Code)\r\n- [Kickstarter Dashboard](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/kickstarter_dashboard/kickstarter_dashboard.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [Layout Experiments](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/layout_experiments/app.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [ML App registry](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/ml_app_registry/app.py) by [Boadzie Daniel](https://github.com/Boadzie) (#App In Gallery, #Code, #Machine Learning)\r\n- [Medical Language Learner Model](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/medical_language_learner/medical_language_learner.py) by [Georgi Tancev](https://github.com/gtancev) (#App In Gallery, #Code, #NLP)\r\n- [Mining and Classifying Medical Text Documents](https://github.com/gtancev/MLML/blob/master/nlp_app.py) by [Georgi Tancev](https://github.com/gtancev) (#App, #Code)\r\n- [NBA Roster Turnover](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/nba_roster_turnover/roster_turnover.py) by [Kevin Arvai](https://github.com/arvkevi) (#App In Gallery, #Code)\r\n- [Owid Dashboard](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/owid_dashboard/owid_dashboard.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [Self Driving Cars](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/self_driving_cars/self_driving_cars.py) by [Streamlit](https://streamlit.io/) (#App In Gallery, #Code)\r\n- [Sentiment Algorithm](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/sentiment_analyzer/sentiment_analyzer.py) by [Paras Patidar](https://github.com/patidarparas13) (#App In Gallery, #Code, #Machine Learning)\r\n- [SpacyIO](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/spacyio/spacyio.py) by [Ines Montani](https://gist.github.com/ines) (#App In Gallery, #Code, #NLP)\r\n- [Spreadsheet](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/spreadsheet/spreadsheet.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [Streamlit-components-demo Code](https://github.com/virusvn/streamlit-components-demo) (#Code)\r\n- [Table Experiments](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/table_experiments/app.py) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#App In Gallery, #Code)\r\n- [Uber Data Explorer App](https://dataexplorerlit.herokuapp.com/) (#Code)\r\n- [Uber NYC Pickups](https://raw.githubusercontent.com/streamlit/demo-uber-nyc-pickups/master/app.py) by [Streamlit](https://streamlit.io/) (#App In Gallery, #Code)\r\n- [Yahoo Finance](https://raw.githubusercontent.com/MarcSkovMadsen/awesome-streamlit/master/gallery/yahoo_finance_app/yahoo_finance_app.py) by [Paduel](https://github.com/paduel) (#App In Gallery, #Code, #Finance)\r\n\r\n### Guide\r\n\r\n- [Host Streamlit on Heroku with Nginx basic authentication](https://github.com/Taxuspt/heroku_streamlit_nginx) by [Alexandre Domingues](https://github.com/Taxuspt) (#Code, #Guide)\r\n\r\n### Sister Sites\r\n\r\n- [Awesome-Panel.Org](https://awesome-panel.org) by [Marc Skov Madsen](https://datamodelsanalytics.com) (#Sister Sites)\r\n\r\n### Social\r\n\r\n- [LinkedIn #streamlit](https://www.linkedin.com/search/results/all/?keywords=%23streamlit) (#Social)\r\n- [Twitter #streamlit](https://twitter.com/search?q=%23streamlit\u0026src=typed_query) (#Social)\r\n\r\n### Streamlit.io\r\n\r\n- [Streamlit Community](https://discuss.streamlit.io/top/quarterly) (#Streamlit.io)\r\n- [Streamlit Docs](https://streamlit.io/docs/) (#Streamlit.io)\r\n- [Streamlit launches article in TechCrunch](https://techcrunch.com/2019/10/01/streamlit-launches-open-source-machine-learning-application-development-framework/) (#Streamlit.io)\r\n- [Streamlit.io](https://streamlit.io/) (#Streamlit.io)\r\n- [The announcing blog](https://towardsdatascience.com/coding-ml-tools-like-you-code-ml-models-ddba3357eace) (#Streamlit.io)\r\n- [The announcing community post](https://discuss.streamlit.io/t/streamlit-has-launched/105/3) (#Streamlit.io)\r\n\r\n### Technical\r\n\r\n- [Hacker News technical discussion of how Streamlit work](https://news.ycombinator.com/item?id=21158487) (#Technical)\r\n\r\n### Tutorial\r\n\r\n- [A step by step guide to running streamlit pytorch and bert on a cheap aws instance](https://fuzzyblog.io/blog/python/2019/10/17/a-step-by-step-guide-to-running-streamlit-pytorch-and-bert-on-a-cheap-aws-instance.html) (#Article, #Deployment, #Tutorial)\r\n- [Building a ui for your latest ai](https://towardsdatascience.com/full-stack-ai-building-a-ui-for-your-latest-ai-project-in-no-time-at-all-7e5c8fd4eafd  ) by [Luke Posey](https://github.com/Poseyy) (#Article, #Tutorial)\r\n- [Building an Iris EDA App with Streamlit and Python](https://www.youtube.com/watch?v=L_mZcEMFUIc) by [Jesse E. Agbe (JCharis)](https://github.com/Jcharis) (#Tutorial, #Video)\r\n- [Full-Stack AI: Building a UI for Your Latest AI Project in No Time at All](https://towardsdatascience.com/full-stack-ai-building-a-ui-for-your-latest-ai-project-in-no-time-at-all-7e5c8fd4eafd) (#Article, #Image Recognition, #Tutorial)\r\n- [How To Deploy Streamlit Apps (Using Heroku)](https://www.youtube.com/watch?v=skpiLtEN3yk\u0026feature=youtu.be) (#Deployment, #Tutorial, #Video)\r\n- [How to build your machine learning app in 3 simple steps](https://towardsdatascience.com/how-to-build-your-machine-learning-app-in-3-simple-steps-d56ed910355c) (#Article, #Deployment, #Tutorial)\r\n- [How to create and deploy data exploration web app easily using python](https://medium.com/@ansjin/how-to-create-and-deploy-data-exploration-web-app-easily-using-python-a03c4b8a1f3e) (#Article, #Deployment, #Tutorial)\r\n- [How to write web apps using simple python for data scientists](https://towardsdatascience.com/how-to-write-web-apps-using-simple-python-for-data-scientists-a227a1a01582) (#Article, #Tutorial)\r\n- [Mining and Classifying Medical Text Documents](https://towardsdatascience.com/mining-and-classifying-medical-text-documents-1876462f73bc) by [Georgi Tancev](https://github.com/gtancev) (#Article, #Deployment, #NLP, #Tutorial)\r\n- [Streamlit Python Tutorial (Crash Course)](https://www.youtube.com/watch?v=_9WiB2PDO7k) by [Jesse E. Agbe (JCharis)](https://github.com/Jcharis) (#Tutorial, #Video\r\n\r\n## Governance\r\n\r\nThis repo is maintained by me :-)\r\n\r\nI'm Marc, Skov, Madsen, PhD, CFA®, Lead Data Scientist Developer at [Ørsted](https://orsted.com)\r\n\r\nYou can learn more about me at [datamodelsanalytics.com](https://datamodelsanalytics.com)\r\n\r\n[\u003cimg src=\"https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/images/datamodelsanalytics.png?raw=true\" style=\"max-width: 968px\"\u003e](https://datamodelsanalytics.com)\r\n\r\nI try my best to govern and maintain this project in the spirit of the [Zen of Python](https://www.python.org/dev/peps/pep-0020/).\r\n\r\nBut **i'm not an experienced open source maintainer** so helpfull suggestions are appreciated.\r\n\r\nThanks\r\n\r\n## Contribute\r\n\r\nGitHub [Issues](https://github.com/MarcSkovMadsen/awesome-streamlit/issues) and [Pull requests](https://github.com/MarcSkovMadsen/awesome-streamlit/pulls) are very welcome!\r\n\r\nIf you believe Awesome Streamlit is awesome and would like to join as a Core Developer feel free to reach out via [datamodelsanalytics.com](https://datamodelsanalytics.com)\r\n\r\n### How to contribute awesome links\r\n\r\nThe best way to contribute an awesome link is via a [Pull request](https://github.com/MarcSkovMadsen/awesome-streamlit/pulls).\r\n\r\nIn the pull request you should\r\n\r\n- describe why your contribution is awesome and should be included.\r\n- add your resource the list of RESOURCES in the [package/awesome_streamlit/database/resources.py](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/package/awesome_streamlit/database/resources.py) file.\r\n\r\nThanks.\r\n\r\n### How to contribute awesome apps\r\n\r\nThe best way to contribute an awesome app is via a [Pull request](https://github.com/MarcSkovMadsen/awesome-streamlit/pulls).\r\n\r\nIn the pull request you should\r\n\r\n- describe why your contribution is awesome and should be included.\r\n- create a new folder `gallery/\u003cyour_app_name\u003e` and app file `gallery/\u003cyour_app_name\u003e/\u003cyour_app_name.py\u003e`.\r\n- Add your app code conforming to the template\r\n\r\n```python\r\n\"\"\"\r\n## APP NAME\r\n\r\nDESCRIPTION\r\n\r\nAuthor: [YOUR NAME](https://URL_TO_YOU))\\n\r\nSource: [Github](https://github.com/URL_TO_CODE)\r\n\"\"\"\r\nimport streamlit as st\r\n\r\n# Your imports goes below\r\n\r\ndef main():\r\n    st.title(\"APP NAME\")\r\n    st.markdown(\"DESCRIPTION\")\r\n\r\n    # Your code goes below\r\n\r\nif __name__ == \"__main__\":\r\n    main()\r\n```\r\n\r\n- Please note magic in sub pages does not work. So **don't use magic**.\r\n- add the `your_app_name` to the\r\n  - list of APPS_IN_GALLERY in the [package\\awesome_streamlit\\database\\apps_in_gallery.py](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/package\\awesome_streamlit\\database\\apps_in_gallery.py).\r\n- update the [requirements_base.txt](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/requirements_base.txt) file.\r\n    Please specify the required versions.\r\n- Run the automated tests using `invoke test.all` and fix all errors from your app\r\n- Run the full app via `streamlit run app.py` and manually test your contribution.\r\n\r\nPlease note that your app should not require high compute power as we are running on one of the cheapest tiers available on Azure.\r\n\r\nFeel free to reach out if you have comments, questions or need help.\r\n\r\nThanks.\r\n\r\n### How to contribute to the Streamlit Community\r\n\r\nPlease sign up to and participate in the community at [discuss.streamlit.io](https://discuss.streamlit.io/)\r\n\r\n### How to contribute to the Streamlit Package\r\n\r\nPlease contribute to improving the Streamlit package at [GitHub/streamlit/streamlit](https://github.com/streamlit/streamlit)\r\n\r\n### How to contribute to Streamlit.io\r\n\r\nStreamlit.io is in the position of trying to balance building an awesome, succesfull business and providing an awesome product to the open source community.\r\n\r\nIf you are in a Team please consider signing up for the beta of\r\n\r\n- [Streamlit for teams](https://streamlit.io/forteams/)\r\n\r\n### How to sponsor the Awesome Streamlit project\r\n\r\nIf you would like to sponsor my time or the infrastructure the platform is running on, feel free to reach out via [datamodelsanalytics.com](https://datamodelsanalytics.com).\r\n\r\nYou can also appreciate the work I have already done if you\r\n\r\n[![Buy me a coffee](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/buymeacoffee.png?raw=true)](https://www.buymeacoffee.com/4jlTzBJyQ)\r\n\r\nThanks\r\n\r\nMarc\r\n\r\n## LICENSE\r\n\r\n[Attribution-ShareAlike 4.0 International](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/license.md)\r\n\r\n## Getting Started with the Awesome Streamlit Repository\r\n\r\n### Prerequisites\r\n\r\n- An Operating System like Windows, OsX or Linux\r\n- A working [Python](https://www.python.org/) installation.\r\n  - We recommend using 64bit Python 3.7.4.\r\n- a Shell\r\n  - We recommend [Git Bash](https://git-scm.com/downloads) for Windows 8.1\r\n  - We recommend [wsl](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux) for For Windows 10\r\n- an Editor\r\n  - We recommend [VS Code](https://code.visualstudio.com/) (Preferred) or [PyCharm](https://www.jetbrains.com/pycharm/).\r\n- The [Git cli](https://git-scm.com/downloads)\r\n\r\n### Installation\r\n\r\nClone the repo\r\n\r\n```bash\r\ngit clone https://github.com/MarcSkovMadsen/awesome-streamlit.git\r\n```\r\n\r\ncd into the project root folder\r\n\r\n```bash\r\ncd awesome-streamlit\r\n```\r\n\r\n#### Create virtual environment\r\n\r\n##### via python\r\n\r\nThen you should create a virtual environment named .venv\r\n\r\n```bash\r\npython -m venv .venv\r\n```\r\n\r\nand activate the environment.\r\n\r\nOn Linux, OsX or in a Windows Git Bash terminal it's\r\n\r\n```bash\r\nsource .venv/Scripts/activate\r\n```\r\n\r\nor alternatively\r\n\r\n```bash\r\nsource .venv/bin/activate\r\n```\r\n\r\nIn a Windows terminal it's\r\n\r\n```bash\r\n.venv/Scripts/activate.bat\r\n```\r\n\r\n##### or via anaconda\r\n\r\nCreate virtual environment named awesome-streamlit\r\n\r\n```bash\r\nconda create -n awesome-streamlit python=3.7.4\r\n```\r\n\r\nand activate environment.\r\n\r\n```bash\r\nactivate awesome-streamlit\r\n```\r\n\r\nIf you are on windows you need to install some things required by GeoPandas by following [these instructions](https://geoffboeing.com/2014/09/using-geopandas-windows/).\r\n\r\nThen you should install the local requirements\r\n\r\n```bash\r\npip install -r requirements_local.txt\r\n```\r\n\r\nFinally you need to install some [spacy](https://spacy.io/) dependencies\r\n\r\n```bash\r\npython -m spacy download en_core_web_sm\r\npython -m spacy download en_core_web_md\r\npython -m spacy download de_core_news_sm\r\n```\r\n\r\n### Build and run the Application Locally\r\n\r\n```bash\r\nstreamlit run app.py\r\n```\r\n\r\nor as a Docker container via\r\n\r\n```bash\r\ninvoke docker.build --rebuild\r\ninvoke docker.run-server\r\n```\r\n\r\n### Run the Application using the image on Dockerhub\r\n\r\nIf you don't wan't to clone the repo and build the docker container you can just use `docker run` to run the image from [Dockerhub](https://cloud.docker.com/u/marcskovmadsen/repository/docker/marcskovmadsen/awesome-streamlit)\r\n\r\nTo run bash interactively\r\n\r\n```bash\r\ndocker run -it -p 80:80 --entrypoint \"/bin/bash\" marcskovmadsen/awesome-streamlit:latest\r\n```\r\n\r\nTo run the streamlit interactively on port 80\r\n\r\n```bash\r\ndocker run -it -p 80:80 --entrypoint \"streamlit\" marcskovmadsen/awesome-streamlit:latest run app.py\r\n```\r\n\r\n### Code quality and Tests\r\n\r\nWe use\r\n\r\n- [isort](https://pypi.org/project/isort/) for sorting import statements\r\n- [autoflake](https://github.com/myint/autoflake) to remove unused imports and unused variables\r\n- [black](https://pypi.org/project/black/) the opinionated code formatter\r\n- [pylint](https://www.pylint.org/) for static analysis\r\n- [mypy](https://github.com/python/mypy) for static type checking\r\n- [pytest](https://github.com/pytest-dev/pytest) for unit to functional tests\r\n\r\nto ensure a high quality of our code and application.\r\n\r\nYou can run all tests using\r\n\r\n```bash\r\ninvoke test.all\r\n```\r\n\r\n### Streamlit Tests\r\n\r\nI've created a first version of an awesome streamlit test runner. You run it via\r\n\r\n```bash\r\nstreamlit run test_runner_app.py\r\n```\r\n\r\nor in Docker\r\n\r\n```bash\r\ndocker run -it -p 80:80 --entrypoint \"streamlit\" marcskovmadsen/awesome-streamlit:latest run test_runner_app.py\r\n```\r\n\r\n![Awesome Streamlit Test Runner](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/awesome-streamlit-test-runner.png?raw=true)\r\n\r\n### Workflow\r\n\r\nWe use the power of [Invoke](http://www.pyinvoke.org/) to semi-automate the local workflow. You can see the list of available commands using\r\n\r\n```bash\r\n$ invoke --list\r\nAvailable tasks:\r\n\r\n  docker.build                            Build Docker image\r\n  docker.push                             Push the Docker container\r\n  docker.run                              Run the Docker container interactively.\r\n  docker.run-server                       Run the Docker container interactively\r\n  docker.system-prune                     The docker system prune command will free up space\r\n  test.all (test.pre-commit, test.test)   Runs isort, autoflake, black, pylint, mypy and pytest\r\n  test.autoflake                          Runs autoflake to remove unused imports on all .py files recursively\r\n  test.bandit                             Runs Bandit the security linter from PyCQA.\r\n  test.black                              Runs black (autoformatter) on all .py files recursively\r\n  test.isort                              Runs isort (import sorter) on all .py files recursively\r\n  test.mypy                               Runs mypy (static type checker) on all .py files recursively\r\n  test.pylint                             Runs pylint (linter) on all .py files recursively to identify coding errors\r\n  test.pytest                             Runs pytest to identify failing tests\r\n```\r\n\r\n### Configuration\r\n\r\nYou can configure the app in the `config.py` file.\r\n\r\nPlease note that Streamlit has its own config files in the `~/.streamlit` folder.\r\n\r\n### CI/ CD and Hosting\r\n\r\nThe application is\r\n\r\n- build as a Docker image and tested via Azure Pipelines builds\r\n  - You find the Dockerfiles [here](https://github.com/MarcSkovMadsen/awesome-streamlit/tree/master/devops/docker) and the Azure pipelines yml files [here](https://github.com/MarcSkovMadsen/awesome-streamlit/tree/master/devops/azure-pipelines)\r\n\r\n![Azure Pipelines](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/azure-pipeline.png?raw=true)\r\n\r\n- pushed to the Dockerhub repository [marcskovmadsen/awesome-streamlit](https://cloud.docker.com/u/marcskovmadsen/repository/docker/marcskovmadsen/awesome-streamlit).\r\n\r\n![Dockerhub](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/dockerhub.png?raw=true)\r\n\r\n- released via Azure Pipelines\r\n\r\n![Azure Pipelines](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/azure-pipeline-release.png?raw=true)\r\n\r\n- to a web app for containers service on Azure on the cheapest non-free pricing tier\r\n\r\n![Azure Pipelines](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/assets/azure-pricing-tier.png?raw=true)\r\n\r\n### The Awesome-Streamlit Package\r\n\r\nYou can build the package using\r\n\r\n```bash\r\ncd package\r\npython setup.py sdist bdist_wheel\r\n```\r\n\r\nIf you wan't to publish the package to PyPi you should first\r\n\r\nupdate the version number in the setup.py file. The format is `YYYYmmdd.version`. For example `20191014.2`\r\n\r\nThen you run\r\n\r\n```bash\r\ntwine upload dist/awesome-streamlit-YYYYmmdd.version.tar.gz -u \u003cthe-pypi-username\u003e -p \u003cthe-pypi-password\u003e\r\n```\r\n\r\nFor more info see the package [README.md](https://github.com/MarcSkovMadsen/awesome-streamlit/blob/master/package/README.md)\r\n\r\n### Project Layout\r\n\r\nThe basic layout of a application is as simple as\r\n\r\n```bash\r\n.\r\n└── app.py\r\n```\r\n\r\nAs our application grows we would refactor our app.py file into multiple folders and files.\r\n\r\n- *assets* here we keep our css and images assets.\r\n- *models* - Defines the layout of our data in the form of\r\n  - Classes: Name, attribute names, types\r\n  - DataFrame Schemas: column and index names, dtypes\r\n  - SQLAlchemy Tables: columns names, types\r\n- *pages* - Defines the different pages of the Streamlit app\r\n- *services* - Organizes and shares business logic, models, data and functions with different pages of the Streamlit App.\r\n  - Database interactions: Select, Insert, Update, Delete\r\n  - REST API interactions, get, post, put, delete\r\n  - Pandas transformations\r\n\r\nand end up with a project structure like\r\n\r\n```bash\r\n.\r\n├── app.py\r\n└── src\r\n    └── assets\r\n    |    └── css\r\n    |    |   ├── app.css\r\n    |    |   ├── component1.css\r\n    |    |   ├── component2.css\r\n    |    |   ├── page1.css\r\n    |    |   └── page2.css\r\n    |    └── images\r\n    |    |   ├── image1.png\r\n    |    |   └── image2.png\r\n    ├── core\r\n    |   └── services\r\n    |       ├── service1.py\r\n    |       └── service2.py\r\n    └── pages\r\n    |   └── pages\r\n    |       ├── page1.py\r\n    |       └── page2.py\r\n    └── shared\r\n        └── models\r\n        |   ├── model1.py\r\n        |   └── model2.py\r\n        └── components\r\n            ├── component1.py\r\n            └── component2.py\r\n```\r\n\r\nFurther refactoring is guided by by [this](https://itnext.io/choosing-a-highly-scalable-folder-structure-in-angular-d987de65ec7) blog post and the [Angular Style Guide](https://angular.io/guide/styleguide).\r\n\r\nWe place our tests in a `test` folder in the root folder organized with folders similar to the `app` folder and file names with a `test_` prefix.\r\n\r\n```bash\r\n.\r\n└── test\r\n    ├── test_app.py\r\n    ├── core\r\n    |   └── services\r\n    |       ├── test_service1.py\r\n    |       └── test_service2.py\r\n    └── pages\r\n    |   └── pages\r\n    |       ├── page1\r\n    |       |   └── test_page1.py\r\n    |       └── page2\r\n    └── shared\r\n        └── models\r\n        |   ├── test_model1.py\r\n        |   └── test_model2.py\r\n        └── components\r\n            ├── test_component1.py\r\n            └── test_component2.py\r\n```\r\n","projects_url":"https://awesome.ecosyste.ms/api/v1/lists/marcskovmadsen%2Fawesome-streamlit/projects"}