Dash, Shiny, or Streamlit? Exploring Python Dashboards with World Health Data

20 August 2025

Lately, I’ve been diving into different ways to tell stories with data. In a previous post, I experimented with Tableau to build a dashboard showcasing book data. Tableau is a fantastic tool, but I quickly ran into its limits when I wanted more flexibility. On the other end of the spectrum, I’ve spent plenty of time with Python libraries like Matplotlib and Seaborn, which are great for static visualizations, but not so great when stakeholders want to interact with the data.

That’s what led me to discover Dash and Plotly. With them, I was able to build a fully interactive, highly customizable dashboard in Python. It worked beautifully, but it also opened up a bigger question: what other tools are out there that could do the same job?

To find out, I decided to test three different Python-based frameworks for interactive dashboards: Dash, Shiny (via Posit), and Streamlit. I asked ChatGPT to draft a project specification for a simple app that could be created with each, and I sketched a layout to see just how easy (or not) each framework made it to customize the look and feel.

What I learned pretty quickly is that no single framework is perfect. Each has its own sweet spots and frustrations. In the next sections, I’ll walk through my experience with each one and share what I liked and didn’t like about each one.

Python Dash

Dash is used to create interactive dashboards purely using Python. It gives you a lot of control of the layout, look, and feel of the dashboard, which is great if you want to capture your specific vision. It was also built by Plotly, so it is perfect for using interactive Plotly visualizations.

You can explore the full Dash version of the World Health Data dashboard here.

Dash has a very simple layout by default with lots of room for customization.

Where This Framework Shines:

Drawbacks to Consider:

Streamlit

Streamlit is all about speed and simplicity. It is perfect for when you want to spin up an interactive dashboard with just a few lines of Python code. It’s less about custom layouts and visuals, and more about getting something up and running quickly which makes it perfect for when you want to show off your data without too much fuss about design.

Explore the Streamlit version of the World Health Dashboard here.

Streamlit provides several settings for the dashboard viewer to customize their experience.

Where This Framework Shines:

Drawbacks to Consider:

Shiny

Shiny is a framework that is likely familiar to many R users and is now available using Python as well. The idea is simple: write a little code to produce a fully interactive web app that reacts to your data. It is very approachable and can be a great option, especially if you are already familiar with Shiny in R but want to use the Python ecosystem.

Explore the Shiny World Health Dashboard here.

Shiny uses a card display for a clean dashboard layout.

Where This Framework Shines:

Drawbacks to Consider:

Conclusion

Overall, there’s no single “best” choice for dashboards; Each framework has its strengths and trade-offs. Personally, I’ll likely reach for Streamlit when I want to quickly spin up interactive visualizations, and Dash when I need more flexibility or customization.