Thanks for your interest in improving Simpleton! This is an early-stage (alpha) project, so contributions, bug reports, and ideas are all welcome.
In a hurry? AGENTS.md has the crisp rules (branching, Conventional Commits, the checks to run, where code goes). This document is the fuller how-to.
Requirements:
- macOS 14 (Sonoma) or later
- Swift 5.9+ / Xcode 15+
git clone https://github.com/bbjansen/simpleton.git
cd simpleton
swift build
swift run SimpletonTo iterate on a real, launchable app bundle:
bash scripts/e2e/make-app-bundle.sh debug
open .build/Simpleton.appIf repeated launches trigger Keychain prompts, create a stable local signing identity once and re-sign after each build:
bash scripts/dev/make-dev-cert.sh # one time
swift build && bash scripts/dev/sign-dev.shSources/SimpletonCore/— pure, UI-free logic (models, stores, parsers). Put testable logic here.Sources/Simpleton/— the AppKit + SwiftUI application.Tests/CoreChecks/— the no-Xcode test runner overSimpletonCore.scripts/dev/,scripts/e2e/— dev-signing and app-bundle / UI-smoke helpers.
Prefer adding logic to SimpletonCore so it can be covered by CoreChecks without a GUI.
- Build cleanly:
swift build
- Run the checks (they must stay green):
swift run CoreChecks
- Add checks for any new logic in
SimpletonCore— mirror the existing*Checks.swiftfiles inTests/CoreChecks/and register your suite inTests/CoreChecks/main.swift.
CI runs swift build + swift run CoreChecks on macOS for every push and pull request.
- Work on a feature branch — never commit directly to
main.feature/…,fix/…,refactor/…,chore/…,docs/…,test/…
- Use Conventional Commits:
feat(prefs): make the Preferences window resizablefix(session): restore nested split layouts exactlytest(core): add SSH config parser checks
- Keep commits focused and messages descriptive (what changed and why).
Please use the issue templates:
- 🐞 Bug report — steps to reproduce, expected vs. actual, macOS version.
- 💡 Feature request — the problem you're trying to solve and your proposed idea.
Be respectful and constructive. Assume good intent, and keep discussions focused on the work.