NetWiv

웹 프론트엔드.C# 백엔드.네이티브 데스크톱 앱.

운영체제 WebView 위의 크로스 플랫폼 .NET 8+ 데스크톱 프레임워크. 명령은 C#으로 쓰고, 프론트엔드에서 호출합니다.

하나의 코드로 세 데스크톱

  • Windowsx64 · WebView2
  • Linuxx64 · WebKitGTK
  • macOSarm64 · WKWebView

코딩 에이전트 연결

netwiv mcp는 프로젝트의 CLI로 읽기 전용 MCP 서버를 띄웁니다. 에이전트는 그 NetWiv 버전의 가이드와 프로젝트의 설정, 권한, 명령을 읽습니다.

에이전트에게 맡기기

이 프롬프트를 코딩 에이전트에 붙여 넣으세요. 빠진 것을 설치하고, 서버를 연결하고, Claude Code나 Codex라면 NetWiv 스킬 설치를 제안한 뒤 연결을 확인합니다.

직접 설정하기

사용하는 코딩 에이전트를 고르세요.

  1. NetWiv 마켓플레이스 추가

    /plugin marketplace add NetWiv/skills
  2. 스킬 설치

    /plugin install netwiv@netwiv
  3. 플러그인 다시 불러오기

    /reload-plugins

스킬은 NetWiv 버전과 관계없이 쓸 수 있고, 버전별 가이드는 프로젝트의 CLI가 제공합니다. netwiv new로 만든 프로젝트에는 .mcp.json이 이미 들어 있으니, dotnet tool restore를 한 번 실행하고 Claude Code가 처음 netwiv 서버를 불러올 때 승인하세요.

  1. NetWiv 마켓플레이스 추가

    codex plugin marketplace add NetWiv/skills
  2. 스킬 설치

    codex plugin add netwiv@netwiv
  3. 프로젝트 CLI 복원

    dotnet tool restore
  4. ~/.codex/config.toml에 서버 등록

    [mcp_servers.netwiv]
    command = "dotnet"
    args = ["tool", "run", "netwiv", "--", "mcp"]

Codex는 스킬을 모든 프로젝트에 설치합니다. dotnet tool run이 프로젝트의 CLI를 찾도록 프로젝트 폴더에서 Codex를 시작하세요. 다시 시작하면 스킬과 서버가 함께 불려 옵니다.

  1. 프로젝트 CLI 복원

    dotnet tool restore
  2. 프로젝트에 .cursor/mcp.json 추가

    {
      "mcpServers": {
        "netwiv": {
          "command": "dotnet",
          "args": ["tool", "run", "netwiv", "--", "mcp"]
        }
      }
    }

프로젝트의 .mcp.json과 같은 등록 정보입니다.

  1. 프로젝트 CLI 복원

    dotnet tool restore
  2. stdio 서버 등록

    command:   dotnet
    args:      tool run netwiv -- mcp
    transport: stdio

프로젝트 폴더에서 시작하세요. 프로젝트를 만들기 전에는 전역 설치한 CLI의 netwiv mcp가 가이드를 제공합니다.

초기 개발 단계입니다. 아직 NuGet.org에는 없습니다. 지원 약속 없이 있는 그대로 제공됩니다.

Commands.cs
[Command]public static Greeting Greet(    string name, State<GreetingCounter> counter)    => new($"Hello, {name}!", counter.Value.Next());
App.tsx
import { commands } from './generated/commands.js';const greeting = await commands.greet({ name: 'World' });// { message: 'Hello, World!', count: 1 }
TypeScript 호출 코드는 빌드할 때 생성됩니다.

왜 NetWiv인가

  1. 백엔드는 그대로 .NET입니다.

    NuGet 패키지, 의존성 주입, 설정, 로깅을 ASP.NET Core 앱과 같은 방식으로 씁니다.

    var builder = NetWivApplication.CreateBuilder(args);builder.Services.AddSingleton<GreetingCounter>();builder.Services.Configure<GreetingOptions>(...);
  2. 타입이 C#을 따라갑니다.

    빌드할 때 레코드가 TypeScript 인터페이스가 되고, Blazor 프론트엔드에는 타입이 있는 C# 클라이언트가 생성되어, 이름이 바뀐 필드를 컴파일러가 잡아냅니다.

    public sealed record Greeting(    string Message,    int Count);
    export interface GreetingOutput {  "message": string;  "count": number;
  3. 브라우저 엔진을 넣지 않습니다.

    페이지는 운영체제의 WebView가 그립니다. 패키지에는 Chromium 대신 앱만 들어갑니다.

    패키지에 포함앱 코드.NET 런타임 또는 NativeAOT네이티브 어댑터
    운영체제 제공WebView
  4. 배포 방식을 고릅니다.

    세 가지 게시 방식을 플래그 하나로 바꿉니다.

    • 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까지의 범위입니다.

구성

IPC와 이벤트버전이 있는 C ABI시스템 WebView

.NET

NetWiv.Core, managed 또는 NativeAOT

명령, 상태, 이벤트, 권한, 플러그인. 모든 호출을 여기서 검증합니다.

지금 동작하는 곳

앱 실행패키징서명 배포
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 런타임

앱은 창, 이벤트, 메뉴, 트레이, 플러그인을 모두 @netwiv/api로 다룹니다. 그 아래 네이티브 계층은 wry, tao, muda, tray-icon 라이브러리를 그대로 씁니다. 이 API의 출처와 구현 범위는 여기서 볼 수 있습니다: 호환성

  • wry
  • tao
  • muda
  • tray-icon

작은 프로젝트로 시작하세요.