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.

Cache

Temporary cache with TTL support

Key-value storage that expires, scoped per script. Default TTL is one hour. For API responses and computed values.

Methods

Cache.get(key)Any

Get a cached value. Returns null if expired or missing.

  • key String required
Cache.set(key, value, options?)

Cache a value.

  • key String required

    Scoped to this script.

  • value Any required

    Any JSON-serialisable value.

  • options Any
    • expiry Duration

      How long it stays valid. Default one hour.

Cache.has(key)Boolean

Check if a cached value exists and has not expired.

  • key String required
Cache.delete(key)

Removes the entry. Same shape as Storage.delete and Keychain.delete.

  • key String required

    Scoped to this script.

Examples

Caching API data

let data = Cache.get("weather");
if (!data) {
  const res = Http.get("https://api.weather.com/now");
  data = res.json;
  Cache.set("weather", data, {
    expiry: Duration.minutes(30)
  });
}