Skip to content

dasher-project/Dasher-Apple

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

176 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dasher for Apple Platforms

CI Release License: MIT

Dasher is an information-efficient text-entry interface, driven by continuous pointing gestures. It lets you write using eye gaze, a mouse, a switch, a joystick, or touch — designed for accessibility and augmentative communication (AAC).

This is the Apple frontend — iOS, macOS, and visionOS — built on the shared DasherCore engine.

dasher.at — downloads, user docs, and live demo Feature status — what each platform supports All repos — engine, frontends, design guide

Status

Beta — the macOS app is available as a beta; the iOS app, keyboard extension, and visionOS targets are in active development. See the feature matrix for per-target status.

Targets

Target Platform Description
DasherApp iOS 17+ Flagship iPhone/iPad app
DasherKeyboard iOS 17+ System-wide custom keyboard extension
DasherMac macOS 14+ Mac app with direct-mode (accessibility API)
DasherVision visionOS 1.0+ Apple Vision Pro app with hand-tracking

Shared Swift lives in DasherShared/ (access/input configuration, shared UI) and DasherSpeech/ (TTS via swift-tts-wrapper), managed as local Swift Package Manager targets.

Install

Beta builds are on the Releases page. Not yet on the App Store. See the feature status for availability.

Build

Prerequisites

  • Xcode 16+, Swift 5.9+
  • XcodeGen and SwiftLintbrew install xcodegen swiftlint
  • Git (with submodules)

Steps

git clone --recurse-submodules https://github.com/dasher-project/Dasher-Apple.git
cd Dasher-Apple
xcodegen generate          # produces Dasher.xcodeproj
open Dasher.xcodeproj

Select a scheme (DasherApp, DasherKeyboard, DasherMac, or DasherVision) and build.

The .xcodeproj is not committed — it is regenerated from project.yml by XcodeGen on every clone. SwiftLint runs as a build phase (config in .swiftlint.yml). Xcode Cloud runs the above automatically via ci_scripts/ci_post_clone.sh.

Architecture

Each frontend talks to DasherCore only through its flat C API (dasher.h) via per-target bridging headers (#import "dasher.h"). DasherCore is compiled from source as a per-platform static library; the frontend owns input capture, canvas rendering (Metal / CoreGraphics), and platform UI (SwiftUI).

flowchart TD
    subgraph Frontend["Apple frontend - this repo"]
        UI["SwiftUI / AppKit / RealityKit<br/>platform UI + input capture"]
        Bridge["DasherBridge (Swift)<br/>bridging header: dasher.h"]
        Canvas["Metal / CoreGraphics canvas"]
    end
    subgraph Engine["DasherCore - submodule"]
        CAPI["dasher.h - flat C API"]
        Core["C++17 engine<br/>language model · node tree · rendering"]
    end

    UI -- "pointer / switch / tilt input" --> Bridge
    Bridge -- "mouse_move · down · up · key_event · frame()" --> CAPI
    CAPI --> Core
    Core -- "draw commands (int32[] quads)" --> Bridge
    Bridge --> Canvas
    Core -- "output text · speech · clipboard" --> Bridge
    Bridge -- "entered text" --> UI
Loading

See the architecture overview and DasherCore's C API for the engine contract.

Repository layout

Directory Purpose
DasherApp/ iOS app (SwiftUI)
DasherKeyboard/ iOS custom keyboard extension (memory-constrained, standalone)
DasherMac/ macOS app (SwiftUI + AppKit)
DasherVision/ visionOS app (SwiftUI + RealityKit)
DasherShared/ Shared Swift — access config, input methods, UI
DasherSpeech/ Shared TTS wrapper (swift-tts-wrapper)
DasherEngine/ Resource bundle (DasherCore data files)
DasherCore/ Submodule — the C++ engine (PR upstream, don't edit here)

Contributing

See CONTRIBUTING.md for build details, code style, the DasherCore submodule policy, and DCO sign-off. For project-wide conventions (code of conduct, RFCs, security), see the org contributing guide.

Documentation

Troubleshooting

Crash reports. If DasherMac crashes, macOS writes a report to ~/Library/Logs/DiagnosticReports/Dasher-*.ips. On the next launch Dasher offers to reveal this folder — attaching the .ips to a GitHub issue is the fastest way to help us fix it. (Anonymous crash events are also sent to PostHog if you've opted in to analytics.)

License

MIT — see LICENSE. The bundled DasherCore submodule retains its own MIT license.

About

Dasher iOS/MacOS using DasherCore and SwiftUI for frontend.

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages