Skip to content
Cross platform GUI framework for desktop and mobile applications in .NET
Branch: develop
Clone or download
cwensley Merge pull request #1373 from cwensley/curtis/mac-window-animation
Mac: Window animation and Dialog button fixes
Latest commit d02ac75 Apr 22, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Add operating system to issue template Apr 16, 2018
build Add other configurations for vscode Apr 10, 2019
lib Mac: Use alignment rect for controls with intrinsic padding Apr 1, 2019
src Mac: Fix showing Dialog buttons Apr 22, 2019
test Mac: Don’t use animation when showing a Dialog with no border Apr 22, 2019
.editorconfig Ensure C# brace formatting is correct Dec 13, 2018
.gitattributes New attributes Apr 29, 2014
.gitignore Update MonoDevelop/VS for Mac addin Feb 1, 2018
LICENSE.txt Update license year Feb 1, 2018
azure-pipelines.yml Fix CI build on Mac Apr 22, 2019
build.cmd Update build to work on linux Jan 17, 2018 Move more things Jan 12, 2018


A cross platform desktop and mobile user interface framework

Build Status forums Gitter wiki NuGet MyGet


This framework can be used to build applications that run across multiple platforms using their native toolkit, with an easy to use API. This will make your applications look and work as a native application on all platforms, using a single UI codebase.

For advanced scenarios, you can take advantage of each platform's capabilities by wrapping your common UI in a larger application, or even create your own high-level controls with a custom implementations per platform.

This framework currently supports creating Desktop applications that work across Windows Forms, WPF, MonoMac, and GTK#. There is a Mobile/iOS port in the works, but is considered incomplete.

This framework was built so that using it in .NET is natural. For example, a simple hello-world application might look like:

using Eto.Forms;
using Eto.Drawing;

public class MyForm : Form
	public MyForm ()
		Title = "My Cross-Platform App";
		ClientSize = new Size(200, 200);
		Content = new Label { Text = "Hello World!" };
	static void Main()
		new Application().Run(new MyForm());

or in a F# script:

#load ".paket/load/"
// see

open Eto.Drawing
open Eto.Forms

type MyForm() as this =
    inherit Form()
        this.Title      <- "My Cross-Platform App"
        this.ClientSize <- Size (200, 200)
        this.Content    <- new Label(Text = "Hello F# World!")

let app = new Application()
let form = new MyForm()

Getting Started

To begin creating apps using Eto.Forms, follow the Quick Start Guide.

To compile or contribute to Eto.Forms, read the Contributing Guide.



Your project only needs to reference Eto.dll, and include the corresponding platform assembly that you wish to target. To run on a Mac platform, you need to bundle your app.

  • Eto.dll - Eto.Forms (UI), Eto.Drawing (Graphics), and platform loading
  • Eto.Mac.dll - MonoMac platform for OS X using 32-bit mono
  • Eto.Mac64.dll - MonoMac platform for OS X using 64-bit mono
  • Eto.XamMac.dll - Xamarin.Mac Classic platform for OS X to embed mono
  • Eto.XamMac2.dll - Xamarin.Mac Unified platform for OS X to embed mono
  • Eto.WinForms.dll - Windows Forms platform using GDI+ for graphics
  • Eto.Direct2D.dll - Windows Forms platform using Direct2D for graphics
  • Eto.Wpf.dll - Windows Presentation Foundation platform
  • Eto.Gtk.dll - Gtk+3 platform for Mac, Windows, and Linux.
  • Eto.Gtk2.dll - Gtk2 platform using gtk-sharp2 on Mac, Windows, and Linux.
  • Eto.Gtk3.dll - [deprecated] Gtk3 platform for running on Linux with gtk-sharp3 package
  • Eto.iOS.dll - Xamarin.iOS platform
  • Eto.Android.dll - Xamarin.Android platform

Currently supported targets

  • iOS using Xamarin.iOS
  • OS X: MonoMac or Xamarin.Mac
  • Linux: GTK# 2 or 3
  • Windows: Windows Forms (using GDI or Direct2D) or WPF

Under development

These platforms are currently in development. Any eager bodies willing to help feel free to do so!

  • Android using Xamarin.Android (Eto.Android)
  • Windows 8.x and Windows Phone (Eto.WinRT)
You can’t perform that action at this time.