Overview
Write your own Adanotch extensions in TypeScript and display your own data, with your own controls, in the island.
Adanotch extensions are lightweight, secure TypeScript programs that place their own custom view right beside your MacBook's notch in the compact area and inside the full island card when expanded. A hardware monitor, live weather glance, pending GitHub pull requests, pomodoro timer, or status panel for your servers can be built in minutes.
const { activity, ui, system } = AdanotchKit;
activity({
async update() {
const { cpuPercent } = await system.stats();
return {
compact: { leading: ui.icon("cpu"), trailing: ui.text(`${cpuPercent}%`) },
expanded: ui.ring(cpuPercent, { label: "CPU" }),
};
},
});1-Minute Quickstart
Get your first extension up and running in just three steps:
Enable Developer Mode & Install CLI
Open Adanotch › Settings › Developer and enable Developer Mode. Click Terminal Command › Install to link the adanotch CLI tool to your terminal.
adanotch --helpCreate Extension from Template
adanotch init my-widget --name "My First Widget"
cd my-widget
npm installinit scaffolds a working TypeScript example, testing environment, complete type definitions (adanotch.d.ts), and the manifest schema.
Start Live Development Loop
npm run watch # Rebuilds dist/index.js on file changes
adanotch dev # Loads into Adanotch and live-reloads on saveTwo Views: Compact & Expanded Island
Adanotch extensions provide two distinct user interface surfaces:
The minimal ambient state sitting permanently to the left and right of the notch. It accepts concise components like ui.icon, ui.text, ui.badge, and ui.progress.
compact: {
leading: ui.icon("cloud.sun.fill", { tone: "accent" }),
trailing: ui.text("21°", { style: "mono" })
}Architecture & Core Principles
The Adanotch extension ecosystem is designed around speed, battery efficiency, and strict security:
- Native SwiftUI Rendering: No HTML, CSS, or DOM overhead. Your extension returns a lightweight JSON node tree that Adanotch renders using native SwiftUI on macOS. Enjoy smooth 120 FPS ProMotion animations with zero webview overhead.
- Isolated JavaScriptCore Process: Every extension runs in its own process, isolated from the main Adanotch application. If an extension crashes or hangs, only its process restarts—the island never freezes.
- Strict Permission Model: Extensions can only access resources explicitly declared in
manifest.jsonand approved by the user: system stats, domain-scoped network requests, clipboard, calendar, and media events. - macOS Integration: Full support for SF Symbols, system Dark Mode tones, Keychain-secured credentials, and native global shortcuts.
Templates & Popular Use-Cases
Explore ready-to-use patterns and use them directly as starting points:
System & Hardware
CPU load, memory breakdown, fan speed, and battery health.
Weather & Finance
External API fetching, caching, and currency/crypto rates.
Media & Music
Current track information, album artwork, and playback controls.
Pomodoro & Timers
Focus countdowns, local event listeners, and chime alerts.
GitHub PRs & CI
Pending review notifications, CI pipeline results, and checks.
Custom Controls
Buttons, sliders, and toggles for one-click automations.
Building with AI Coding Agents
Adanotch provides a first-class developer experience with AI coding tools like Claude Code, Codex, Antigravity CLI, and Cursor.
With the bundled SKILL.md rules inside the extension project, prompt your AI assistant naturally:
# In your terminal or Cursor/Claude chat:
"Write an Adanotch extension that tracks MacBook battery health and remaining charging time"The AI agent will generate compliant manifest.json permissions, src/index.ts, and test suites based on adanotch.d.ts. You can verify your extension instantly using npm test and adanotch lint.
Quick Reference Guides
Getting Started
Environment setup and developer workflow walkthrough.
Lifecycle
Execution order for setup, update, onAction, and render.
UI Components
Complete catalog of text, icon, ring, chart, button, and layout nodes.
CLI Reference
Commands for adanotch init, dev, lint, build, and package.
Frequently Asked Questions
Do extensions drain my Mac's battery?
No. Extensions do not run infinite background polling loops. They only wake up for a few milliseconds when the interval configured in manifest.json triggers (e.g., once every 60 seconds) or when you interact with the notch, update the view, and immediately go back to sleep.
Why native SwiftUI nodes instead of HTML/CSS?
Webviews and DOM trees consume significant memory and CPU. Adanotch's declarative JSON node architecture leverages Apple's native rendering engine for instant responsiveness, native look-and-feel, and full battery efficiency on 120Hz ProMotion displays.
How can I share my extension with others?
Run adanotch build or npm run package inside your extension directory to produce a single .adanotchext archive. You can share this file via AirDrop, email, or GitHub Releases. Anyone with Adanotch can double-click it to install instantly.