Open an image, make a quick edit, and export it without setting up a workspace. ItsPaint keeps its drawing tools, colours, and palette visible in one native Mac window.
A pasted plan, highlighted and annotated in ItsPaint. Reproduce the canvas
with swift run --package-path Packages/PaintKit paint-demo --scene
clipboard out.png.
- Twelve visible tools for drawing, markup, text, selection, colour, and pixelation.
- Fifteen shapes with solid, dashed, or dotted outlines and optional fills.
- A 48pt tool rail — one cell thick on either edge — that moves between the left and bottom of the window.
- Precise canvas control with pointer-centred zoom, nearest-neighbour display above 100%, pixel grids, and live tool footprints.
- Native documents and common exports with no third-party dependencies, accounts, telemetry, or cloud service.
![]() |
![]() |
| Sketch the idea. Draw a layout, route, or quick correction. | Keep transparency. Remove a plain background with Instant Alpha. |
Download the latest beta from Releases, open the disk image, and drag ItsPaint to Applications.
The beta is ad-hoc signed and is not yet notarised. On first launch, Control-click ItsPaint, choose Open, then confirm Open. If macOS continues to block the app, clear its download quarantine once:
xattr -dr com.apple.quarantine /Applications/ItsPaint.appEach release includes checksums.txt with SHA-256 hashes for the downloads.
ItsPaint requires macOS 14 Sonoma or later.
To build from source:
git clone https://github.com/joshlin2201/itspaint.git
cd itspaint
open ItsPaint.xcodeprojBuild and run the ItsPaint scheme with ⌘R. Xcode 16 or later is required.
| Group | Tools |
|---|---|
| Draw | Pencil, Brush, Airbrush, Highlighter, Eraser |
| Insert | Shape, Text, Step Badge, Fill, Eyedropper |
| Select | Rectangle, Ellipse, Lasso, Instant Alpha |
| Effects | Pixelate |
The Shape tool includes line, curve, arrow, rectangle, rounded rectangle, ellipse, triangle, right triangle, diamond, pentagon, hexagon, five- and six-point stars, speech bubble, and polygon.
Instant Alpha selects connected pixels by colour. Use ⇧-click to add to the
selection, ⌥-click to subtract, then choose Make transparent.
Pixelate is intended for visual de-emphasis, not secure redaction. Use an opaque filled shape to cover private information before exporting a flattened image.
Paste an image with ⌘V or open it from Finder. Add arrows, shapes, text, step
badges, highlights, or freehand marks. Floating pasted content and selections can
be moved or resized before they are placed. Export with ⇧⌘E, or save an
editable .itspaint document.
| Shortcut | Action | Shortcut | Action |
|---|---|---|---|
P |
Pencil | B |
Brush |
A |
Airbrush | H |
Highlighter |
E |
Eraser | U |
Shape |
T |
Text | N |
Step Badge |
K |
Fill | I |
Eyedropper |
M |
Select | R |
Pixelate |
X |
Swap colours | [ / ] |
Change tool size |
Space |
Pan | ⌥1–⌥9 |
Choose a shape |
Pinch or ⌘-scroll to zoom around the pointer. Hold ⌥ to sample a colour
without changing tools. Right-drag uses the second colour. Esc cancels the
current shape, text box, selection, floating paste, or options panel.
ItsPaint documents use the .itspaint package format: a lossless PNG with JSON
metadata for the canvas, colours, and palette.
Export supports PNG, JPEG, TIFF, BMP, GIF, HEIC, AVIF, PDF, and ICO when the corresponding encoder is available in the installed macOS version. The export panel includes format and scale controls. Formats without alpha are flattened onto the second colour.
ItsPaint has two layers:
Packages/PaintKit/ UI-free drawing engine, raster operations, undo, and codecs
App/ AppKit document lifecycle, canvas, and SwiftUI interface
PaintKit stores pixels as premultiplied RGBA8 and returns the changed rectangle from every edit. The canvas redraws only that area, and undo history is bounded by memory rather than by a fixed number of steps.
Run the test suites with:
swift test --package-path Packages/PaintKit
swift test -c release --package-path Packages/PaintKit
xcodebuild -project ItsPaint.xcodeproj -scheme ItsPaint \
-destination 'platform=macOS' testItsPaint is in public beta. Released builds are ad-hoc signed and not notarised. Text becomes pixels when committed, and WebP export is not available because macOS does not provide a WebP encoder.
See CHANGELOG.md for version history and docs/README.md for the design, architecture, feature reference, testing guide, and roadmap.
Issues and pull requests are welcome. CONTRIBUTING.md explains the project structure, design constraints, and test requirements.
MIT License · Built by Josh Lin


