| Crates.io | rainmeter |
| lib.rs | rainmeter |
| version | 0.1.1 |
| created_at | 2025-07-18 16:31:05.71417+00 |
| updated_at | 2025-11-04 06:36:51.16615+00 |
| description | A safe, high-level Rust wrapper around Rainmeter's C/C++ plugin API. |
| homepage | https://github.com/KitsuneDev/rainmeter-rs |
| repository | https://github.com/KitsuneDev/rainmeter-rs |
| max_upload_size | |
| id | 1759165 |
| size | 73,048 |
A (probably)-safe, high-level Rust wrapper around RainmeterΓÇÖs C/C++ plugin API. (I don't write too much Rust, so this is a work in progress. Don't judge me too harshly, please!)
Please note this is platform-specific to Windows, as Rainmeter is a Windows-only application.
For more information, please refer to the Rainmeter C++ API Overview (for the implementable functions) and the Rainmeter C++ API Reference (Which is accessed via the RainmeterContext arguments).
ReadString, ReadFormula, etc.)measure name, skin path, HWND, etc.)RainmeterPlugin trait and declare_plugin! macro to expose pluginsAdd this crate to your Cargo.toml:
[dependencies]
rainmeter = "0.1"
[lib]
crate-type = ["cdylib"]
use rainmeter::{RainmeterContext, RainmeterPlugin, RmLogLevel, declare_plugin};
#[derive(Default)]
struct MyPlugin;
impl RainmeterPlugin for MyPlugin {
fn initialize(&mut self, rm: RainmeterContext) {
let val = rm.read_double("Value", 1.0);
rm.log(RmLogLevel::LogNotice, &format!("Value = {}", val));
}
fn reload(&mut self, rm: RainmeterContext, _max: &mut f64) {}
fn update(&mut self, _rm: RainmeterContext) -> f64 { 0.0 }
fn finalize(&mut self, _rm: RainmeterContext) {}
fn get_string(&mut self, _rm: RainmeterContext) -> Option<String> { // Optional
None
}
fn execute_bang(&mut self, _rm: RainmeterContext, _args: &str) {} // Optional
}
declare_plugin!(crate::MyPlugin);
License: LGPL-3.0-or-later