# ⚛️ Positron

![project logo](design/icon.svg)

A Zig binding to the [webview](https://github.com/webview/webview) library. Make Zig applications with a nice HTML5 frontend a reality!

![](screenshots/i3-login.png) ![](screenshots/windows-chat.png)

## Usage

```zig
//! src/minimal.zig

const std = @import("std");
const wv = @import("positron");

pub fn main() !void {
    const view = try wv.View.create(false, null);
    defer view.destroy();

    view.setTitle("Webview Example");
    view.setSize(480, 320, .none);

    view.navigate("https://ziglang.org");
    view.run();
}
```

```zig
//! build.zig

const std = @import("std");
const pkgs = @import(".zpm/pkgs.zig");
const Sdk = @import("Sdk.zig");

pub fn build(b: *std.build.Builder) void {
    const target = b.standardTargetOptions(.{});
    const mode = b.standardReleaseOptions();

    const exe = b.addExecutable("demo", "src/minimal.zig");
    exe.setTarget(target);
    exe.setBuildMode(mode);

    // Add and link the package.
    exe.addPackage(Sdk.getPackage("positron"));
    Sdk.linkPositron(exe, null);

    exe.install();
}
```

## Example

The example is a small, two-view chat application that transfers data bidirectionally between backend and frontend.

Log in with `ziggy`/`love` and you can send messages, no real server there though!

You can build the example with `zig build` and run it with `zig build run`.

## Building

### Linux

Install `gtk-3` and `webkit2gtk`, then invoke `zig build`.

### Windows

Download [Edge Dev Channel](https://www.microsoftedgeinsider.com/download), then invoke `zig build`.

### MacOS

No research was done for the support on MacOS. Try with `zig build`.

## Contributing

This library is in a early state and is very WIP. Still, feel free to contribute with PRs, or use it. Just don't assume a stable API.