diff --git a/README.md b/README.md new file mode 100644 index 0000000..f301e17 --- /dev/null +++ b/README.md @@ -0,0 +1,138 @@ +# Ooui + +Ooui 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 web view or 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 with a web browser. + +## Quick Example + +```csharp +using Ooui; + +// Create the UI +var button = new Button($"Click me!"); + +// Add some logic to it +var count = 0; +button.Clicked += (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/button +UI.Publish("/button", button); +``` + +In this example, all users would be interacting with the same button. That's right, automatic collaboration! + +If you want each user to get their own button, then you will `Publish` a function to create it: + +```csharp +Button MakeButton() { + var button = new Button($"Click me!"); + var count = 0; + button.Clicked += (s, e) => { + count++; + button.Text = $"Clicked {count} times"; + }; + return button; +} + +UI.Publish("/button", MakeButton); +``` + + +## How it works + +When the user requests a page, Ooui will connect to the client using a Web Socket. This socket is used to keep an 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. + +When the user clicks or otherwise interacts, those events are sent back over the web socket so that your code can deal with them. + + +## Comparison + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UI LibraryOouiXamarin.FormsASP.NET MVC
How big is it?50 KB2,000 KB5,000 KB
Where does it run?EverywhereiOS, Android, Mac, WindowsWindows, Linux, Mac
How do I make a button?
new Button()
new Button()
<button />
Does it use native controls?No, HTML5 controlsYes!HTML5 controls
What controls are available?All of those in HTML5Xamarin.Forms controlsAll of those in HTML5
Which architecture will you force me to use?None, you're freeMVVMMVC/MVVM
What's the templating language?C#XAMLRazor
How do I style things?CSS baby!XAML resourcesCSS
Is there databinding?No :-(Yes!Debatable
Do I need to run a server?NopeHeck noYes
Is it web scale?How much money do you have?What's the web?Sure
+