Native macOS · v1.0

Turn API specs into Swift you can ship.

SpecForge converts OpenAPI 3 and Swagger 2 documents into a ready-to-build Swift package — Codable models, typed endpoints, and an async URLSession client. No boilerplate. No web wrapper.

Free · Universal binary · macOS 14+ · Specs stay on your Mac

OpenAPI 3.0 OpenAPI 3.1 Swagger 2.0 JSON YAML
100%Native SwiftUI
1 specComplete package
0Lines of boilerplate
On-deviceNo telemetry

Why SpecForge

Everything between the contract and the client.

Stop hand-writing models from JSON examples. Bring the spec, choose a few options, and get a package that compiles.

Three ways in

Fetch a live URL, paste JSON or YAML, or drop a spec file. Localhost and private specs are supported.

  • URL, paste, and file drop
  • Private specs with auth

Auth-aware fetching

Bearer tokens, API keys, and HTTP Basic auth for protected specifications. Credentials never enter the generated code.

  • Bearer & API key
  • Basic authentication

Faithful Codable models

Nested objects, enums, nullability, maps, unions, allOf inheritance, and recursive types become compilable Swift.

  • String & integer enums
  • oneOf / anyOf unions

A real network client

One typed async method per operation, with path, query, and header parameters plus JSON request bodies.

  • URLSession + async/await
  • Typed APIError handling

Ready to build

Export a complete Swift package with a manifest, sources, and a README. Or choose flat files for an existing target.

  • SwiftPM package
  • Package, sources, docs

Private by design

A native, on-device workflow. No telemetry, no uploaded specs, and no secrets embedded in client code.

  • No accounts
  • No analytics

How it works

From spec to package in three steps.

The app handles the tedious parts: parsing, naming, type mapping, request building, and file assembly.

01
https://api.orbit.example/v1/openapi.json GET

Bring your spec

Use an OpenAPI 3.0/3.1 or Swagger 2.0 document. Fetch it from a URL, paste it, or drop a JSON/YAML file.

02
AccessPublic
DatesDate
Package

Shape the client

Choose access level, date mapping, a type prefix, and an optional base URL override. Sensible defaults are already set.

03
◇ Package.swift
◇ Models.swift
◇ APIClient.swift
◇ Endpoints.swift

Export & build

Review every file in the app, then export a Swift package that opens directly in Xcode and builds with SwiftPM.

The output

Generated code you’d write yourself.

SpecForge keeps the client small, readable, and dependency-free. Just Foundation, URLSession, and standard Swift concurrency.

  • ✓ Clear names derived from the contract
  • ✓ CodingKeys only when keys need mapping
  • ✓ Runtime-configurable authentication
  • ✓ ISO 8601 dates and typed errors
  • ✓ No third-party runtime dependencies
OrbitTasksAPIKit
Package.swift
README.md
Sources/OrbitTasksAPIKit/
Models.swift
APIClient.swift
Endpoints.swift
JSONValue.swift
public enum TaskStatus: String, Codable, CaseIterable {
    case backlog = "backlog"
    case inProgress = "in_progress"
    case inReview = "in_review"
    case done = "done"
}

public struct Task: Codable {
    public var id: String
    public var title: String
    public var status: TaskStatus
    public var priority: Priority
    public var dueDate: Date?
    public var labels: [String]?
    public var assignee: User?
    public var metadata: [String: String]?
}

A native workflow

Built for the Mac, not the browser.

SpecForge is a real SwiftUI application with drag and drop, keyboard shortcuts, native panels, and a code viewer. It feels at home next to Xcode.

⌘
Keyboard-first⌘O open, ⌘↩ generate, ⌘E export
⤓
Drag & dropDrop a JSON or YAML spec straight onto the app
⌁
On-deviceNo accounts, analytics, or uploaded code
Read the full walkthrough →
URL, paste, or file — with auth and generation settings in one place.

Compatibility

OpenAPI and Swagger, with honest limits.

SpecForge handles the common production contracts. When it can’t map something safely, it tells you in the Notices panel instead of silently dropping it.

Supported

  • OpenAPI 3.0 / 3.1
  • Swagger 2.0
  • JSON and YAML
  • $ref schemas & parameters
  • Enums, unions, maps, allOf
  • JSON, text, binary, empty responses

Not yet

  • External $ref documents
  • Multipart / form-urlencoded bodies
  • Cookie parameters
  • Typed error response bodies
  • Discriminator-driven decoding

FAQ

Good to know before you build.

Is SpecForge really a native Mac app?

Yes. It’s built with SwiftUI and runs entirely on your Mac. There is no web view, local server, or account layer in the app.

Where do my credentials go?

They are attached only to the outgoing request that downloads the specification. Tokens and passwords are never embedded in generated files, logged, or sent anywhere else.

What Swift version does the generated code need?

The generated package uses Swift 5.9+ and targets iOS 15, macOS 12, tvOS 15, and watchOS 8 or later. The macOS app itself requires macOS 14+.

Can I use the output in an existing Xcode project?

Yes. Export a package and add it as a local dependency, or turn off “Swift Package” during generation to get flat Swift files you can drag into a target.

Does it handle private specification URLs?

Yes. Choose Bearer, API key, or Basic authentication before fetching. The URL flow supports protected endpoints and localhost.

Is it free?

The app is free to download. The source is available on GitHub so you can inspect the generator and build it yourself.

How do I install it?

Open the DMG, drag SpecForge to Applications, and launch it. The build is ad-hoc signed but not notarized, so macOS blocks the first launch. On macOS 15 or later, open System Settings → Privacy & Security, scroll down, and click Open Anyway. On macOS 14, right-click the app and choose Open. You only need to do this once.

SpecForge app icon

Ready when your spec is

Skip the model-writing. Ship the client.

Download SpecForge, drop in a spec, and have a Swift package in under a minute.

macOS 14+ · Universal (Apple Silicon & Intel) · No account required
First launch: System Settings → Privacy & Security → Open Anyway

SpecForge screenshot preview