On GitHub, mono/xwt has picked up 1.4k stars, C#. A cross-platform UI toolkit for creating desktop applications with .NET and Mono
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
This document is an introduction to XWT, a cross-platform UI toolkit
for creating desktop applications.
If you have any question about XWT or do you want to contribute
a discussion group for XWT is available here:
http://groups.google.com/group/xwt-list
Introduction
Xwt is a new .NET framework for creating desktop applications that run
on multiple platforms from the same codebase. Xwt works by exposing
one unified API across all environments that is mapped to a set of
native controls on each platform.
This means that Xwt tends to focus on providing controls that will
work across all platforms. However, that doesn't mean that the
functionality available is a common denominator of all platforms.
If a specific feature or widget is not available in the
native framework of a platform, it will be emulated or implemented
as a set of native widgets.
Xwt can be used as a standalone framework to power the entire application
or it can be embedded into an existing host. This allows developers
to develop their "shell" using native components (for example a Ribbon
on Windows, toolbars on Linux) and use Xwt for specific bits of the
application, like dialog boxes or cross platform surfaces.
Xwt works by creating an engine at runtime that will map to the
underlying platform. These are the engines that are supported on
each platform:
This means for example that you can write code for Xwt on Windows that
can be hosted on an existing WPF application (like Visual Studio) or
an existing Gtk# application (like MonoDevelop). Or on Mac, you can
host Xwt on an existing Cocoa/Xamarin.Mac application or you can host it
in our own MonoDevelop IDE.
Getting Started
Open the Xwt.sln with MonoDevelop (or VisualStudio on Windows) and
build the solution. You should end up with the libraries that you
can use in your project and a couple of sample applications.
Using Xwt in your app
Based on your platform and the backend that you want to use, you need
to pick the libraries that you want to use in your project.
To write your first application, create an empty .NET project in your
favorite language in MonoDevelop or Visual Studio and reference the
Xwt.dll library. This is the only library that you need to reference
at compile time.
This is the simplest Xwt program you can write:
using System;
using Xwt;
class XwtDemo
{
[STAThread]
static void Main()
{
Application.Initialize(ToolkitType.Gtk);
var mainWindow = new Window()
{
Title = "Xwt Demo Application",
Width = 500,
Height = 400
};
mainWindow.Show();
Application.Run();
mainWindow.Dispose();
}
}
You use the Application.Initialize() method to get the backend
initialized. In this example we are using the Gtk backend. If you
want to use another backend, just change the parameter provided
to the Initialize() method. Also make sure the appropiate backend
DLL is available in the application directory.
Then we create an instance of the Window class, this class exposes two
interesting properties, MainMenu which can be used to set the Window's
main menu and "Content" which is of type "Widget" and allows you to
add some content to the window.
Finally, the Application.Run method is called to get the UI events
processing going.
Widget Class Hierarchy
You will be using widgets to create the contents for your
application. Xwt.Widget is the abstract base class from which all
the other components are created.
Some Widgets can contain other widgets, these are container widgets,
and in Xwt those are Canvas, Paned, HBox, VBox and Table. The first
two implement a box layout system, while the last one implements a
Table layout that allows widgets to be attached to different
anchor-points in a grid.
The layout system uses an auto-sizing system similar to what is
availble in Gtk and HTML allowing the user interface to grow or shrink
based on the contents of the childrens on it.
XwtComponent
Menu
MenuItem
Widget
Box (Container)
HBox (Container)
VBox (Container)
Button
MenuButton
ToggleButton
Calendar
Canvas (Container)
Checkbox
ComboBox
Frame
ImageView
Label
ListView
NoteBook
Paned (Container)
HPaned (Container)
VPaned (Container)
ProgressBar
ScrollView
Separator
VSeparator
HSeparator
Table (Container)
TextEntry
TreeView
WindowFrame
Window
Dialog
For example, the following attaches various labels and data entries to
a Table:
The Application class is a static class that provides services to run
your application.
Initialization
The Application.Initialize API will instruct Xwt to initialize its
binding to the native toolkit. You can pass an optional parameter to
this method that specifies the full type name to load as the backend.
For example, you can force the initialization of the backend to be
specifically Gtk+ or specifically Xamarin.Mac based on MacOS. This is
currently done like this:
As you saw from the Hello World sample, toplevel windows are created
by creating an instance of the "Xwt.Window" class. This class
exposes a couple of properties that you can use to spice it up. The
MainMenu property is used to control the contents of the application
menus while the "Content" property is used to hold a Widget.
Timers
The Application.TimeoutInvoke method takes a timespan and a Func
action method and invokes that method in the main user interface
loop.
If the provided function returns true, then the timer is restarted,
otherwise the timer ends.
Background Threads
It is very common to perform tasks in the background and for those
tasks in the background to later update the user interface. The Xwt
API is not thread safe, which means that calls to the Xwt API must
only be done from the main user interface thread.
This is a trait from the underlying toolkits used by Xwt.
If you want a background thread to run some code on the main loop, you
use the Application.Invoke (Action action) method. The provided
"action" method is guaranteed to run on the main loop.
No homepage URL was recorded for mono/xwt in TopGit's last sync. The README tab above frequently contains screenshots and demo links, or check the repository description on GitHub.
Does mono/xwt have any tags?
TopGit's last sync did not record any GitHub topics for mono/xwt. GitHub topics appear in the right sidebar of a repository page; that's the authoritative place to check.
How active is development on mono/xwt?
The most recent commit recorded on mono/xwt was 3.4 years ago, based on the GitHub push timestamp. The repository has 245 forks — one of the better signals of community interest.
How many stars does mono/xwt have?
mono/xwt has 1.4k GitHub stars — refresh the page for the live number, or check github.com/mono/xwt. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
What language is mono/xwt written in?
mono/xwt is written primarily in C#. GitHub's language field is based on the largest share of bytes in the default branch.
What license does mono/xwt use?
mono/xwt is released under the MIT license. Always verify the LICENSE file directly on GitHub for the authoritative terms — license strings can be edited out of sync with a project's actual stance.
Where do I read more about mono/xwt?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/mono/xwt is the definitive source.
Read full README in the tab above.
Want a second opinion on xwt?
Ask an AI that can read this page — one click and you get its take on xwt.