Cider is a macOS-first SwiftUI frontend for Smalltalk. The Swift app will receive a wire protocol emitted by a Pharo Spec framework adapter and render the resulting UI natively.
Phase 0 establishes the project floor: SwiftPM structure, a minimal SwiftUI app shell, a pure Swift core module, Swift Testing coverage, and a headless Pharo availability check.
Phase 1 adds the first Spec-shaped wire slice. A minimal Pharo Spec application emits CIDER:-prefixed NDJSON records whose payloads use Spec vocabulary such as SpWindowPresenter, SpBoxLayout, SpLabelPresenter, SpButtonPresenter, SpTextInputFieldPresenter, SpListPresenter, adapter names, selectors, and presenter relationships.
- Swift 6.3 or newer
- macOS 14 or newer for the SwiftUI app target
- A local Pharo 13.1 installation on
PATHfor headless bootstrap checks CIDER_PHARO_IMAGEpointing at a local Pharo 13.1 image for Pharo tests
Pharo is intentionally local-first in this phase. Containerized Pharo is deferred until the CI and reproducibility work.
Run the app demo with:
scripts/demoThis prepares the local Pharo image, builds .build/Cider.app, and launches the SwiftUI app. The app asks Pharo for its real Calypso system browser at runtime and falls back to the bundled Hello World fixture if the live bridge is unavailable.
Package, class, protocol, and method pane selections are sent back to Pharo, and selected methods return their source for display in SwiftUI.
Run the full local check with:
scripts/testEmit a headless snapshot of Pharo's default Calypso system browser with:
scripts/calypsoRun Swift-only checks with:
scripts/bootstrap-swiftRun the Pharo availability check with:
scripts/bootstrap-pharoscripts/bootstrap-pharo also runs the Hello World Spec application headlessly and compares its CIDER: output with Sources/CiderCore/Resources/hello-world.ndjson, which is the canonical Swift smoke fixture for this slice. The visible demo path uses Pharo's real Calypso system browser so development-tool behavior comes from upstream Pharo code instead of a Cider-specific fake browser.
Prepare a cached local Pharo image and VM with:
scripts/prepare-pharoBy default this uses the full Pharo 13.1 image and stores the prepared image, VM, sources, and Pharo home directory under .build/pharo. The minimal image can be selected with CIDER_PHARO_IMAGE_FLAVOR=minimal, but the full image is the supported default because it already includes the released Spec stack.
CiderAppis the macOS SwiftUI executable target.CiderCoreis the pure Swift module for protocol and domain boundaries.CiderCoreTestscontains Swift Testing coverage for core behavior.
The full Spec adapter protocol, transport, serialization format, and widget schema are not defined yet.
The Pharo code lives in Tonel format under pharo/src:
Cider-Speccontains the Spec backend, adapters, and wire emitter.Cider-Spec-Examplescontains the Hello World Spec application.Cider-Spec-Testscontains the SUnit wire test.
Cider is licensed under the GNU Affero General Public License version 3 or later (AGPL-3.0-or-later). The full license text is in LICENSE, downloaded from the GNU project at https://www.gnu.org/licenses/agpl-3.0.txt.