Member-only story
Technical Encounter: Low Code With Dash, Streamlit, and Panel — Intro
Developing data applications with ease
The big data period did not innovate only data processing and data storage, but it had a great impact on the types of applications we could develop. If traditional analytics, dashboards, and data visualizations were meant for exploratory data analysis and reporting, nowadays, we can use data visualization to bring insights to our users. This type of dashboard is already integrated into applications that monitor home utility consumption, physical activity, music consumption, digital balance, etc.
If data analysts and data scientists are used to conduct exploratory data analysis in Jupyter Notebooks, now they can leverage tools like Plotly, Dash, Streamlit, and Panel to benefit from software development best practices and to create data products for their end users. More than this, they can now build web data applications without needing the extensive knowledge a full stack developer requires in web development.

In this article, I will go through the differences between Dash, Streamlit, and Panel by showcasing a small data application about website visitors (about the data processing required for the visitor world map I’ve written here). This article focuses on the technical setup of the three types of applications, from package dependencies, docker setup to multi-page and plotting data. Statefullness, caching, and load testing will be detailed in part two of the series.
Package Dependencies
With poetry , package dependencies become manageable (you might want to have a look at deptry too), and we can configure them per group of dependencies, as shown below:
# dependencies for streamlit
[tool.poetry.group.streamlit.dependencies]
python = "^3.11"
plotly = "^5.15.0"
duckdb = "^0.8.1"
streamlit = "^1.24.1"
# dependencies for dash
[tool.poetry.group.dash.dependencies]
python = "^3.11"
plotly = "^5.15.0"
duckdb = "^0.8.1"
pandas = "^2.0.1"
dash = "^2.11.1"
dash-bootstrap-components = "^1.4.1"
# dependencies for panel…