The definitive screen capture utility for macOS, designed with simplicity and efficiency in mind.
Website · Mac App Store · Download DMG · Translate · Discord
brew install --cask ishareishare 5.3 and later require a Mac with Apple silicon running macOS 15 or later. Intel Macs stay on 5.2.1, and the update feed only offers newer versions to Apple silicon Macs.
![]() |
![]() |
![]() |
![]() |
- Capture: regions with a pixel magnifier, coordinates, colors and a measuring tool, windows with or without shadows, whole displays, your last region and scrolling pages, all through ScreenCaptureKit. Optional gradient backgrounds for window captures, privacy blur for chosen apps, text recognition, QR links, self-timer, interval capture and per-app profiles.
- Record: displays, windows or a region you draw, as video or GIF, with a webcam bubble, click and keystroke overlays, system audio and microphone meters, trimming, chapter markers, on-device captions and exports to MP4, MOV, GIF or audio.
- Annotate: arrows in several styles, lines, shapes, highlights, pen, marker, text, speech balloons, numbered steps, emoji and symbol stamps, magnifier, spotlight, blur, pixelate, smart eraser, crop with handles and aspect presets, rotate, flip, zoom and pan, a layers sidebar and templates. Done runs your after-capture actions.
- Upload: Imgur, custom HTTP uploaders with optional password-protected and expiring links, ShareX
.sxcuimport, S3-compatible storage (AWS S3, Cloudflare R2, DigitalOcean Spaces, Backblaze B2, MinIO) with expiring links and Keychain-stored secrets, and local destinations: a folder, iCloud Drive or a Photos album. Upload to several destinations, pick one per capture, upload text snippets, watch a folder, retry failed uploads, shorten links and redact sensitive text. Upload presets get their own shortcuts. An Apple Intelligence assistant builds uploaders from a conversation. - Automate: global keyboard shortcuts, Shortcuts actions, an
isharecommand-line tool with JSON output,ishare://URL actions with x-callback-url support, a Raycast extension, a share menu extension, "Upload with ishare" in Finder and drag and drop onto the menu bar icon. - Share nearby: QR codes for every link, and temporary links on your local network that devices on the same Wi-Fi can open without any uploader.
- Everything else: a customizable, keyboard-friendly menu with a ⌘K command palette and previews, a Recent Uploads widget, searchable upload history with server-side deletion, settings search and backup, sound options, a welcome guide, AirDrop, Photos, Messages and Mail sharing, 11 languages, and Liquid Glass on macOS 26.
ishare imports .iscu files: JSON documents that describe an HTTP, S3, WebDAV, SFTP, Dropbox, Google Drive, OneDrive or GitHub uploader, or a local destination such as a folder, iCloud Drive or a Photos album. HTTP uploaders can declare linkOptions so you can protect each link with a password or let it expire. The full specification is on the website, and ready-made uploaders for chibisafe, copyparty, Discord webhooks, lumen, Zipline (also with password and expiry headers), S3, WebDAV, SFTP, Dropbox, Google Drive, OneDrive, GitHub, a folder and Photos are in examples.
Install the bundled command-line tool from Settings → Advanced → Command-Line Tool, then:
ishare upload ~/Desktop/diagram.png
ishare capture region --upload --json
ishare record start
ishare uploaders list
ishare history --limit 10 --jsonApps and scripts can also open ishare://capture/region, ishare://record/toggle, ishare://upload?path=…, ishare://uploader/select?name=… and ishare://open/history, with optional x-success and x-error callbacks. The full reference is on the website.
The Xcode project is generated with XcodeGen:
brew install xcodegen
xcodegen generate
open ishare.xcodeproj- The
isharescheme builds the sandboxed App Store app, and theGitHubscheme builds the direct download app with Sparkle and runs the unit tests. - Pure ISCU decoding, request building and capture math live in the local
ishareCoreSwift package inPackages/ishareCore; run its tests without launching the app withswift test --package-path Packages/ishareCore. - Swift sources are formatted with
swift formatand the.swift-formatconfiguration; rungit config core.hooksPath scripts/hooksonce to lint staged Swift files before every commit. - The
UITestsscheme runs the menu, editor and upload flow UI tests against a deterministic test mode of the app; the upload flow captures a generated fixture image (-ishareUITestCaptureSource fixture, no screen recording permission needed), uploads it to a stub HTTP server the test starts on127.0.0.1and checks the toast, the clipboard and the history. - Snapshot tests compare the menu, toast, editor toolbar and General settings with references in
ishareTests/Snapshots/macOS<major>/and skip on macOS versions without references. Run the Snapshots workflow manually to render the references on the macOS runner and commit them straight todev. - The S3 integration tests in
ishareTests/S3IntegrationTests.swiftrun only whenISHARE_S3_ENDPOINTis set. Start a local MinIO server (brew install minio && MINIO_DOMAIN=localhost minio server /tmp/minio --address "[::]:9000") and runTEST_RUNNER_ISHARE_S3_ENDPOINT=http://127.0.0.1:9000 xcodebuild test -scheme GitHub -destination platform=macOS,arch=arm64 -only-testing:ishareTests/NetworkSuite; setTEST_RUNNER_ISHARE_S3_VIRTUAL_HOST_ENDPOINT=http://localhost:9000to cover virtual-hosted URLs; macOS resolves every*.localhostbucket name to loopback, and App Transport Security allows plain HTTP to it. Thes3-integrationCI job does this on every pull request. - Release and maintenance tasks live in one Go CLI,
go run ./tools/cmd/ishare-tools <command>:set-version <version>writes the marketing version and build number toConfig.xcconfig;release-notes [file]turns release markdown on stdin into App Store release notes, merging several releases into one set of notes;release-check [--app ishare.app] [--release-notes file]checks entitlements againstfastlane/entitlements-allowlist.json, usage descriptions, the App Review notes infastlane/review_notes.txt, the committed screenshots of every locale, the localized metadata and the release notes;metadata [--check]renders the App Store listing (name, subtitle, keywords, promotional text, description and release notes) of every supported locale intofastlane/metadata/<locale>/from thefastlane/metadata/Metadata.xcstringscatalog, checking the App Store limits; release notes get localized section headings and keep English entries unless the catalog has a translation for them. Edit the English listing in the catalog, not infastlane/metadata/en-US, and rerun the command;app-store-plan --report status.json --releases releases.jsondecides whether to wait, submit or report a rejection fromfastlane mac statusand the GitHub releases;register-bundle-id [identifier...]registers bundle identifiers with App Store Connect;merge-translations <base> <incoming> <output>keeps only new Crowdin translations in a string catalog;symbolicate <crash.ips|report.crash> --dsyms <ishare-<version>-dSYMs.zip>symbolicates a crash report from a user: it reads the binary images and frames of an.ips(JSON) or legacy.crashreport, matches the image UUIDs against the dSYMs fromdwarfdump --uuid, and resolves every frame of ishare, its widgets and its share extension withatos. Download the dSYM zip attached to the matching GitHub release (ishare-<version>-dSYMs.zipfor the direct download,ishare-<version>-AppStore-dSYMs.zipfor the App Store build), or pass a folder of.dSYMbundles, and add--output fileto write the result to a file;package-dsyms <archive.xcarchive> <output.zip>checks that an archive contains the dSYMs of the app, the widgets and the share extension with UUIDs that match the archived binaries, and zips them for the release;docc-symbols <derived-data> <output>reduces the app's symbol graph to the types the DocC catalog documents (theUploaderprotocol, its conformances and the upload model), so the published documentation stays small;coverage [--min Area=percent]... <xccov.json>turnsxcrun xccov view --report --jsonoutput into a Markdown summary per area (Capture, Recording, Http, ISCU, Editor, Views, Util and so on), writes it to the job summary and fails when an area falls below its minimum. TheappCI job enforces minimums for the capture, upload and ISCU code, and the Coverage Comment workflow posts the summary as a single, updated comment on pull requests;screenshots [all | locale[:language]...]renders the App Store screenshots through theScreenshotsUI test scheme intofastlane/screenshotsas 2880×1800 JPEGs. Run it on a Mac with a Retina display (the scenes are 1440×900 points) and commit the result, or pass--cito create a 1680×1050 point HiDPI virtual display first (a CI-only helper intools/virtualdisplay); the App Store workflow's "regenerate screenshots" option does that on a runner and commits the checked screenshots, including the website copies, straight todev, so no extra branches are created. Releases upload the committed screenshots, and the App Store workflow replaces them on a version already in review.
- Releases are cut automatically from
mainwith semantic-release, so use Conventional Commits. Each release:- signs and notarizes the DMG;
- attaches the dSYMs of the direct download and the App Store build to the GitHub release as
ishare-<version>-dSYMs.zipandishare-<version>-AppStore-dSYMs.zip(the App Store export also uploads its symbols to App Store Connect); - updates the Sparkle appcast;
- uploads the App Store build to App Store Connect and runs the release checklist.
- Submitting for review is decoupled from releases: the App Store Sync workflow runs after every release and every three hours. It always submits the newest processed release with the combined notes of every release since the live version, superseding an unsubmitted, rejected or still queued version (a submission waiting for review is withdrawn first, and kept until the newer build has finished processing); reviews that have started and approved versions awaiting release are never interrupted, and the job summary notes the pending release instead. It opens an "App Store rejected " issue when a rejection has no newer release yet; the issue closes itself once that version is approved or superseded.
- Dependabot opens weekly, grouped pull requests against
devfor GitHub Actions, the Go tools, the website and fastlane; minor and patch updates are squash-merged automatically once the required checks pass. Swift packages are declared inproject.ymlwith up-to-next-major requirements and no committedPackage.resolved, so every build already resolves their newest minor and patch versions; major versions are raised inproject.ymlby hand. - The developer documentation is a DocC catalog in
ishare/ishare.doccwith articles about the ISCU format and theUploaderprotocol. The Website workflow builds it and publishes it at /docs/documentation/ishare/; to build it locally, build the app withxcodebuild build -scheme GitHub -destination generic/platform=macOS -derivedDataPath build/docs CODE_SIGNING_ALLOWED=NO "OTHER_SWIFT_FLAGS=\$(inherited) -emit-symbol-graph -emit-symbol-graph-dir $PWD/build/raw-symbol-graphs -symbol-graph-minimum-access-level internal"(createbuild/raw-symbol-graphsfirst), keep only the upload types withgo run ./tools/cmd/ishare-tools docc-symbols build/raw-symbol-graphs build/symbol-graphs, and runxcrun docc preview ishare/ishare.docc --additional-symbol-graph-dir build/symbol-graphs. Write documentation in the catalog's articles and extension files, not as comments in the Swift sources. - Translations of the app (
ishare/Localizable.xcstrings) and of the App Store listing (fastlane/metadata/Metadata.xcstrings) are managed on Crowdin. Its pull requests are merged automatically, and every change to either catalog onmainis uploaded back to Crowdin, sources and translations, by the Crowdin upload workflow.
- Inna Strazhnik for the original app icon
Released under GPL-3.0 by @castdrian.




