NativeAOT와 트리밍 우선
리플렉션 없는 명시적인 코드라 NativeAOT로 빌드해 .NET 런타임 없이 실행되는 실행 파일 하나로 배포합니다.

C#으로 만드는 데스크톱 앱, 작은 네이티브 파일 하나로.코드로 UI를 만드는 크로스 플랫폼 .NET GUI 프레임워크입니다. 앱은 몇 MB짜리 네이티브 실행 파일 하나로 나오고, .NET 런타임 없이 실행됩니다. XAML 없이 C#만으로 작성하며, 디자이너 도구도 필요 없습니다.
MIT 라이선스. .NET 8.0 / 10.0. 최신 릴리스 0.21.1.

LightDark브라우저에서 바로 열어보거나, 명령 한 줄로 실행하거나, 프로젝트에 패키지를 넣습니다. 준비물이 적은 순서입니다.
아무것도 설치하지 않아도 됩니다. Gallery 샘플을 WebAssembly로 컴파일해 브라우저에서 그대로 실행합니다.
.NET 10 SDK만 있으면 됩니다. 저장소를 클론하거나 프로젝트를 만들 필요 없이, GitHub에서 소스 파일 하나를 받아 바로 실행합니다.
curl -sL https://raw.githubusercontent.com/aprillz/MewUI/refs/heads/main/samples/FBASample/fba_gallery.cs -o - | dotnet run -메타패키지 하나로 코어와 플랫폼 호스트, 렌더링 백엔드가 모두 들어옵니다.
dotnet add package Aprillz.MewUI목표는 하나입니다. 작고, 런타임 설치 없이 실행되며, 빠르게 뜨는 데스크톱 앱입니다.
리플렉션 없는 명시적인 코드라 NativeAOT로 빌드해 .NET 런타임 없이 실행되는 실행 파일 하나로 배포합니다.
AOT 빌드의 결과물은 Hello World 창 3.17 MB, 전체 컨트롤 갤러리 7.84 MB입니다.
C#의 Fluent API만으로 UI 트리를 구성합니다. 코드 작성 편의를 위한 분석기와 포매터가 제공되고, 창 프리뷰는 주요 IDE에서 동작합니다.
Windows, Linux(X11), macOS 데스크톱에 더해, 같은 UI를 WebAssembly로 빌드해 브라우저에서도 실행합니다.
NativeAOT로 퍼블리시한 주 실행 파일의 크기입니다. 아래 두 수치는 Windows x64 / GDI 기준입니다.
Hello World
Gallery (전체 컨트롤 쇼케이스)
| 플랫폼 / 백엔드 | Hello World | Gallery |
|---|---|---|
| Windows x64 / GDI | 3.17 MB | 7.84 MB |
| Windows x64 / Direct2D | 3.33 MB | 7.99 MB |
| Windows x64 / MewVG | 3.57 MB | 8.24 MB |
| macOS arm64 / MewVG | 3.17 MB | 7.35 MB |
| Linux x64 / X11 + MewVG | 4.52 MB | 9.24 MB |
컨트롤을 Fluent API로 이어 붙입니다. 창 뒤에 숨은 마크업 파일이나 생성된 partial 클래스가 없어서, 보이는 코드가 실행되는 코드 전부입니다.
var window = new Window()
.Title("Hello MewUI")
.Resizable(520, 360)
.Padding(12)
.Content(
new StackPanel()
.Spacing(8)
.Children(
new Label()
.Text("Hello, Aprillz.MewUI")
.FontSize(18)
.Bold(),
new Button()
.Content("Exit")
.OnClick(Application.Shutdown)));
Application.Run(window);바인딩 소스로 Observable 값, INotifyPropertyChanged 뷰 모델, 다른 요소의 속성을 쓸 수 있고, 중첩 경로도 지원합니다. 경로는 컴파일 시점에 해석되므로 트리밍과 AOT에서도 그대로 동작합니다.
var percent = new ObservableValue<double>(
initialValue: 0.25,
coerce: value => Math.Clamp(value, 0, 1));
var slider = new Slider()
.BindValue(percent);
var label = new Label()
.BindText(percent, value => $"Percent ({value:P0})");
// Nested path. Rewired when Customer is replaced.
var city = new TextBlock()
.Bind(TextBlock.TextProperty, order, x => x.Customer.City);코드로 만든다고 화면을 못 보는 것은 아닙니다. 에디터 안에서 창을 미리 보고, 실행 중인 앱에 수정이 바로 반영됩니다.
앱을 띄우지 않고 Window나 UserControl을 에디터 패널에 렌더링합니다. Visual Studio, VS Code, Rider를 지원하며, 처음 한 번만 빌드하고 이후에는 저장할 때마다 다시 그립니다.
dotnet watch로 실행하면 수정한 내용이 실행 중인 앱에 반영됩니다. 빌드 코드가 실제로 바뀐 노드만 다시 만들고, 따로 설정할 것은 없습니다.
실행 중인 앱의 비주얼 트리와 요소 속성을 창에서 그대로 들여다봅니다. 프레임 통계 오버레이와 프로파일러 타임라인도 함께 제공합니다.
Fluent 마크업용 Roslyn 분석기와 리팩터링입니다. 객체 초기화자를 체인으로 바꾸거나, 체인을 펼치고 접거나, 여러 문장을 체인 하나로 합칩니다.
Claude Code, Codex, GitHub Copilot용 에이전트 스킬을 제공합니다. 에이전트가 추측으로 채우던 부분을 미리 알려주어, 생성된 코드가 실제로 컴파일되게 합니다.
대상 플랫폼별로 어떤 메타패키지를 참조해야 하는지, 동작하는 프로젝트 파일은 어떤 모양인지.
Fluent API 전체 목록. 없는 메서드를 지어내지 않고 컴파일되는 코드를 만듭니다.
플랫폼별로 빌드하고 퍼블리시한 뒤 결과를 확인하는 방법.
버튼, 텍스트 입력, 리스트, 트리, 그리드, 탭, 메뉴, 툴바, 피커, 내비게이션, 그리고 이들을 배치하는 패널까지 갖추고 있습니다. Gallery 샘플에서 전부 볼 수 있고, 설치 없이 브라우저에서 실행됩니다.
| 버튼 | ButtonToggleButtonRepeatButtonSplitButtonDropDownButton |
|---|---|
| 텍스트 | LabelTextBlockTextBoxMultiLineTextBoxPasswordBoxSyntaxViewer |
| 선택 | CheckBoxRadioButtonToggleSwitchComboBoxListBox |
| 데이터 | TreeViewGridView |
| 값 | SliderProgressBarProgressRingNumericUpDownColorPickerDatePickerCalendar |
| 컨테이너 | TabControlGroupBoxExpanderBorderScrollViewerNavigationView |
| 메뉴와 바 | MenuBarContextMenuToolTipToolBar |
| 미디어 | Image |
| 앱 | WindowDispatcherTimer |
| 패널 | GridStackPanelDockPanelUniformGridWrapPanelCanvasSplitPanel |
코어는 가볍게 유지하고, 큰 기능은 필요할 때만 참조하는 별도 패키지로 제공합니다.
Visual Studio 스타일 도킹. 문서·도구 탭, 드래그로 재배치, 분할, 자동 숨김, 팝아웃.
순수 C#으로 구현한 SVG 파싱·렌더링. System.Drawing 없이 동작하며 AOT와 호환됩니다.
SkiaSharp으로 그리는 SkiaCanvasView. 렌더링 백엔드와 GPU 텍스처를 직접 주고받아 빠르게 동작합니다.
LiveChartsCore 엔진 기반의 직교·파이·폴라 차트. SkiaSharp에 의존하지 않습니다.
Win32 WebView2 컨트롤. Microsoft Edge WebView2 런타임이 필요합니다.
창 관리는 플랫폼 호스트가, 그리기는 렌더링 백엔드가 맡습니다. 퍼블리시할 때 백엔드 하나만 고르면 나머지는 트리밍됩니다.
| 플랫폼 | 호스트 | 백엔드 |
|---|---|---|
| Windows 10+ | Win32 | Direct2D, GDI, MewVG |
| Linux | X11 | MewVG (OpenGL) |
| macOS 12+ | AppKit | MewVG (Metal) |
| Browser | WebAssembly | MewVG (WebGL2) |
현재 버전은 0.21.1이고 활발히 개발 중입니다. 공개 API가 아직 안정화 단계라 마이너 릴리스 사이에도 호환이 깨지는 변경이 있을 수 있습니다. 패키지 버전을 고정하고, 업그레이드 전에 릴리스 노트를 확인하세요.
릴리스 노트영어와 한국어로 제공됩니다.