Skip to content
shortontechPublic

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

7 stars

Watchers

1 watching

Forks

Repository files navigation

Nickel

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.

Nickel Default Shell with the launcher open

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.

Try it

Build Nickel with stable Rust. Run commands from the repository root.

Windows

cargo run -p nickel

This 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.

Linux nested session

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-nested

The 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.

Features

  • 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.

Shells and themes

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.

Architecture

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.

Keyboard and mouse

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

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.

Project status

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.

Further reading

Contributing

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 --workspace

Include behavior tests where practical and record the platforms tested. “It worked on my machine” is useful evidence once you tell us which machine.

License

Copyright 2026 Steven Horton.

Nickel is dual-licensed under the MIT License or the Apache License, Version 2.0, at your option.

Similar projects

Help wanted

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.

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages