Miko Framework – .NET 跨平台 UI 框架
开源免费 · 跨平台

用 WinForms 的设计方式
构建跨平台应用程序

Miko 是一个开源的 C# 跨平台 UI 框架,使用你熟悉的原生 WinForms 设计器来构建跨平台应用程序。 从单个共享代码库,一次开发即可部署到 Android、iOS、Linux(国内信创平台适用)、macOS、WebAssembly 和 Windows。

向下滚动

一次编写,处处运行

Miko 基于 SDL3 跨平台窗体系统和 Skia 渲染引擎,将你的 .NET 应用带到所有主流平台。

稳定支持

Windows

10+

稳定支持

Linux

glibc >= 2.28

稳定支持

macOS

10.15+

实验性支持

Android

API >= 24

实验性支持

iOS

12+

实验性支持

WebAssembly

实验性

3
稳定平台
6
支持平台
98%
代码复用率
LGPL-2.1
开源许可证

为什么选择 Miko?

从设计器到部署,Miko 提供全链路的跨平台开发体验,而这一切都基于开源免费的理念。

🎨

WinForms 设计器 100% 兼容

与 WinForms 设计器完全兼容,保证原生级设计器体验。在 Visual Studio 中拖拽式设计界面,所见即所得。

Skia 像素级渲染引擎

使用 Skia 作为界面渲染器,精准控制界面上每一个像素点的绘制,创建精美且完全自定义的 UI 组件。

接入 Impeller 渲染引擎

Miko 正在接入 Impeller 渲染引擎。相比 Skia,Impeller 通过预编译着色器消除首次绘制卡顿(SkSL → SPIR-V),并利用 Metal/Vulkan 后端实现更低的 CPU 开销和更稳定的帧率,动画和滚动场景流畅度大幅提升。

🏹

SDL3 跨平台窗体

基于 SDL3 跨平台多媒体库,深度支持 Windows、macOS、Linux、iOS、Android 等主流操作系统与平台。

GPU 多后端硬件加速

支持 OpenGL、Vulkan、Direct3D 12 等多种 GPU 后端,为不同平台带来真正的硬件加速渲染体验。

📦

所有标准 WinForms 控件

提供 WinForms 的所有标准控件:Button、Label、TextBox、DataGridView、ListView 等,开箱即用。

🚀

百万数据滑动不卡顿

列表类控件针对大数据量深度优化,百万级数据滑动操作依然流畅无比,满足企业级应用需求。

🌐

原生浏览器控件

提供基于平台的原生浏览器控件,在你的桌面应用中无缝嵌入 Web 内容,实现混合应用开发。

🔧

自定义控件开发

支持使用 Miko 框架开发完全自定义的控件,利用 Skia 渲染器绘制独一无二的 UI 组件。

🔄

兼容 WinForms GDI 绘制

兼容 WinForms 的 GDI 绘制方法,你的自定义 OnPaint 控件几乎无需修改即可迁移至 Miko 运行,轻松复用现有 WinForms 控件资产。

SVG 渲染支持

原生支持 SVG 矢量图形渲染,让你的应用界面在任何分辨率下都保持清晰锐利。

🎨

现代 UI 样式能力

原生支持自定义圆角(CornerRadius)、投影(DropShadow)、渐变(Gradient)、透明度(Opacity)等现代界面样式,轻松构建现代化 UI。

🔌

支持 Native AOT 编译

完全支持 .NET Native AOT 编译,应用启动更快、内存占用更低,可编译为单一原生可执行文件。

开源免费

Miko 框架完全开源免费,基于 LGPL-2.1 许可证。欢迎社区贡献,共同打造最好的 .NET 跨平台 UI 框架。

硬件加速,全平台覆盖

Miko 支持多种 GPU 后端,为你的应用在不同平台带来真正的硬件加速体验。

平台 OpenGL Vulkan Direct3D 12 Metal
Windows ✓ 默认 ✓ 支持 ✓ 支持
Linux ✓ 默认 ✓ 支持
macOS ✓ 默认 ○ 后续支持
Android ✓ 默认 ○ 后续支持
iOS ✓ 支持
WebAssembly ✓ 支持

简洁如 WinForms,强大如原生

保留 WinForms 的开发体验,输出跨平台的原生应用。

using Miko;

namespace MyApp;

internal static class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        MikoApp.Create()
            .UseDesktopPlatform()
            .UseMainWindow<Form1>()
            .Build();

        /* Here we go! */
        MikoApp.Run();
    }
}
using Miko;
using Miko.Events;
using Miko.Dialogs;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;

namespace MyApp;

public partial class Form1 : Window
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, MouseEventArgs e)
    {
        MessageBox.Show("Hello");
    }
}
namespace MyApp;
          
partial class Form1
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        label1 = new Miko.Controls.Label();
        button1 = new Miko.Controls.Button();
        SuspendLayout();
        // 
        // label1
        // 
        label1.FontName = "Arial";
        label1.Location = new Point(243, 105);
        label1.Name = "label1";
        label1.Size = new Size(258, 49);
        label1.TabIndex = 0;
        label1.Text = "Hello World";
        label1.TextAlign = ContentAlignment.MiddleCenter;
        // 
        // button1
        // 
        button1.FontName = "Arial";
        button1.Location = new Point(243, 229);
        button1.Name = "button1";
        button1.Size = new Size(258, 91);
        button1.TabIndex = 1;
        button1.Text = "Hello";
        button1.Click += button1_Click;
        // 
        // Form1
        // 
        BackColor = SystemColors.Control;
        ClientSize = new Size(784, 561);
        Controls.Add(button1);
        Controls.Add(label1);
        Location = new Point(0, 0);
        Name = "Form1";
        Text = "Form1";
        ResumeLayout(false);
    }

    #endregion

    private Miko.Controls.Label label1;
    private Miko.Controls.Button button1;
}

清晰的层次,强大的能力

Miko 采用五层架构,每一层各司其职,共同构建跨平台能力。

🎨 API 层 WinForms 设计器 API · 控件库 · GDI 兼容
渲染层 Skia 渲染引擎 · 像素级控制 · 正在接入 Impeller
GPU 后端 OpenGL · Vulkan · Direct3D 12 · Metal
🏹 窗体系统 SDL3 跨平台窗体 · 输入抽象 · 窗口管理
📱 平台层 Win32 · Linux · Cocoa · Android · iOS · Wasm

开始你的跨平台之旅

Miko 框架完全开源免费,加入越来越多的 .NET 开发者,使用熟悉的 WinForms 设计器打造真正的跨平台应用。