# vgtk **Repository Path**: mirrors_berkus/vgtk ## Basic Information - **Project Name**: vgtk - **Description**: A declarative desktop UI framework for Rust built on GTK and Gtk-rs - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-22 - **Last Updated**: 2026-05-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # vgtk A declarative desktop UI framework for Rust built on [GTK](https://www.gtk.org/) and [Gtk-rs]. ## At A Glance - A clean, functional component model inspired by the [Elm architecture](https://guide.elm-lang.org/architecture/), [Redux](https://redux.js.org/) and [Yew](https://github.com/yewstack/yew). - A declarative DSL for composing GTK widgets inspired by [React](https://reactjs.org/) and [JSX](https://reactjs.org/docs/introducing-jsx.html), using virtual "DOM" diffing for efficient updates. - Fully cross platform with a native look and feel for Linux, Windows and macOS. - Built on Rust's [`Future`](https://doc.rust-lang.org/std/future/trait.Future.html)s using [GLib](https://developer.gnome.org/glib/stable/)'s event loop, giving you [async/await superpowers](https://rust-lang.github.io/async-book/) cleanly integrated with the GTK event model. - Absolutely no need for an embedded browser engine, unless you [really want one](https://webkitgtk.org/). ## Documentation - [API docs (latest release)](http://vgtk.rs/) - [Tutorial](https://bodil.lol/vgtk/) ## Show Me!

```rust use vgtk::{ext::*, gtk, run, Component, UpdateAction, VNode}; use vgtk::lib::{gtk::*, gio::ApplicationFlags}; #[derive(Clone, Default, Debug)] struct Model { counter: usize, } #[derive(Clone, Debug)] enum Message { Inc, Exit, } impl Component for Model { type Message = Message; type Properties = (); fn update(&mut self, message: Message) -> UpdateAction { match message { Message::Inc => { self.counter += 1; UpdateAction::Render } Message::Exit => { vgtk::quit(); UpdateAction::None } } } fn view(&self) -> VNode { gtk! {