explaingit

appeight/app8-ios-sdk

25SwiftAudience · developerComplexity · 4/5ActiveLicenseSetup · moderate

TLDR

iOS library that renders native UIKit screens at runtime from a JSON DSL, so apps can ship UI as data instead of compiled Swift code.

Mindmap

mindmap
  root((App8Engine))
    Inputs
      JSON DSL
      App manifest
      Screen definitions
      Asset references
    Outputs
      UIKit view controllers
      Native UIViews
      Reactive bindings
    Use Cases
      AI generated UI
      Server driven UI
      Dynamic app updates
      Prototyping screens
    Tech Stack
      Swift
      UIKit
      Combine
      Foundation
      MapKit

Things people build with this

USE CASE 1

Render iOS app screens from JSON returned by an LLM or backend

USE CASE 2

Push UI changes without an App Store release by swapping DSL files

USE CASE 3

Prototype iOS layouts in JSON and validate them with the debug instance

USE CASE 4

Build a server driven UI layer for an existing native app

Tech stack

SwiftUIKitCombineFoundationMapKitSwiftPM

Getting it running

Difficulty · moderate Time to first run · 1h+

Requires iOS 18, Swift 6.1, Xcode 16, and must be built against the iOS Simulator because swift build on macOS cannot find UIKit.

Apache 2.0 permits commercial use, modification, and distribution with attribution and an explicit patent grant.

In plain English

App8Engine is an iOS library that draws native screens at runtime from a JSON description. The idea is that an iPhone app does not have to ship its user interface as fixed Swift code anymore. Instead, the host app provides JSON in a format the project calls the App8 DSL, and App8Engine turns that JSON into real UIKit view controllers and views. The README points to use cases like AI-generated user interfaces, where the screens come from a model or a server rather than being written by hand. The engine is built only on Apple frameworks, namely UIKit, Foundation, Combine, and MapKit, with no third-party dependencies. It produces native views rather than wrapping a web view. Screens support reactive variables, expressions written inside double curly braces, component state, and navigation between screens described in the DSL itself. Requirements are iOS 18 or newer with Swift 6.1 and Xcode 16. Installation is through Swift Package Manager, pointing at the project URL with version 0.1.0 or higher. The README warns that the project is in the 0.x range and the public API can change between minor versions. The engine itself never fetches content. Instead, the developer implements a protocol called App8DataSource that returns JSON for the app manifest, screens, components, styles, and assets. The data can come from the bundle, the network, or anywhere else. To render, you create an App8.Instance with your data source, call startApp, and present the returned root view controller. A separate debugInstance method lets you render a single screen on its own or validate DSL without going through the full app flow. A minimal screen example in the README shows a counter that has a label bound to a count variable and a button with a tap action that increments it. The DSL covers components such as label, button, image, collection, and stackView, plus styles, layout, variables, actions, navigation, collections, and animations, with full reference in the docs/dsl directory. Tests run against the iOS Simulator. The license is Apache 2.0.

Copy-paste prompts

Prompt 1
Write a BundleDataSource conforming to App8DataSource that loads my app.json and screens from the iOS bundle for App8Engine
Prompt 2
Generate an App8 DSL screen JSON for a login form with email and password fields and a submit button that calls a navigation action
Prompt 3
Show me how to call App8.instance(dataSource:).startApp() inside a SwiftUI UIViewControllerRepresentable so I can host App8Engine in a SwiftUI app
Prompt 4
Convert this UIKit screen written in Swift into equivalent App8 DSL JSON using label, button, and stackView components
Prompt 5
Add a network App8DataSource that fetches DSL JSON from my REST API and caches it locally for App8Engine
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.