78528a0c87 | ||
---|---|---|
.vscode | ||
Documentation | ||
Ooui | ||
Ooui.AspNetCore | ||
Ooui.Forms | ||
Ooui.Wasm | ||
PlatformSamples/AspNetCoreMvc | ||
PlatformTests | ||
Samples | ||
Templates | ||
Tests | ||
.editorconfig | ||
.gitignore | ||
LICENSE | ||
Ooui.sln | ||
README.md | ||
ooui.service |
README.md
Ooui Web Framework
Version | Package | Description |
---|---|---|
Ooui | Core library with HTML elements and a server | |
Ooui.AspNetCore | Integration with ASP.NET Core | |
Ooui.Forms | Xamarin.Forms backend using Ooui |
Ooui (pronounced weee!) is a small cross-platform UI library for .NET that uses web technologies.
It presents a classic object-oriented UI API that controls a dumb browser. With Ooui, you get the full power of your favorite .NET programming language plus the ability to interact with your app using any device.
Try it Online
Head on over to http://ooui.mecha.parts to tryout the samples.
Try the Samples Locally
git clone git@github.com:praeclarum/Ooui.git
cd Ooui
dotnet restore
msbuild
dotnet run --project Samples/Samples.csproj --no-build
(There is currently an issue with Xamarin.Forms and building from the dotnet cli, so for now we use the msbuild command and then set the --no-build flag on dotnet run but this will eventually change when the issue is resolved.)
This will open the default starting page for the Samples. Now point your browser at http://localhost:8080/shared-button
You should see a button that tracks the number of times it was clicked. The source code for that button is shown in the example below.
Example App
Here is the complete source code to a fully collaborative button clicking app.
using System;
using Ooui;
class Program
{
static void Main(string[] args)
{
// Create the UI
var button = new Button("Click me!");
// Add some logic to it
var count = 0;
button.Click += (s, e) => {
count++;
button.Text = $"Clicked {count} times";
};
// Publishing makes an object available at a given URL
// The user should be directed to http://localhost:8080/shared-button
UI.Publish ("/shared-button", button);
// Don't exit the app until someone hits return
Console.ReadLine ();
}
}
Make sure to add a reference to Ooui before you start running!
dotnet add package Ooui
dotnet run
With just that code, a web server that serves the HTML and web socket logic necessary for an interactive button will start.
The Many Ways to Ooui
Ooui has been broken up into several packages to increase the variety of ways that it can be used. Here are some combinations to help you decide which way is best for you.
Ooui | Ooui.AspNetCore | Ooui.Forms | |
---|---|---|---|
✓ | Write the UI using the web DOM and use the built-in web server | ||
✓ | ✓ | Write the UI using the web DOM and serve it with ASP.NET Core | |
✓ | ✓ | ✓ | Write the UI using Xamarin.Forms and serve it with ASP.NET Core |
✓ | ✓ | Write the UI using Xamarin.Forms and use the built-in web server |
How it works
When the user requests a page, the page will connect to the server using a web socket. This socket is used to keep the server's in-memory model of the UI (the one you work with as a programmer) in sync with the actual UI shown to the user in their browser. This is done using a simple messaging protocol with JSON packets.
When the user clicks or otherwise interacts with the UI, those events are sent back over the web socket so that your code can deal with them.
Contributing
Ooui is open source and I love merging PRs. Please fork away, and please obey the .editorconfig file. :-) Try to file issues for things that you want to work on before you start the work so that there's no duplicated effort. If you just want to help out, check out the issues and dive in!