One desktop for Windows and Linux, with a shell you can change while you use it. Nickel brings its own desktop, taskbar or dock, launcher, task switching, system controls, controller navigation, and apps.
Powered by JavaScript, best-in-class DX, and cross-platform. The production shell is canonically authored in TSX, compiled by Oxc, and run through direct V8 bindings as capability-constrained components rendered by Nickel—not a browser. JavaScript, JSX, and TypeScript packages work too. On Linux, Nickel can also run as a Wayland compositor.
That's Nickel. It looks like that on Windows. It looks like that on Linux.
Windows without Explorer, including UWP apps. Nickel is the first independent Windows shell to run UWP apps without keeping Explorer alive. It does this through the Universal Windows Usher—UwU for short—which recreates the Windows shell services those applications expect.
Nickel is the desktop, its Settings are part of the active shell, and File is called File because even we have limits.
Build Nickel with stable Rust. Run commands from the repository root.
cargo run -p nickelThis starts Nickel beside your current Windows desktop. When Nickel is installed as the shell and owns the Windows shell window, it starts UwU automatically. If Explorer is still registered, Nickel politely shares the session instead of replacing it. See the UwU research notes for the implementation, diagnostic commands, and the underlying COM research.
Tagged releases include a per-user x86-64 MSI. Its optional Make Nickel the default shell feature is disabled by default; selecting it starts Nickel instead of Explorer at the next sign-in. Removing the feature or uninstalling Nickel restores the normal Windows shell fallback. See the Windows installer notes for packaging and native acceptance details.
Run Nickel inside an existing Linux desktop, like a desktop-shaped ship in a desktop-shaped bottle:
cargo run -p nickel --no-default-features --features backend-winit --bin nickel-nestedThe nested session runs the same JSX-driven shell as a real session. To work on
an isolated package with live reload, use the
nickel-plugin development workflow.
For a direct DRM/udev session or an SDDM login session, see Linux sessions. The direct session is still under development.
- A GPU-rendered desktop with a selectable JSX shell, native icons, previews, application grouping, and task switching.
- An application launcher with fuzzy search, pinned apps, and launch history.
- Two bundled shells: the production default Nickel taskbar and an experimental Cupertino-style floating dock.
- Controller navigation with PlayStation, Xbox, Switch, and generic gamepads. Confirm and cancel follow the controller family, because muscle memory is a user interface contract.
- Shell-owned Settings, Quick Settings, notifications, window menus, Run, the volume OSD, and the on-screen keyboard, backed by native capabilities.
- Nickel File, a Markdown viewer, a terminal, and a Codex chat application.
- A shared shell experience on Windows and Linux, including a Wayland compositor on Linux.
Nickel ships a production default shell and an experimental derived theme:
- Nickel Default Shell supplies the taskbar, launcher, Settings, Quick Settings, notifications, window controls, previews, and companion surfaces.
- Nickel Cupertino Dock (experimental) inherits the default shell and replaces its taskbar with a centered floating dock, while retaining the rest of the default experience. Its animated dock is still being optimized and can feel sluggish today.
Choose the active shell from the Plugins page in Settings. Shells are ordinary,
versioned packages: they can export and replace components, declare their native
surfaces, and request only the capabilities they need. The bundled shells live
in assets/plugins, alongside examples and package tooling.
The visible shell is powered by JavaScript, but it is not Electron or a web view. Oxc lowers JS, JSX, TS, and TSX modules when a package loads or changes; Nickel caches that output and executes it through direct V8 bindings. Retained typed mutations—not complete serialized component trees—cross into native layout and drawing. The native host keeps input, hit testing, effects, protected data, and platform access under its control.
Rust crates own portable application state, search, ranking, navigation, rendering, package validation, and capability enforcement. The selected TSX shell owns presentation and composes those native facilities into the visible desktop. Narrow adapters connect the shared behavior to Windows APIs or to Nickel's Linux compositor.
This division keeps policy deterministic and testable, lets shells change without duplicating platform integrations, and ensures package code cannot bypass native authority checks.
See the Cargo workspace guide for the crate map and responsibilities.
| Input | Action |
|---|---|
Windows |
Open or close the launcher |
Windows + R |
Open Run |
Alt + Tab |
Switch windows |
Alt + ` |
Cycle windows in the current application |
Windows + E |
Open Nickel File on Windows |
Windows + left-drag |
Move a window |
Windows + right-drag |
Resize a window |
The launcher also supports arrow-key navigation, Enter to launch, and
Escape to close the active Nickel surface.
| Controller input | Action |
|---|---|
| D-pad or left stick | Navigate |
| South face button | Confirm |
| East face button or Select | Cancel |
| Start | Open the context menu |
| Left or right shoulder | Switch panes |
| Guide | Open or close the launcher |
Nintendo layouts use the east face button to confirm and the south face button to cancel. Nickel detects the controller family instead of asking a Switch owner to pretend the letters are in Xbox places.
Nickel is under active development, but the JSX shell path and default shell are production—not an experiment or a preview architecture. The derived Cupertino dock uses those same package, composition, rendering, and capability paths, but the theme itself remains experimental while its animation performance is improved.
The desktop, launcher, Settings, task switching, controller navigation, and bundled applications are usable today. Work remains across platform coverage, accessibility, hardware integration, and the direct Linux session.
- Linux sessions — nested, direct, and login-session setup and diagnostics.
- UwU research notes — Windows UWP discovery, experiments, and diagnostics.
- Developer protocol clients and live acceptance harnesses live in
crates/nickel-tools/. Build them withcargo build -p nickel-tools; they do not link the shell library. Buildnickel-nestedseparately when running nested acceptance. The screenshot utility remains in the product package. - Codex backend diagnostics — offline replay and backend tests.
- Plugin and shell packages — package validation, development, composition, and examples.
- Default shell package — the stock JSX shell and its public component contracts.
- Cupertino Dock — the bundled experimental theme and live-preview workflow.
- Active specifications and completed specifications.
See CONTRIBUTING.md for development setup, architecture boundaries, testing expectations, and pull request guidance. For usage help and bug-reporting guidance, see SUPPORT.md. Please report suspected vulnerabilities privately as described in SECURITY.md.
Before submitting a change, run the usual three Cargo checks:
cargo fmt --all --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspaceInclude behavior tests where practical and record the platforms tested. “It worked on my machine” is useful evidence once you tell us which machine.
Copyright 2026 Steven Horton.
Nickel is dual-licensed under the MIT License or the Apache License, Version 2.0, at your option.
- Cairo Shell - the most popular alternative shell
- GyroShell
Nickel is a large project built mostly by one person, and I could genuinely use help.
You do not need to understand the whole desktop to contribute.
If you're a systems or operations engineer, you'll probably feel more at home here than you expect. Nickel has services, lifecycle management, capabilities, resources, platform adapters, health and failure states, packaging, hardware integration, and plenty of problems that look suspiciously like the problems you already debug in Kubernetes, Linux, or production infrastructure.
If you're good at frontend work, I especially want you. Nickel's shell is written in JSX specifically so people can build things without becoming Windows-shell or Wayland experts. We need more themes, more shell layouts, more components, more animation, and generally more strange ideas. I want Nickel desktops to be able to look unique, opinionated, and occasionally ridiculous.
There is also plenty of work for people interested in:
- Windows internals, COM, UWP, and native shell integration
- Wayland, Linux sessions, input, DRM/udev, and hardware support
- accessibility and keyboard/controller navigation
- multi-monitor, DPI, suspend/resume, and hardware compatibility
- testing, diagnostics, crash reproduction, and generally breaking things
- documentation, examples, screenshots, and developer onboarding
- plugins and small applications that make the desktop more useful or more weird
You don't need to be a Rust expert. You don't need to be a frontend expert. You don't need to understand every crate in the workspace.
If an issue is marked help wanted, I actually want someone else to take it.
If an issue is marked good first issue, it should be reasonably self-contained and should not require understanding Nickel's whole architecture.
And if you have an idea that doesn't fit the current desktop at all, that may be even better. Nickel is supposed to be hackable.