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