native-feel.skill

An agent reference for cross-platform desktop apps that feel native: eight tenets, four layers, a WebView survival guide and a 75-item ship audit

  • 1,933 ★ on the repository
  • Last commit
  • MIT
Skill

Minimal access

Why this level

  • A reference skill: text and checklists only, it runs nothing and makes no network calls
All reasons and checks

yetone/native-feel-skill

Install

In your terminal, with SkillFoxx CLI

npx skillfoxx add skills/native-feel-skill

Detects the agents on your machine, shows the access level and pins the version.

Other ways to install

Access and checks

How we review

Minimal accessThe tool runs nothing and makes no network calls.

  • A reference skill: text and checklists only, it runs nothing and makes no network calls

This is third-party code. Review the repository files before installing.

What it does

native-feel.skill teaches an agent to advise on desktop apps for macOS and Windows that behave like native ones yet share one UI codebase. It builds on Raycast's technical write-up of version 2.0 and on a reverse-engineering pass over the shipping Raycast Beta.app. The author condenses the findings into eight tenets, such as "place the seam at the rendering surface" and "one schema, many languages". The skill describes four layers: a native shell in Swift/AppKit and C#/WPF, the system WebView (WKWebView and WebView2) running a shared React and TypeScript UI, one long-lived Node process, and a Rust core with typed UniFFI bindings. Seven reference files cover the philosophy, the layers, workarounds for WebKit and WebView2 quirks, typed IPC across languages, memory measurement, over 70 native conventions and the evidence from Raycast Beta. The agent loads only the file that matches the question. Before recommending an architecture it runs a decision tree that rules out unsuitable projects. Before calling an app native-feeling it runs the 75-item readiness audit.

Who it is for. For architects, tech leads and engineers building a macOS and Windows app on one UI codebase, such as a launcher or an AI workspace.

Good fit when

  • An Electron or Tauri app looks like a web page and you need a starting point: the agent walks the readiness audit and shows typical failures such as `cursor: pointer` on rows
  • A new desktop app has to run on macOS and Windows with a shared UI, and you need a layer layout before the first line of code
  • WKWebView flickers when the window is hidden and shown again, and the skill leads to the WebView survival file
  • You must decide how to type communication between Rust, Swift, C# and TypeScript without duplicating types by hand
  • Activity Monitor shows 450 MB and you need to know what part of it is real load

Not a fit when

  • The project is a pure web or mobile app: the skill explicitly excludes those cases
  • The app has no native-feel requirement and plain Electron is enough; the decision tree can end exactly there
  • You need a cold start under 100 ms or memory below 150 MB: per the decision tree such projects should be fully native
  • You want ready code templates: the skill holds reference material and checklists and has no project generator

Example request

My Electron app on macOS looks like a website and the designer is unhappy. Run the native-feel audit and tell me which fixes help most

Limitations

The skill contains text references and checklists; it runs nothing and writes no code on its own. Its advice rests on a single example, Raycast's architecture, so for other products it has to be fitted to your conditions. Conclusions about Raycast Beta come from reverse-engineering version 0.60.0 for macOS 26 and newer on arm64 and may differ in other builds.

The architecture assumes a team ready to maintain two native layers, Swift/AppKit and C#/WPF, plus a shared UI and a Rust core. For a small project on a short deadline the skill itself advises starting with Electron. SKILL.md calls the readiness checklist a 30-item audit while the README and the repository description say 75 items; rely on the `checklists/ship-readiness.md` file. What counts as a native feel is something you settle with your designer, because the skill offers no objective metric.

How to disable. Delete the `native-feel-cross-platform-desktop` folder from the agent's skills directory, for example `~/.claude/skills/`, or remove the skill with the `skills` manager. The install leaves no other traces.

FAQ

How do I install native-feel.skill in Claude Code?

Run `npx skills add yetone/native-feel-skill -g`; the `-g` flag installs it at user level. The other route is to paste the repository's request to your agent: clone the project into the skills directory as `native-feel-cross-platform-desktop` and check that references and checklists sit next to SKILL.md.

When does the skill activate on its own?

When the conversation touches cross-platform desktop apps, Electron or Tauri as alternatives, WKWebView and WebView2 quirks, tray apps, launchers and Raycast-style architecture. It is not meant for pure web or mobile projects.

How is the advice different from a plain "use Electron"?

The skill recommends a native shell hosting the system WebView. The reason: Electron hides the window class, WebView and platform materials that a native feel depends on. It also admits that Electron fits small projects on a short deadline.

What is the readiness audit and what does it check?

It is a 75-item checklist in `checklists/ship-readiness.md`. The author names typical failures: `cursor: pointer` on rows, web-style modals instead of native sheets, a hardcoded brand accent instead of the system accent, page fade transitions, an opaque window background and a WebKit context menu that still fires.

Where does the Raycast data in the skill come from?

From Raycast's public technical write-up of version 2.0 and from reverse-engineering Raycast Beta.app version 0.60.0. What was found and how is described in `references/07-evidence-raycast.md`.

Discussion

No questions or reviews yet.

Skills
Official

Skills for the experimental Native SDK: the agent reads version-matched guidance from the installed CLI for building desktop apps in TypeScript

SkillExtended access7.8KRepository stars

A set of 16 engineering skills for agents: Apple platform work, macOS packaging, React performance, code review and refactoring

SkillExtended access4KRepository stars

Builder Skills

Skills for agents

A set of small skills from Builder.io for agent work habits: visual plans and diff recaps, docs-first checks, cross-agent review and clean status updates

SkillExtended access4.6KRepository stars

A vetted skill registry with a CLI that installs into twenty-plus agents and an MCP server for on-demand skill lookup

SkillExtended access7.1KRepository stars
Editors’ pick

A skill set from the Kotlin team for agents: Java to Kotlin conversion, build migrations and correct use of backend frameworks

PluginExtended access1.1KRepository stars

The author's personal set: shared agent rules and dozens of skills for GitHub, the browser, macOS, messaging and releases, plus a sync script

SkillBroad access7.4KRepository stars

README in short

The description starts with two install options and two scenarios: reworking an app that looks like a web page, and a new project where native feel is the point. It then lists the eight tenets, the folder layout and the sources. The author stresses that the architecture is Raycast's, while the philosophy and the reverse-engineering conclusions are their own synthesis.

README badge

Original SKILL.md

---
name: native-feel-cross-platform-desktop
description: Use when the user is designing, prototyping, or rewriting a desktop app that must run on multiple OSes (macOS + Windows, optionally Linux) AND feel indistinguishable from a native app to its users — fast launch, native windowing, native input handling, native materials. Trigger words include "cross-platform desktop", "Electron alternative", "Tauri vs native", "WebView wrapper", "near-native performance", "Raycast architecture", "WebKit/WebView2 quirks", "WKWebView", "system tray app", "global hotkey app", "launcher app". Do NOT trigger this skill for pure web apps, pure mobile apps, or for greenfield projects that have no native-feel requirement.
---

# Native-Feel Cross-Platform Desktop

You are advising on the architecture of a cross-platform desktop app that must *feel native*. This skill captures the philosophy, architecture, and concrete pitfalls — distilled from Raycast's public technical deep-dive on their 2.0 rewrite and verified by reverse-engineering the shipping `Raycast Beta.app` binary on macOS.

## How to use this skill

1. **Start with the philosophy in `references/01-philosophy.md`.** It frames the central tension this architecture resolves — *how to get cross-platform DX and near-native performance at the same time* — and gives you eight tenets that name the structural moves. Every concrete decision later flows from one of those tenets. If the user is making a decision that contradicts a tenet, surface the tenet by number and short name and explain the trade-off.
2. **Match the user's question to a reference file.** Don't dump the whole skill — load only what's needed:
   - Architecture / "which layers should I have?" → `references/02-architecture.md`
   - "Why does my WebView flicker / stutter / freeze when hidden?" → `references/03-webview-survival.md` (the highest-density file — every item is a real bug with a real fix)
   - "How do I type my IPC across Rust/Swift/C#/TS?" → `references/04-ipc-contract.md`
   - "Why does Activity Monitor say 400 MB?" → `references/05-memory-truths.md`
   - "How do I make it not feel like a webpage?" → `references/06-native-conventions.md`
   - "What does Raycast actually ship?" (concrete evidence) → `references/07-evidence-raycast.md`
3. **Before recommending an architecture, run the decision tree in `checklists/decision-tree.md`.** It rules this stack OUT for several common project shapes — say so directly.
4. **Before the user claims their app "feels native", run `checklists/ship-readiness.md`.** It's a 30-item audit; most apps fail 5–10 items on first pass.

## The one-paragraph version

A native-feel cross-platform desktop app is **not a web app with native hooks** and **not Electron with a custom theme**. It is a **native shell** (Swift/AppKit on macOS, C#/WPF on Windows) that owns the window, the hotkeys, the menu bar, the materials, and the lifecycle — and embeds the system WebView (WKWebView or WebView2) purely as a *rendering surface* for a shared React/TypeScript UI. Business logic lives in a long-lived Node process bundled with the app. Performance-critical subsystems (file indexing, calculation, crypto) live in Rust, shared across platforms and exposed through UniFFI-generated typed bindings. Four runtimes communicate through a single declared interface that generates typed clients for each side. The whole thing fits in ~400 MB resident memory, of which ~150 MB is the inescapable WebView+Node baseline. You pay that baseline so that one React codebase serves both OSes; you earn it back through hot-reload iteration speed and a shared extension API that already runs thousands of community plugins on both platforms.

## Core anti-patterns to call out immediately

When you see the user doing any of these, stop and ask:

- **"Let's just use Electron and theme it"** → Electron abstracts away the system WebView, window class, and material APIs you need for native feel. You cannot get Liquid Glass / acrylic / true vibrancy through Electron's abstraction without forking it. Recommend `references/02-architecture.md` instead.
- **"Let's use Tauri — it's like Electron but lighter"** → Tauri ships its own WebView wrapper and abstracts platform APIs. Same control-loss problem as Electron, plus less mature. Acceptable for utilities; not for apps where every window animation has to match the OS.
- **"Let's render UI in Swift/C# and share business logic"** → You will maintain two UI codebases forever. Every feature ships twice. Designers maintain two specs. Recommend WebView-as-renderer instead.
- **"WebKit is throttling us; let's spin our own polling loop"** → No. The throttling is solvable with two specific `WKWebView` configuration flags. See `references/03-webview-survival.md` § "Hidden window throttling".
- **"Memory is bad — we're at 400 MB"** → Probably wrong measurement. Activity Monitor double-counts shared frameworks and treats compressed pages as resident. See `references/05-memory-truths.md` before optimizing anything.
- **"Let's hand-write the IPC types in each language"** → They will drift within a sprint. Use UniFFI (for Rust ↔ Swift/Kotlin/C#) or hand-roll a single IDL that generates clients. See `references/04-ipc-contract.md`.
- **"Adding `cursor: pointer` to make it feel responsive"** → That's exactly what makes it feel *web*. Native UIs do not change the cursor on hoverable rows. See `references/06-native-conventions.md`.

## Output style

When advising:
- Quote the specific tenet from `references/01-philosophy.md` that applies (e.g., *"T3 — adopt the platform; don't compete with it: the OS draws blur better than you can"*).
- Cite the file and section, not the whole skill.
- For each recommendation, name what the user is **giving up** in exchange. There are no free wins in this architecture — the whole skill is about deliberate trade-offs.
- If you're unsure whether the user's project should even use this architecture, run them through `checklists/decision-tree.md` before giving advice. It is okay to conclude "this skill doesn't apply — build a normal Electron app."

Report a problem

Foxx AInative-feel.skill
Foxx AI

I am Foxx AI and I have already vetted this tool. Ask about install, setup or anything else, and I will keep it simple.