All Projects → kmcallister → Tunapanel

kmcallister / Tunapanel

Licence: other
Autogenerate live Web-based control panels for Rust programs

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Tunapanel

Panel
A high-level app and dashboarding solution for Python
Stars: ✭ 977 (+634.59%)
Mutual labels:  gui, panel
Imscp
i-MSCP Main Repository
Stars: ✭ 184 (+38.35%)
Mutual labels:  panel, control-panel
Surgeconfiggenerator
Surge配置生成器 (快速生成属于你自己的 Surge 配置)
Stars: ✭ 125 (-6.02%)
Mutual labels:  config
Electron Python Example
Electron as GUI of Python Applications
Stars: ✭ 1,749 (+1215.04%)
Mutual labels:  gui
Tabtoolbar
A small library for creating tabbed toolbars
Stars: ✭ 129 (-3.01%)
Mutual labels:  gui
I Simpa
An Open Source software for 3D sound propagation modelling
Stars: ✭ 125 (-6.02%)
Mutual labels:  gui
Chopsui
An experimental UI toolkit
Stars: ✭ 130 (-2.26%)
Mutual labels:  gui
Soundux
🔊 A cross-platform soundboard
Stars: ✭ 119 (-10.53%)
Mutual labels:  gui
Imgui
Immediate Mode GUI for C#
Stars: ✭ 133 (+0%)
Mutual labels:  gui
Jetfirecloud
基于SpringCloud Finchley.RELEASE的微服务开发脚手架,整合了spring-security-oauth2、springboot-admin、feign、hystrix、spring-cloud-gateway、turbine等全家桶
Stars: ✭ 129 (-3.01%)
Mutual labels:  config
Litegui.js
Javascript Library to create webapps with a desktop look-alike interface. All the widgets are created from Javascript instead of using HTML.
Stars: ✭ 131 (-1.5%)
Mutual labels:  gui
Rosbag to csv
Converter from ros bag to csv
Stars: ✭ 128 (-3.76%)
Mutual labels:  gui
Config
A lightweight yet powerful config package for Go projects
Stars: ✭ 126 (-5.26%)
Mutual labels:  config
Health
Laravel Health Panel
Stars: ✭ 1,774 (+1233.83%)
Mutual labels:  panel
Config
Library for managing environment variables in Clojure using EDN configuration files
Stars: ✭ 125 (-6.02%)
Mutual labels:  config
Particl Desktop
The GUI application for Particl Markeplace and PART coin wallet. A decentralized peer to peer marketplace –free, secure, private, untraceable.
Stars: ✭ 131 (-1.5%)
Mutual labels:  gui
Gumcp
Web Control Panel for Raspberry Pi
Stars: ✭ 124 (-6.77%)
Mutual labels:  control-panel
Confl
Config parser for go, modeled after Nginx format, Nice lenient syntax with Comments
Stars: ✭ 127 (-4.51%)
Mutual labels:  config
Rcloneexplorer
rclone GUI for Windows
Stars: ✭ 129 (-3.01%)
Mutual labels:  gui
Smartinvs
Advanced Inventory API for your Minecraft Bukkit plugins.
Stars: ✭ 132 (-0.75%)
Mutual labels:  gui

tunapanel: Autogenerate live Web-based control panels

crates.io badge Travis CI badge

API documentation

tunapanel lets you quickly and easily generate a Web-based panel for controlling the behavior of a running Rust program, locally or over the network. You simply declare a struct representing all of the panel state, and a callback for updates.

A simple example, from examples/basic.rs:

#[macro_use] extern crate serde_derive;
#[macro_use] extern crate tunapanel;

use tunapanel::widget::Button;

tunapanel! {
    #[title = "My awesome panel"]
    #[derive(Debug)]
    struct Panel {
        #[label = "A float"]
        x: f32 = 0.0,

        #[label = "A string"]
        y: String = String::new(),

        #[label = "A bool"]
        b: bool = true,

        #[label = "A button"]
        but1: Button = Button::new(),

        #[label = "Another button"]
        but2: Button = Button::new(),
    }
}

fn main() {
    tunapanel::serve(|p: Panel| {
        println!("Panel update: {:?}", p);
    }).unwrap();
}

Build and run this and it will output something like:

Listening on 127.0.0.1:1337

You can now navigate to http://127.0.0.1:1337 in your favorite Web browser and you will see something similar to:

Example control panel

When you modify these form elements, the Rust program receives updates in realtime. Here we just print them:

Panel update: Panel { x: 0.3, y: "Hello w", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello w", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello wor", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: true, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: false, but1: Button(false), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: false, but1: Button(true), but2: Button(false) }
Panel update: Panel { x: 0.3, y: "Hello world!", b: false, but1: Button(false), but2: Button(true) }

If any field fails to parse, the interface will display a "Failure" indication. You can try again immediately.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].