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.