Rootless

Automate iOS, iPadOS, and macOS using plain JavaScript. Build custom widgets and interact directly with native APIs.

Download on the App Store
Rootless app interface

Plain JavaScript

Supports ES6. Scripts are stored as plain .js files on your disk.

Native APIs & Documentation

Integrate directly with iOS native APIs. Fully documented, available offline.

Siri Shortcuts

Trigger scripts via Siri. Present tables, websites, and custom HTML natively.

System Integration

Run from the Share Sheet, process inputs, and manage local files via Files.app.

x-callback-url

Communicate seamlessly and trigger workflows with other apps on your device.

Customizable & Ready

Tailor the code editor to your liking. Includes several example scripts to start immediately.

Documentation

Also inside the app, or as rootless.json.

Storage

Persistent key-value storage

Persistent key-value storage, scoped per script. Holds any JSON-serialisable value and survives between runs.

Methods

Storage.get(key)Any

Get a stored value by key. Returns null if not found.

  • key String required
Storage.set(key, value)

Store a value with the given key.

  • key String required

    Scoped to the script that wrote it.

  • value Any required

    Anything JSON can represent. A value it cannot, a Date or a function, is not stored.

Storage.delete(key)

Delete a stored value by key.

  • key String required
Storage.has(key)Boolean

Check if a key exists in storage.

  • key String required

Examples

Counting script runs

let count = Storage.get("runCount") ?? 0;
count++;
Storage.set("runCount", count);

Text(`Run #${count}`);