# tinyjs > tinyjs makes ~6 MB desktop apps for macOS, Windows and Linux in JavaScript: a txiki.js backend (files, sockets, processes, FFI — not Node) and a native webview window (WKWebView, WebView2, WebKitGTK). The page reaches the system only through `window.tiny`; the backend has the same calls on its `app` handle. Key facts: - A project is `tinyjs.json` + `src/frontend/` (the page) + `src/backend/main.js` (`export const api = { … }`, called from the page with `tiny.api.call(name, args)`). - The backend runs txiki.js: use `tjs.*` for files and processes; Node built-ins (`fs`, `path`, `child_process`) don't exist. - `tinyjs new ` scaffolds, `tinyjs dev` runs with reload, `tinyjs build` makes the app, `tinyjs doctor` diagnoses. - Where an OS can't do something, the call rejects or answers `'unsupported'`; the docs say which per call. - Every project ships `types/tiny.d.ts` and `types/tjs.d.ts` — the authoritative signatures — and an agent skill in `.claude/skills/tinyjs/` and `.agents/skills/tinyjs/` (source: https://github.com/tarwin/tinyjsapp/tree/main/skill). ## start - [introduction](https://tinyjs.app/docs/index.md): Everything a tinyjs app can do. - [install](https://tinyjs.app/docs/install.md): one line, no dependencies - [your first app](https://tinyjs.app/docs/first-app.md): a notebook that remembers, in four files - [cli](https://tinyjs.app/docs/cli.md): every command, every flag - [doctor](https://tinyjs.app/docs/doctor.md): `tinyjs doctor` looks for the usual reasons tinyjs or an app won't run, and says how to fix each one. - [tinyjs.json](https://tinyjs.app/docs/config.md): every key is optional except name - [editor schema](https://tinyjs.app/docs/config-schema.md): The JSON Schema describes the configuration fields used by the CLI and runtime. - [shared code](https://tinyjs.app/docs/shared-code.md): code both sides import - [resources](https://tinyjs.app/docs/resources.md): data your code reads - [executables](https://tinyjs.app/docs/executables.md): programs your backend runs (sidecars) - [assets](https://tinyjs.app/docs/assets.md): files the OS reads - [extras](https://tinyjs.app/docs/extras.md): README, licence — beside the download ## backend - [general](https://tinyjs.app/docs/backend.md): src/backend/main.js — full system access via txiki.js - [txiki.js](https://tinyjs.app/docs/txiki.md): the runtime your backend runs on - [sqlite](https://tinyjs.app/docs/sqlite.md): SQLite, built in — backend only - [cookies](https://tinyjs.app/docs/cookies.md): app.cookies — the webview's cookie jar, backend only ## tiny api - [calling the backend](https://tinyjs.app/docs/api.md): tiny.api — request/response and events - [fetch](https://tinyjs.app/docs/fetch.md): tiny.fetch and tiny.proxyURL — networking without CORS - [window](https://tinyjs.app/docs/window.md): tiny.win — window control - [multiple windows](https://tinyjs.app/docs/multiple-windows.md): tiny.win.open — settings panels, palettes, document windows - [window fx](https://tinyjs.app/docs/window-fx.md): tiny.win — overlays, HUDs, desktop pets - [dialogs](https://tinyjs.app/docs/dialogs.md): tiny.dialog — native file pickers and message boxes - [notifications](https://tinyjs.app/docs/notifications.md): tiny.notify — banners, clicks, buttons and replies - [menus](https://tinyjs.app/docs/menus.md): tiny.menu — the menu bar and right-click menus - [tray](https://tinyjs.app/docs/tray.md): tiny.tray — an icon in the menu bar or notification area - [hotkeys](https://tinyjs.app/docs/hotkeys.md): tiny.hotkey — system-wide keyboard shortcuts - [keystrokes](https://tinyjs.app/docs/keystrokes.md): tiny.app.keystroke — send key presses to other apps - [clipboard](https://tinyjs.app/docs/clipboard.md): tiny.clipboard — read, write and watch the system clipboard - [store](https://tinyjs.app/docs/store.md): tiny.store — persistent settings - [secrets & auth](https://tinyjs.app/docs/secrets.md): tiny.app.secrets and tiny.app.authenticate — the OS keychain, not your JSON - [permissions](https://tinyjs.app/docs/permissions.md): tiny.app.permissions — check and ask before you need it - [audio filters](https://tinyjs.app/docs/audio.md): tiny.audio — an EQ on your app's own output - [sound effects](https://tinyjs.app/docs/sampler.md): tiny.audio.sampler — low-latency sound effects - [audio tap](https://tinyjs.app/docs/audiotap.md): tiny.audioTap — read the audio being played, for meters and visualizers - [media](https://tinyjs.app/docs/media.md): tiny.app.nowPlaying, tiny.app.say — Now Playing and speech - [shell & app surface](https://tinyjs.app/docs/shell.md): `tiny.app.*` — open and trash files, launch at login, the Dock and taskbar - [system services](https://tinyjs.app/docs/services.md): `tiny.app.pickColor` · `thumbnail` · `spotlight` · `captureScreen` - [system](https://tinyjs.app/docs/system.md): `tiny.system.*` · `tiny.theme.*` · `tiny.app.power` — the machine your app runs on - [macOS only](https://tinyjs.app/docs/macos-only.md): `tiny.macos.*` — AppleScript, Quick Look, OCR, screen recording, on-device AI, other apps' windows ## ship - [site wrappers](https://tinyjs.app/docs/site-wrappers.md): a hosted web app as a desktop app - [deep links & files](https://tinyjs.app/docs/deep-links.md): myapp:// links, file associations, single instance - [auto-update](https://tinyjs.app/docs/auto-update.md): ship new versions - [signed updates](https://tinyjs.app/docs/signed-updates.md): updates only you can publish ## good to know - [how it works](https://tinyjs.app/docs/how-it-works.md): two processes, one socket - [portability](https://tinyjs.app/docs/portability.md): macOS, Windows and Linux - [gotchas](https://tinyjs.app/docs/gotchas.md): things that cost real debugging ## Optional - [All docs in one file](https://tinyjs.app/llms-full.txt): every page above, in this order - [API map](https://tinyjs.app/docs/api-map.md): every `app` call next to its `tiny` twin, generated from tiny.d.ts - [tinyjs.json schema](https://tinyjs.app/schema/tinyjs.schema.json): JSON Schema for the project file - [Changelog](https://github.com/tarwin/tinyjsapp/blob/main/CHANGELOG.md) - [Agent skill](https://github.com/tarwin/tinyjsapp/tree/main/skill): the reference `tinyjs new` puts in every project - [Example apps](https://github.com/tarwin/tinyjsapp-examples)