Introduction

Deskifier is a desktop app platform that wraps web applications into native desktop apps for macOS, Windows, and Linux. You ship a real native binary without writing Electron code yourself.

Every Deskifier app runs your web app inside a native window and gives it direct access to desktop capabilities through a globally-injected bridge: window.deskifier.

What you can build

  • Native windows — custom title bars, traffic-light positions, transparency, full programmatic window control.
  • System integration — tray icons, menu bars, context menus, dock menus, global shortcuts, deep links
  • Filesystem access — read/write with an allowlist-based permission model, watch directories, manage downloads
  • Notifications — native OS notifications, badge counts, taskbar/dock flashing, inline reply on macOS
  • External application control — list and focus other apps' windows, or overlay your window on top of them
  • In-app purchases — Mac App Store IAP via StoreKit
  • Printing — native print dialog and print-to-PDF
  • Dialogs — open/save/message/error boxes
  • WebSocket server — a secure in-app WSS server for bridging to other processes
  • And more!

Using Deskifier

window.deskifier is available in every Deskifier window.

await window.deskifier.windows.create({
  constructorOptions: { url: 'https://mysite.com/settings' },
  windowProperties: { width: 800, height: 600 }
});

Every method in these docs follows this namespaced pattern — window.deskifier.<namespace>.<method>(...).

Add types with the TypeScript SDK

If you're writing TypeScript, install the optional @deskifier/sdk package to get typed method signatures, autocomplete, and inline documentation:

npm install @deskifier/sdk

Import it once anywhere in your project and TypeScript picks up the ambient types on window.deskifier:

import '@deskifier/sdk';

// window.deskifier is now fully typed
const result = await window.deskifier.windows.create({
  constructorOptions: { url: 'https://mysite.com/settings' },
  windowProperties: { width: 800, height: 600 }
});

The SDK is optional. It only adds TypeScript types - the window.deskifier runtime is always available. Any code can call window.deskifier.<namespace>.<method>(...) directly without installing anything.