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.

ContentTransition

How contents change in place

For a value changing inside a view that stays. numericText is for counters and totals; symbolEffect swaps one SF Symbol for another. Transition is the other one, for a whole view arriving or leaving.

Methods

ContentTransition.numericText(countsDown?)Any

Rolls digits like an odometer. For counters and totals.

  • countsDown Boolean

    Roll downwards. Default false.

ContentTransition.interpolate()Any

Blends between the two states where the system can.

ContentTransition.opacity()Any

Cross-fades the content.

ContentTransition.symbolEffect()Any

Swaps one SF Symbol for another with its own effect.

ContentTransition.identity()Any

No transition: the content simply changes.

Examples

A counter

Animated({
  id: "steps",
  value: steps,
  contentTransition: ContentTransition.numericText(),
  animation: Animation.snappy(),
  child: Text(Format.number(steps)),
})