- Swift 98%
- JavaScript 2%
Untangle #
A native iOS client for Tangled, the git forge built on atproto. It's written in SwiftUI and styled after the GitHub iOS app.
- Sign in with any atproto account. Untangle uses atproto OAuth (PAR + PKCE + DPoP) as a public native client.
- Browse repositories, the code tree, files with syntax highlighting, branches, commits and diffs.
- Issues and pull requests: lists, detail, comments, opening issues, closing and reopening, and a pull request's commits and changed files.
- Notifications: Tangled has no notifications API, so Untangle builds them from activity on your repositories (new issues, pull requests, stars and followers).
- Explore: trending repositories and people, and search.
Reads go to Tangled's Bobbin AppView at api.tangled.org. Writes (stars, follows, issues, comments) are atproto records created on your PDS.
Building #
You need macOS with Xcode 26 and XcodeGen.
brew install xcodegen
xcodegen # generates Untangle.xcodeproj from project.yml
open Untangle.xcodeproj
Set your development team under Signing & Capabilities, then run.
Server #
/server is a small, dependency-free Node service that hosts the OAuth client metadata at
https://untangle.mozzius.dev/oauth-client-metadata.json. Sign-in needs it to be live. See server/README.md for deploying it on Railway.
The client ID, the redirect scheme (dev.mozzius.untangle:/oauth/callback) and the bundle ID are tied to that domain. If you change the domain, update OAuthConfig in Untangle/Auth/OAuth.swift as well.