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.

Font

Semantic styles and exact sizes

One value carrying size, weight, family and design. The named styles follow the reader's text-size setting; Font.system pins an exact number and does not.

Properties

LARGE_TITLERootlessFont
TITLERootlessFont
TITLE2RootlessFont
TITLE3RootlessFont
HEADLINERootlessFont
SUBHEADLINERootlessFont
BODYRootlessFont
CALLOUTRootlessFont
FOOTNOTERootlessFont
CAPTIONRootlessFont
CAPTION2RootlessFont

Methods

.withWeight(weight)RootlessFont

A copy at a different weight, e.g. Font.CAPTION.withWeight(FontWeight.bold).

  • weight String required
.withFamily(name)RootlessFont

A copy in a different family.

  • name String required
.withDesign(design)RootlessFont

A copy in a system-font design - rounded, serif or monospaced.

  • design String required
.rounded()RootlessFont

Shorthand for withDesign(FontDesign.rounded).

.serif()RootlessFont

Shorthand for withDesign(FontDesign.serif).

.monospaced()RootlessFont

Shorthand for withDesign(FontDesign.monospaced). Keeps digits from shifting width as a number changes.

Font.system(size, weight?, design?)RootlessFont

A system font at an exact point size, optionally in a design.

  • size Number required

    Point size.

  • weight FontWeight

    Defaults to regular.

  • design FontDesign

    Defaults to the system font.

Font.custom(name, size, weight?)RootlessFont

A named family such as "Avenir". Device.fonts lists what is installed; an unknown name falls back to the system font.

  • name String required

    A family name from Device.fonts.

  • size Number required

    Point size.

  • weight FontWeight

    Defaults to regular.

Examples

Setting type

Text("Steps", { font: Font.HEADLINE })
Text("4,213", { font: Font.system(26, FontWeight.bold) })
Text("today", { font: Font.CAPTION.withWeight(FontWeight.medium) })
Text("Hello", { font: Font.custom("Avenir", 20) })