Axint
Open-source TypeScript to native Swift compiler for Apple platforms — AI agents write 5-15x less code for App Intents, SwiftUI, and WidgetKit.
Axint
Axint turns TypeScript and Python into validated Swift for Apple-native features.
Open-source compiler for App Intents, SwiftUI views, WidgetKit widgets, and full apps.
Compact definitions in, validated Swift out.
Website · Playground · Examples · Quick Start · MCP Server · Docs · Registry · Discussions
Start Here
- Try Axint live in the playground or browse the public axint-examples repo.
- Want maintained repo-native samples? Start with examples/README.md, python/examples/README.md, and examples/swift/README.md.
- Need install help? Start with the canonical install discussion.
- Want to contribute? Look at good first issue and help wanted tasks.
- If Axint is useful, star the repo, follow @agenticempire on X, and share what you build in Discussions.
Why Axint
Apple's API surfaces — App Intents, SwiftUI, WidgetKit — are verbose. A single widget needs a TimelineEntry, a TimelineProvider, an EntryView, and a Widget struct before you've written a line of business logic. AI coding agents pay per token, and all that boilerplate adds up fast.
Axint compresses it. One defineIntent() call replaces 50–200 lines of Swift. One defineWidget() replaces an entire WidgetKit stack. The compiler handles the struct conformances, the @Parameter wrappers, the LocalizedStringResource literals — everything an agent would otherwise have to generate token by token.
Four surfaces, one pipeline:
defineIntent() → App Intent for Siri & Shortcuts
defineView() → SwiftUI view
defineWidget() → WidgetKit widget
defineApp() → Full app scaffold
The result: teams and AI tools can author Apple-native features in a much smaller surface than hand-written Swift, then validate and ship ordinary generated Swift.
Quick start
npm install -g @axint/compiler
# compile a single file
axint compile my-intent.ts --out ios/Intents/
# or pipe to stdout
npx @axint/compiler compile my-intent.ts --stdout
Intent
import { defineIntent, param } from "@axint/compiler";
export default defineIntent({
name: "CreateEvent",
title: "Create Calendar Event",
description: "Creates a new event in the user's calendar.",
domain: "productivity",
params: {
title: param.string("Event title"),
date: param.date("Event date"),
duration: param.duration("Event duration", { default: "1h" }),
location: param.string("Location", { required: false }),
},
});
View
import { defineView, prop, state, view } from "@axint/compiler";
export default defineView({
name: "EventCard",
props: {
title: prop.string("Event title"),
date: prop.date("Event date"),
},
state: {
isExpanded: state.boolean("Whether details are visible", { default: false }),
},
body: [
view.vstack(
[
view.text("entry.title"),
view.conditional("isExpanded", [view.text("entry.date")]),
],
{ alignment: "leading", spacing: 8 }
),
],
});
Widget
import { defineWidget, entry, view } from "@axint/compiler";
export default defineWidget({
name: "EventCountdown",
displayName: "Event Countdown",
description: "Shows time until the next event.",
families: ["systemSmall", "systemMedium"],
entry: {
eventName: entry.string("Event name", { default: "Untitled" }),
minutesUntil: entry.int("Minutes until event", { default: 0 }),
},
body: [
view.vstack([view.text("entry.eventName"), view.text("entry.minutesUntil")], {
alignment: "center",
spacing: 4,
}),
],
});
App
import { defineApp, scene, storage } from "@axint/compiler";
export default defineApp({
name: "WeatherApp",
scenes: [
scene.windowGroup("WeatherDashboard"),
scene.settings("SettingsView", { platform: "macOS" }),
],
appStorage: {
useCelsius: storage.boolean("use_celsius", true),
lastCity: storage.string("last_city", "Cupertino"),
},
});
Compile any surface the same way:
axint compile my-intent.ts --out ios/Intents/
axint compile my-view.ts --out ios/Views/
axint compile my-widget.ts --out ios/Widgets/
axint compile my-app.ts --out ios/App/
Watch mode
Recompiles on every save with 150ms debounce, inline errors, and optional swift build after each successful compile:
axint watch ./intents/ --out ios/Intents/ --emit-info-plist --emit-entitlements
axint watch my-intent.ts --out ios/Intents/ --format --swift-build
MCP server
Axint ships an MCP server for Claude Desktop, Claude Code, Cursor, Codex, VS Code, Windsurf, Xcode, and any MCP client.
{
"mcpServers": {
"axint": {
"command": "npx",
"args": ["-y", "@axint/compiler", "axint-mcp"]
}
}
}
11 tools + 3 built-in prompts:
| Tool | What it does |
|---|---|
axint.compile | Full pipeline: TypeScript → Swift + plist + entitlements |
axint.schema.compile | Minimal JSON → Swift (token-saving mode for agents) |
axint.validate | Dry-run validation with diagnostics |
axint.feature | Generate a complete feature package from a description |
axint.suggest | Suggest Apple-native features for a domain |
axint.scaffold | Generate a starter TypeScript intent from a description |
axint.swift.validate | Validate existing Swift against build-time rules |
axint.swift.fix | Auto-fix mechanical Swift errors (concurrency, Live Activities) |
axint.templates.list | List bundled reference templates |
axint.templates.get | Return the source of a specific template |
Built-in prompts:
| Prompt | What it does |
|---|---|
axint.quick-start | Get a quick-start guide |
axint.create-intent | Start a new intent from guided parameters |
axint.create-widget | Start a new widget from guided parameters |
axint.schema.compile is the key optimization — agents send ~20 tokens of JSON and get compiled Swift back directly, skipping TypeScript entirely.
Diagnostics
139 diagnostic codes across the validator surface with fix suggestions and color-coded output:
| Range | Domain |
|---|---|
AX000–AX023 | Compiler / Parser |
AX100–AX113 | Intent |
AX200–AX202 | Swift output |
AX300–AX322 | View |
AX400–AX422 | Widget |
AX500–AX522 | App |
AX700–AX749 | Swift build rules |
AX720–AX735 | Swift 6 concurrency |
AX740–AX749 | Live Activities |
error[AX100]: Intent name "sendMessage" must be PascalCase
--> src/intents/messaging.ts:5:9
= help: rename to "SendMessage"
Full reference: docs/ERRORS.md
Type mappings
| TypeScript | Swift | Default value |
|---|---|---|
string | String | ✓ |
int | Int | ✓ |
double | Double | ✓ |
float | Float | ✓ |
boolean | Bool | ✓ |
date | Date | — |
duration | Measurement<UnitDuration> | ✓ ("1h") |
url | URL | — |
optional<T> | T? | ✓ |
Playground
No install required — axint.ai/#playground runs the same compiler in a server-backed playground, returning Swift live without a local install.
Editor extensions
Extensions for Claude Code, Codex, VS Code / Cursor, Windsurf, JetBrains, Neovim, and Xcode.
Examples
- TypeScript example index — maintained intent, view, widget, and app entry points
- Python example index — maintained SDK parity examples
- Swift repair examples — validator, Fix Packet, and Xcode repair-loop samples
Workflow docs
- Fix Packet — the repair contract for CLI, MCP, and Xcode
- Coverage Snapshot — what Axint currently covers and how to refresh the metrics
- Release Notes — the latest Apple coverage and Xcode workflow improvements
- Architecture — compiler, validator, MCP, Fix Packet, and Xcode pipeline map
- Security — vulnerability reporting and dependency/audit policy
- Contributing — first contribution path and public release checklist
Project structure
axint/
├── src/
│ ├── core/ # Parser, validator, generator, compiler, IR
│ ├── sdk/ # defineIntent(), defineView(), defineWidget(), defineApp()
│ ├── mcp/ # MCP server (11 tools + 3 prompts)
│ ├── cli/ # CLI (compile, watch, validate, eject, init, xcode)
│ └── templates/ # 26 bundled reference templates
├── python/ # Python SDK
├── extensions/ # Editor extensions (9 editors)
├── spm-plugin/ # Xcode SPM build plugin
├── tests/ # 623 TypeScript tests + 114 Python tests
├── examples/ # TypeScript + Swift repair-loop examples
└── docs/ # Error reference, assets
What's next
Current priorities — full roadmap in ROADMAP.md:
defineExtension()— app extension compilationIntentDialog+ richer Apple parameter typesswift-formatintegration for generated output
Contributing
PRs reviewed within 48 hours. Browse good first issue to get started, or see CONTRIBUTING.md.
Apache 2.0, no CLA.
Requirements
- Node.js 22+
- Any OS (macOS, Linux, Windows)
- Xcode 15+ to ship the generated Swift
License
Apache 2.0 — fork it, extend it, ship it.
İlgili Sunucular
Scout Monitoring MCP
sponsorPut performance and error data directly in the hands of your AI assistant.
Alpha Vantage MCP Server
sponsorAccess financial market data: realtime & historical stock, ETF, options, forex, crypto, commodities, fundamentals, technical indicators, & more
Remote MCP Server (Authless)
An example of a remote MCP server deployable on Cloudflare Workers without authentication.
Tmux MCP Server
Provides persistent shell execution through tmux sessions.
DeepView MCP
Enables IDEs like Cursor and Windsurf to analyze large codebases using Gemini's 1M context window.
Feishu API
Fetches API information from Feishu OpenAPI for seamless integration and management within an IDE.
third-eye-mcp
Privacy-first screen capture MCP server for AI coding agents. Let Claude, Cursor, or any MCP-compatible AI see your screen with full control.
MCP Lab
A development environment for building and testing custom MCP servers with AI and VS Code integration.
NeoCoder
Enables AI assistants to use a Neo4j knowledge graph for standardized coding workflows, acting as a dynamic instruction manual and project memory.
Remote MCP Server (Authless)
An example of a remote MCP server without authentication, deployable on Cloudflare Workers.
Dart MCP
An example MCP server built with Dart and deployed on Cloudflare Workers.
Baidu iRAG MCP Server
Generate images using Baidu's iRAG API through a standardized MCP interface.