Sitemap

My Running List of Gradio Features That Actually Matter

Or the most useful Gradio features I’ve found.

9 min readMar 21, 2025

--

Image created using Gradio using custom Seafoam theme

I’ve been creating a Gradio app almost every week, and at this point, it’s become second nature. It’s just so easy to spin up a demo, tweak a UI, or share something without thinking too much about it. No messing with JavaScript, no worrying about deployment — just write some Python, get a link, and move on. In fact, the title image for this blog was created using Gradio — because, why not?

Gradio is open-source and lets you build web apps for machine learning models, APIs, or any Python function in minutes. The built-in sharing feature means you can instantly send a working link to someone without dealing with servers. And with Hugging Face Spaces, hosting them is even easier.

But this isn’t a tutorial — the official docs cover that well. Instead, I started making notes of the features that I actually use a lot or the ones that I discovered in the docs. Some are well-known, some are hidden gems — but incredibly useful. And as they say — if your notes get too long, turn them into a blog post.

So here it is — a living list of the Gradio features I’ve found most useful. With so many updates rolling out, I’ll keep adding to it as I discover more!

1. Hot reloading : Make changes, save, and see updates instantly

I’m sure many of you are already aware of this, but I included it here because I noticed several online tutorials where people weren’t taking advantage of this functionality.

When developing Gradio applications, using the command gradio app.py instead of python app.py provides a key advantage: hot-reloading. This feature automatically refreshes your application whenever you modify the code, eliminating the need to manually restart the server.

To utilize this feature, simply navigate to your project’s directory in the terminal and execute:​

gradio app.py

This command will launch your Gradio application with hot-reloading enabled, ensuring that any code changes are immediately reflected in the running app.

2. Gradio Playground: Instant Experimentation and Prototyping

Gradio Playground, as the name suggests, is an interactive space for developers to test and refine applications right in their browser. I’ve been using it a lot lately for quick prototyping, and it’s been super helpful. You can test and tweak apps right in your browser without setting up anything. It’s got ready-to-use examples for text, media, data viz, and chatbots. If you are just starting out, this is a good place to get your hands dirty.

3. Themes : Customize Your Gradio Experience

Why stick with the default style when Gradio offers a variety of themes? Gradio provides many built-in themes that let you instantly change the look and feel of your app. You can choose from options like Citrus, Glass, Monochrome, Ocean, and more.

For those who want full control, Gradio’s Theme Builder allows you to customize colors, fonts, and UI elements to match your style. Once done, you can even share your theme in the public Theme Gallery or download themes created by others.

Examples of the themes available in Theme Gallery | Source: https://huggingface.co/spaces/gradio/theme-gallery

4. Gradio Sketch: Build ML Apps Without Writing Code

The Gradio team just rolled out Gradio Sketch — a no-code way to build and deploy machine learning apps. Now, you can create full Gradio applications, add events, tweak layouts, and even deploy on Hugging Face Spaces — all without writing a single line of code.

To try it out, simply upgrade gradio and type: 𝚐𝚛𝚊𝚍𝚒𝚘 𝚜𝚔𝚎𝚝𝚌𝚑 in your terminal or even try it on Hugging Face Spaces.


pip install --upgrade gradio
gradio sketch
Source : https://x.com/abidlabs/status/1897782058178769370

5. Dynamic Rendering: Adaptive UI Based on User Input

By default, Gradio applications have a fixed layout, meaning every user sees the same interface. But sometimes, you might want to dynamically change components based on user selections — like showing a text box for a website URL, an audio input for an audio file, or a video component for video uploads.

With Gradio’s gr.render decorator, you can update the UI in real time based on user interactions. This makes your Gradio app more flexible and responsive, ensuring users see only the relevant options.

import gradio as gr
with gr.Blocks() as demo:
gr.Markdown(
'<center> <h1 style="color:MediumSeaGreen";>Dynamic Rendering in Gradio </h1></center>'
)
sources = gr.Radio(
label="Source type", choices=["Audio", "Video", "Image", "Website url"]
)
@gr.render(inputs=sources)
def show_sources(s):
if s == "Audio":
source_component = gr.Audio(type="filepath")
elif s == "Video":
source_component = gr.Video()
elif s == "Image":
source_component = gr.Image(type="filepath")
else:
source_component = gr.Textbox(placeholder="http://example.com")
return source_component
demo.launch()

6. Real-Time Dashboard from Google Sheets

You can build a real-time dashboard that updates as your Google Sheets data changes. Using Gradio Blocks and pandas, you can fetch data from both public and private Google Sheets, then display it dynamically.

import pandas as pd

URL = "https://docs.google.com/spreadsheets/d/1GudcMgEBKpL9_kfQGcmZvYPbOQBZCZTFF2ZsX5GxBd4/edit#gid=0"
csv_url = URL.replace('/edit#gid=', '/export?format=csv&gid=')

def get_data():
return pd.read_csv(csv_url)


import gradio as gr

with gr.Blocks() as demo:
gr.Markdown("# 📈 Real-Time Line Plot")
with gr.Row():
with gr.Column():
gr.DataFrame(get_data, every=gr.Timer(5))
with gr.Column():
gr.LinePlot(get_data, every=gr.Timer(5), x="Months (2024)", y="Sales ($ millions)", y_title="Sales ($ millions)", overlay_point=True, width=500, height=500)

demo.queue().launch()
Real-time dashboard that updates as your Google Sheets data changes

7. Creating Data Science Plots in Gradio

I‘ve been using Gradio for a while, mostly for quick UI builds, but I never realized how powerful its plotting features were until I explored the documentation. It turns out Gradio includes LinePlot, ScatterPlot, and BarPlot, all sharing the same simple API. You can feed these plots into a pandas DataFrame and create dynamic, interactive visualisations in no time. The best part is the ability to filter data with drop-down, use color for categories, aggregate values, and even select regions interactively. This makes it incredibly easy to build custom dashboards with real-time data exploration, all without extra front-end work. More details here.

import gradio as gr
import pandas as pd
import numpy as np
import random

# Generate synthetic student performance data
df = pd.DataFrame({
'study_hours': np.random.randint(1, 20, 50),
'exam_score': np.random.randint(40, 100, 50),
'study_group': [random.choice(["A", "B", "C", "D"]) for _ in range(50)]
})

with gr.Blocks() as demo:
group_filter = gr.Dropdown(["all", "A", "B", "C", "D"], value="all", label="Study Group")

def filtered_df(group):
return df if group == "all" else df[df["study_group"] == group]

scatter = gr.ScatterPlot(filtered_df, inputs=[group_filter], x="study_hours", y="exam_score", color="study_group", title="Study Hours vs Exam Score")
line = gr.LinePlot(filtered_df, inputs=[group_filter], x="study_hours", y="exam_score", title="Study Hours vs Exam Score (Line)")
bar = gr.BarPlot(filtered_df, inputs=[group_filter], x="study_group", y="exam_score", y_aggregate="mean", title="Average Exam Score by Study Group")

# Adding region selection for interactivity
selection_total = gr.Number(label="Total Study Hours in Selection")

def select_region(selection: gr.SelectData):
min_h, max_h = selection.index
return df[(df["study_hours"] >= min_h) & (df["study_hours"] <= max_h)]["study_hours"].sum()

line.select(select_region, None, selection_total)

demo.launch()
Data Science plots in Gradio — great for a Dashboard

Other than this, Gradio also handles time-based data effortlessly. With a datetime column, you can create time series plots using LinePlot or ScatterPlot, and x_bin helps aggregate data over time. Features like gr.DateTime for range selection and gr.Timer() for real-time updates make it great for both historical analysis and live monitoring.

8. Displaying Data Next to Plots for Clearer Analysis

Sometimes, you need raw data displayed next to visualisations, and Gradio makes this easy. With gr.DataFrame, you can show structured data alongside plots, making it simple to cross-check values and provide deeper context.

The latest Gradioupdate adds even more powerful features likePin Columns: Keep important columns in view while scrolling through large datasets like:

  • Sort by Multiple Columns: Easily organize data by multiple criteria at once.
  • Toggle Editability: Choose which columns users can modify while keeping others static.
  • Sync Data with Plots in Real-Time: Any updates in the table immediately reflect in linked visualisations.
  • Better Accessibility & Usability: Improved keyboard navigation and selection for smoother interaction.

For a full breakdown of all the new features and improvements, check out the detailed blog post from the team:

9. FastRTC: Instantly Turn Python Functions into Real-Time Audio/Video Streams

WebRTC is great for real-time audio and video, but setting it up is a headache if you’re not an expert. That’s why FastRTC caught my attention — it takes care of the tricky parts, so you can build real-time voice and video apps in Python without diving deep into WebRTC.

With FastRTC, I can easily create interactive, real-time apps powered by models such as Gemini 2.0 Flash. It effortlessly transforms regular Python functions into two-way audio and video streams, and seamlessly integrates with Gradio’s UI. This makes building sophisticated audio/video apps straightforward — even for ML engineers without deep WebRTC expertise.

Have a look at the project’s cookbook to get a sense of its capabilities.

The library’s cookbook showcases diverse applications

10. Creating Discord and Slack Bots with Gradio

This came as a surprise to me as I wasn’t aware of this functionality, but you can actually turn your Gradio app into a Discord or Slack bot. That means users can interact with your app directly within a chat server — whether it’s generating images, processing text, or even handling file inputs.

Gradio’s Discord bot in action | Source: https://www.gradio.app/guides/creating-a-discord-bot-from-a-gradio-app

The way it works is pretty straightforward: the bot listens for mentions, sends the user’s message (and any attachments) to your Gradio app via its built-in API, and then returns the response right in the chat. Since Gradio’s API is highly flexible, you can build bots that support text, images, audio, streaming, and even chat history.

If you’re interested in setting this up, check out the official documentation for step-by-step instructions:
👉 Discord Bot Guide
👉 Slack Bot Guide

I’m definitely going to experiment with this for my own projects.

11. Groovy: Convert Python to JavaScript Instantly

https://github.com/gradio-app/groovy?tab=readme-ov-file

Groovy makes life easier by turning Python into JavaScript automatically. Instead of spending hours manually writing JavaScript for client-side tasks, you can quickly write simple Python functions and let Groovy convert them into blazing-fast JavaScript. It supports essential Python features and some Gradio-specific classes, and if it encounters code it can’t convert, it clearly shows exactly what’s causing trouble . Groovy speeds up your workflow, making building interactive apps simpler and faster than ever.

12. Chatbot watermarks : Built-in Attribution for AI Responses

Gradio now includes chatbot watermarks, automatically adding attribution when users copy text from AI-generated responses. This ensures transparency and proper crediting of AI outputs without any extra effort from users. To enable this, you will need to upgrade to Gradio SDK 5.22.0 and start using the watermark feature.

Chatbot watermarks in Gradio

⏲ Upcoming Gradio Features that Are Worth the Wait

This section highlights some upcoming Gradio add-ons that I’m really excited about. I’ve compiled them from X/Twitter posts by the team, so if there’s anything I’ve missed, let me know.

Gradio Deep LinksInstantly share AI-generated results with a single link.

How Deep Link works in Gradio | Source: https://x.com/Gradio/status/1900431943667233132

Instead of explaining prompts and parameters in a Gradio app manually, just send a Deep Link, and the recipient will see the exact same output, with all settings preloaded. Looking forward to try this feature.

In addition to Deep Links, there will be features like persistent UI hosting and redesigned and ever more powerful Image Editor component as per a tweet from the official Gradio account.

Upcoming features in Gradio | Source: https://x.com/Gradio/status/1902047216094650477

Wrapping Up

Gradio keeps surprising me — not just with major features, but with the little details that make building and sharing ML apps feel effortless. I’ll keep this post updated as I discover more, but if you’ve stumbled upon any Gradio features I’ve missed, let me know. Till then Happy building.

--

--

Parul Pandey
Parul Pandey

Written by Parul Pandey

Principal Data Scientist @H2O.ai | Author of Machine Learning for High-Risk Applications

Responses (2)