A lightweight, native macOS paint app modeled on Windows 11 Paint.
-
Download the latest
iPainted-x.y.z.dmgfrom the Releases page. -
Open the DMG and drag iPainted into your Applications folder.
-
The first time you open it, macOS may say "iPainted is damaged" or "can't be opened because it's from an unidentified developer."
This is normal and the app is safe. It only means the app isn't signed with a paid Apple Developer account ($99/yr) — apparently, making free, open-source software is only cool if you pay Apple rent!
To open it, do either of these once:
- Right-click iPainted in Applications → Open → Open, or
- run this one line in Terminal:
xattr -dr com.apple.quarantine /Applications/iPainted.app
After that, it opens normally like any other app.
# Quick run (debug, no bundle):
swift run
# Build the distributable .app (with generated icon):
./scripts/build_app.sh # -> iPainted.app
open iPainted.app
# Headless engine sanity checks:
swift build && .build/debug/iPainted --selftestRequires macOS 14+ and a Swift 5.9+ toolchain (Xcode 15+).
One command bumps the version, builds the app, packages a DMG, commits, tags, and publishes a GitHub release:
./scripts/deploy.sh # patch bump, e.g. 1.0.0 -> 1.0.1
./scripts/deploy.sh minor # 1.0.0 -> 1.1.0
./scripts/deploy.sh major # 1.0.0 -> 2.0.0
./scripts/deploy.sh 1.4.2 # explicit versionThe version lives in the VERSION file (single source of truth, read by build_app.sh).
Requires the gh CLI: brew install gh && gh auth login. A nicer DMG layout uses
create-dmg (brew install create-dmg); without it the script falls back to hdiutil.
Sources/iPainted/
App.swift @main scene, menu commands, file ops
Models/ Enums, Layer (CGContext-backed), Document (+ undo/IO)
Drawing/ StrokeEngine, ShapePaths, FloodFill
Views/ CanvasNSView (+Mouse, +Selection), CanvasContainer
UI/ AppState, ToolbarView, Panels, ContentView
SelfTest.swift --selftest engine checks
If you find iPainted useful and want to support its development or consider sponsoring! Your support helps and keeps the project going: