The Use Case Streamlit Is Actually Built For

▶ Watch (01:30)

Getting data in front of a million users has a well-trodden path: JSON API, React team, maybe Swift for iOS. Jenkins’s argument is that another design space gets far less attention. You are a programmer or data scientist. You have some data. You want to see it, maybe show colleagues, maybe put it on a company intranet.

“That is an underserved design space and” — Kris Jenkins

That range, from a quick personal look up to one concurrent user a second, is what Streamlit is built for.

Getting a Project Running in Under Two Minutes with UV

▶ Watch (03:30)

UV combines pip and virtual environment management in one tool. uv init creates a project. uv add streamlit installs the package into a central cache on the local machine. The next time any project needs that package, it skips the network entirely. For a live conference demo, that matters. Jenkins ran source venv/bin/activate then streamlit run main.py and had a browser open with live reload in roughly two minutes from an empty directory. No pre-prepared tricks.

Loading and Shaping Data with Pandas

▶ Watch (09:01)

pd.read_csv('votes.csv') returns 51,000 rows across nine columns. Drop the variable name bare and Streamlit renders a sortable, downloadable table. Jenkins then filtered to finals only using Pandas’s bitmask syntax: pass a boolean series back into the dataframe to get a WHERE clause equivalent. The trickier fix was a schema change in the data. Eurovision added a telephone vote in 2015, splitting jury and public scores. Pre-2015 rows have jury_points as null, with the score sitting in total_points. One fillna call normalises the column and makes the full history comparable.

One Line from Data to Chart

▶ Watch (15:29)

Group the filtered data by country pair, count how many times each pair gave 12 points to the other, then pass the result to st.scatter_chart. He walked through the Cyprus/Greece scatter chart reveal (17:43) live. Cyprus and Greece light up immediately as two oversized circles, always awarding each other the maximum. Sweden draws a dense cluster too. A line chart of Denmark flatlining for several years revealed the period Denmark dropped out of the contest entirely.

“Data processing is most of it and” — Kris Jenkins

Interactivity, Layout, and the Execution Model

▶ Watch (23:17)

st.selectbox takes a prompt and a list, renders a dropdown, and returns the chosen value. Swap the hardcoded country string for that return value and the chart updates on selection. He walked through the interactive country picker (24:15) and then added st.columns(2) and st.tabs to split views. The execution model is intentionally simple: Streamlit reruns the whole script on every interaction. For expensive operations like a remote CSV fetch, wrap the load in a function and add the st.cache_data decorator (30:22) with a TTL. A second variant, st.cache_resource, handles connections that cannot be serialised to disk.

Notable Quotes

That is an underserved design space and Kris Jenkins · ▶ 2:30

Aren’t charts great? You can actually Kris Jenkins · ▶ 22:19

Data processing is most of it and Kris Jenkins · ▶ 23:11

Key Takeaways

  • Streamlit targets the gap between a quick personal look and a small internal audience, not public-scale apps.
  • UV’s local package cache means project setup works without internet, and a virtual environment appears automatically.
  • st.cache_data pins expensive data loads in memory; st.cache_resource handles connections that cannot be serialised.