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

{% tabs %}
{% tab title="JavaScript" %}
{% code overflow="wrap" %}

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

{% endcode %}
{% endtab %}
{% endtabs %}

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:

{% code overflow="wrap" %}

```bash
npm install @deskifier/sdk
```

{% endcode %}

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

{% tabs %}
{% tab title="TypeScript" %}
{% code overflow="wrap" %}

```typescript
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 }
});
```

{% endcode %}
{% endtab %}
{% endtabs %}

{% hint style="info" %}
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.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://deskifier.gitbook.io/deskifier/readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
