#tauri-plugin #graphql #ipc #toolkit #building #type-safe #schema

mizuki

A toolkit for building Tauri Plugins that enables type-safe IPC through GraphQL

5 releases

0.2.0 Mar 6, 2024
0.2.0-alpha.3 Feb 4, 2024
0.2.0-alpha.2 Dec 16, 2023
0.2.0-alpha.1 Dec 13, 2023
0.1.0 Dec 4, 2023

#370 in GUI

Download history 181/week @ 2024-01-01 41/week @ 2024-01-15 91/week @ 2024-01-22 113/week @ 2024-02-12 66/week @ 2024-02-19 568/week @ 2024-02-26 419/week @ 2024-03-04 295/week @ 2024-03-11 198/week @ 2024-03-18 8/week @ 2024-03-25 71/week @ 2024-04-01 250/week @ 2024-04-08 201/week @ 2024-04-15

530 downloads per month

MIT license

110KB
417 lines

Mizuki

Crates.io Documentation MIT licensed

A toolkit for building Tauri plugins that enables type-safe IPC through GraphQL.

Notice

This project is a fork from JonasKruckenberg/tauri-plugin-graphql.

But I thought that it would be a great a idea to push the plugin futher and create a toolkit for building GraphQL Tauri Plugins.

Install

Rust

[dependencies]
mizuki = "0.2.0"

JavaScript

The only client-side adapter currently is @mizuki/urql, a custom exchange for urql. If you need adapters for other GraphQL clients, open a PR!

Package Version (click for changelogs)
mizuki-urql-adapter urql adapter version

Usage

You need to register the plugin giving it a async_graphql::Schema. This schema will be used to fulfill requests.

use async_graphql::{Schema, Object, EmptySubscription, EmptyMutation, Result as GraphQLResult, SimpleObject};

#[derive(SimpleObject, Debug, Clone)]
struct ListItem {
    id: i32,
    text: String
}

impl ListItem {
    pub fn new(text: String) -> Self {
        Self {
            id: rand::random::<i32>(),
            text
        }
    }
}

struct Query;

#[Object]
impl Query {
    async fn list(&self) -> GraphQLResult<Vec<ListItem>> {
        let item = vec![
            ListItem::new("foo".to_string()),
            ListItem::new("bar".to_string())
        ];

        Ok(item)
    }
}

fn init_plugin<R: tauri::Runtime>() -> mizuki::MizukiPlugin<R, Query, EmptyMutation, EmptySubscription> {
    mizuki::Builder::new("todo-plugin", Schema::new(
        Query,
        EmptyMutation,
        EmptySubscription,
    )).build()
}

fn main() {
    tauri::Builder::default()
        // The plugin name is required
        .plugin(init_plugin())
        .run(tauri::generate_context!())
        .expect("failed to run app");
}

Contributing

If you want to help out, there are a few areas that need improvement:

  • Client Adapters - Currently, only a urql adapter exists; having adapters for more client libraries would be very nice.

PRs are welcome!

License

MIT © Tony Mushah

Dependencies

~26–70MB
~1M SLoC