웹 프론트엔드.C# 백엔드.네이티브 데스크톱 앱.
운영체제 WebView 위의 크로스 플랫폼 .NET 8+ 데스크톱 프레임워크. 명령은 C#으로 쓰고, 프론트엔드에서 호출합니다.
하나의 코드로 세 데스크톱
- Windowsx64 · WebView2
- Linuxx64 · WebKitGTK
- macOSarm64 · WKWebView
초기 개발 단계입니다. 아직 NuGet.org에는 없습니다. 지원 약속 없이 있는 그대로 제공됩니다.
[Command]public static Greeting Greet( string name, State<GreetingCounter> counter) => new($"Hello, {name}!", counter.Value.Next());import { commands } from './generated/commands.js';const greeting = await commands.greet({ name: 'World' });// { message: 'Hello, World!', count: 1 }왜 NetWiv인가
백엔드는 그대로 .NET입니다.
NuGet 패키지, 의존성 주입, 설정, 로깅을 ASP.NET Core 앱과 같은 방식으로 씁니다.
var builder = NetWivApplication.CreateBuilder(args);builder.Services.AddSingleton<GreetingCounter>();builder.Services.Configure<GreetingOptions>(...);타입이 C#을 따라갑니다.
빌드할 때 레코드가 TypeScript 인터페이스가 되고, Blazor 프론트엔드에는 타입이 있는 C# 클라이언트가 생성되어, 이름이 바뀐 필드를 컴파일러가 잡아냅니다.
public sealed record Greeting( string Message, int Count);export interface GreetingOutput { "message": string; "count": number;브라우저 엔진을 넣지 않습니다.
페이지는 운영체제의 WebView가 그립니다. 패키지에는 Chromium 대신 앱만 들어갑니다.
패키지에 포함앱 코드.NET 런타임 또는 NativeAOT운영체제 제공WebView배포 방식을 고릅니다.
세 가지 게시 방식을 플래그 하나로 바꿉니다.
- NativeAOT네이티브 실행 파일 하나 · 의존성은 AOT 지원 필요12.4–14.8 MiB
- Self-contained기본값 · .NET 포함76.0–81.8 MiB
- 설치된 런타임가장 작은 다운로드 · .NET 설치 필요7.7–8.4 MiB
React 스타터 릴리스 빌드, 설치 패키지 제외. 막대는 Windows x64에서 macOS arm64까지의 범위입니다.
구성
프론트엔드
React, Vue, Svelte, Angular, Blazor(WebAssembly 또는 Hybrid) 중 하나
사용자 UI. 생성된 바인딩과 데스크톱 SDK인 @netwiv/api로 C#을 호출합니다.
.NET
NetWiv.Core, managed 또는 NativeAOT
명령, 상태, 이벤트, 권한, 플러그인. 모든 호출을 여기서 검증합니다.
네이티브
wry, tao, muda, tray-icon
이벤트 루프, 창, WebView, 메뉴, 트레이.
운영체제
WebView2, WebKitGTK, WKWebView
페이지를 그립니다. 앱에 브라우저 엔진을 넣지 않습니다.
지금 동작하는 곳
| 앱 실행 | 패키징 | 서명 배포 | |
|---|---|---|---|
| Windows x64WebView2 | |||
| Linux x64WebKitGTK 4.1 | |||
| macOS arm64WKWebView |
- 확인함
- 일부 확인
- 아직
- 해당 없음
Windows x64 · 앱 실행 확인함
패키지만으로 만든 NativeAOT React 앱이 실행됩니다.
범위를 좁힌 검사이며, 전체 적합성 검사는 아닙니다. Intel Mac은 더 이상 지원 대상이 아닙니다. 자세히
하나의 데스크톱 SDK
- @netwiv/api코어 모듈창, WebView, 이벤트, 메뉴, 트레이, 경로 등. 생성된 바인딩이 씁니다. 모바일 API는 뺐습니다.
- @netwiv/api/plugins/*플러그인 모듈데스크톱 플러그인 21개. 플러그인마다 .NET 플러그인 패키지와 권한 설정이 필요합니다.
앱은 창, 이벤트, 메뉴, 트레이, 플러그인을 모두 @netwiv/api로 다룹니다. 그 아래 네이티브 계층은 wry, tao, muda, tray-icon 라이브러리를 그대로 씁니다. 이 API의 출처와 구현 범위는 여기서 볼 수 있습니다: 호환성
- wry
- tao
- muda
- tray-icon