Saffsanity/sill

Any window from your Mac, live on your iPhone or iPad. Touch, Apple Pencil, trackpad and keys. Free, open source, no servers.

Swift

34

585 commits

updated Oct 11, 2026

See the code

See what people are saying

SourceMessageScoreDate

Sill (Apache 2.0): stream any macOS window to iPhone or iPad with touch, Pencil and keyboard, free, peer to peer, no servers (r/opensource)

Hello [r/opensource](r/opensource)! I am really excited to share a project that is near and dear to my heart: [Sill](https://apps.apple.com/app/id6816359860), a free and open source (Apache 2.0) pair of apps, now on the App Store and at getsill.app: any window from your Mac, on your iPhone or iPad,…

49

Oct 11, 2026

README

Sill

Any window from your Mac, on your iPhone and iPad.

Sill shows a window from your Mac, or the whole desktop, on your iPhone or iPad. You use it there with touch, a trackpad, a keyboard or Apple Pencil. Sill for Mac captures the window, encodes it as HEVC video and sends it to the Sill app on your device. Your taps, clicks, scrolls and keys go back to your Mac. Your Mac and your device connect on the same network, over a USB cable, with Direct Wireless Connection when they share no network, or through your own VPN, such as Tailscale, with Remote Access. There is no account and no server in between.

getsill.app · Download for Mac · Support · Privacy · Terms

CI

Download on the App Store

Sill for Mac is a free, notarized download from getsill.app. Sill for iPhone and iPad is free on the App Store, and you can also build it from source (below).

Screenshots

These are the iPad screenshots from the App Store; on iPhone and iPhone Duo, Sill has layouts of its own.

"Your Mac, on your iPad." The Mac's Weather app on an iPad held sideways, under Sill's bar of window thumbnails and buttons."Laptop mode." An iPad held upright, with the Mac's Clock app on top and Sill's bar, a row of keys and a trackpad below it."Sharp and smooth." Sill's Settings panel on an iPad held upright, with the Mac's Quality, Resolution and Frame Rate settings.
"Pair once. Private always." Sill's Connect to a Mac screen on an iPad, with a Mac listed as Wired and Add a Mac below it."Launch any Mac app." Sill's Apps list on an iPad held sideways, with a search field, the apps open now and every app installed on the Mac."Every window, one tap away." On an iPad held sideways, a window's thumbnail held in Sill's bar shows Close, Minimize and Full Screen.

Requirements

  • A Mac with Apple silicon, on macOS 14 or later.
  • An iPhone or iPad with iOS 17 or iPadOS 17 or later.
  • On your Mac, Sill asks for Screen Recording, to show your windows, and Accessibility, to click, scroll and type for you and to move and size the window it shows. On macOS 15 or later, also allow Local Network. On your iPhone or iPad, Sill asks for Local Network, to find your Mac, and for the camera when you scan your Mac's pairing code (you can type the code instead).
  • Your Mac and your device on the same network, joined by a USB cable, or near each other with Direct Wireless Connection on. Away from home, your own VPN, such as Tailscale, with Remote Access on.

How it works

  • Sill for Mac lives in the menu bar. When your device picks a window, or the whole desktop, Sill captures it with ScreenCaptureKit and encodes it as HEVC with VideoToolbox, on the hardware video encoder in your Mac (or, while that is busy, in software). It captures nothing while no device is connected.
  • The picture goes over an encrypted connection (TLS 1.3) straight to the Sill app on your iPhone or iPad, which decodes and shows it. When the encoder or the link falls behind, Sill drops frames rather than queue them, so the picture stays current.
  • Your input goes back the same way: taps and clicks, scrolls with momentum, the on-screen trackpad, keys and typed text, and Apple Pencil as the pointer. Sill for Mac turns it into mouse and keyboard events, which needs Accessibility. Three fingers swipe and pinch as on a Mac's trackpad: Mission Control, App Exposé, the Spaces, Apps and Show Desktop, through the keyboard shortcuts your Mac has for them.
  • On iPhone Duo, Sill follows the hinge: open it flat and your Mac fills the inner display; half open, the picture is above the fold with a trackpad and keys below; closed, Sill runs on the cover display. Nothing you touch sits on the fold.
  • The menus of the app you use reach your device too: in the iPad's own menu bar on iPadOS 26 or later, and behind the Menus button in Sill's bar. Sill for Mac reads each menu from the app as you open it and chooses the item you pick, through Accessibility. When someone moves the mouse at your Mac, your device shows the pointer where it is.
  • Nearby, your device finds your Mac with Bonjour on your local network. Over a USB cable, your Mac shows as Wired and the connection uses the cable. With no shared network, Direct Wireless Connection (off by default) connects over peer-to-peer Wi-Fi, the way AirDrop does.
  • Pairing: you pair each iPhone or iPad with your Mac once. Tap your Mac on the device, and your Mac shows a code: scan it, or type its 12 digits. Over a USB cable the device pairs by itself. From then on each end knows the other's key, and every connection, nearby or away, is pinned to those keys. In Sill's Settings on your Mac, Devices lists the devices you paired, and you can remove any of them there.
  • Away from home, Remote Access (off by default) lets the devices you paired reach your Mac through your own VPN or a port you forward on your router; a device learns how the next time it connects at home with Remote Access on. A device away from home gets a quality of its own, Low at Standard resolution until you pick another there or in Sill's settings, so a slow connection never starts at your home quality; your home quality comes back as soon as a device at home connects. When your device comes home and your network lists your Mac, the session moves to your network by itself.
  • When the link can't keep up, Sill for Mac notices that it is holding frames back and tells your device, which says so over the picture and, in its Settings, offers a quality the link can carry.
  • The virtual display (off by default) moves a window you stream onto a display of its own on your Mac, so it keeps updating when other windows cover it. It uses a private macOS API, which is one reason Sill for Mac comes from the website and not from the Mac App Store.

Good to know: Sill shows one window, or the whole desktop, at a time, and it does not play sound from your Mac. Only the iPhones and iPads you paired can connect, unless you turn off Require pairing in Settings › Devices; then any device on your network can, still encrypted. Pairing at home came with Sill for Mac 0.4.0 and Sill for iPhone and iPad 0.5 (2), and each needs the other: the iPhone and iPad app shows an older Sill for Mac as "Update Sill", and an older iPhone and iPad app can't connect to Sill for Mac 0.4.0 or later at home. Since 0.5.1 the two apps share one version number for each release. With Sill for Mac 0.3.1 or earlier, connections on your local network, over the cable and over Direct Wireless Connection are not encrypted, and anything that reaches your Mac there can connect without pairing: update it.

Tips

Sill is free, with no ads, no tracking and no subscription. If it is useful to you, a tip through GitHub Sponsors helps pay for the developer account. A tip unlocks nothing: every feature is free.

Building from source

You need a Mac with Xcode (Sill is built with Xcode 27; the iPhone and iPad app needs Xcode 27.1 or later, for the iPhone Duo's hinge and fold), selected as the active developer directory, with its license accepted.

Sill for Mac, from the repository's folder:

Scripts/make-app.sh --install --open

This builds Sill.app with SwiftPM, signs it with your Apple Development identity, replaces /Applications/Sill.app and opens it. If that was the Sill for Mac you downloaded, grant Screen Recording and Accessibility again and pair each device again: the download keeps its key and paired devices in the data-protection keychain, which only a Developer ID build with the project's provisioning profile reads, and a build of your own keeps them in your login keychain. Without --install it only builds .build/Sill.app. With no Apple Development identity it signs ad hoc, and then Screen Recording and Accessibility have to be granted again after every build.

For work on the host itself, swift run -c release SillHost runs the same host on the command line, with one difference: unless you add --pairing, its home door is plain and open, with no pairing and no encryption, and any device on your network can connect to it, so run it only while developing. The App Store's Sill for iPhone and iPad never dials such a door ("Update Sill"); a Debug build from this repository can (docs/DEVELOPMENT.md, Pairing at home). With --synthetic it streams a test pattern with no Screen Recording needed.

The iPhone and iPad app:

  1. Open iOSClient/Sill.xcodeproj.
  2. In the Sill target's Signing & Capabilities, pick your team, and change the bundle identifier me.saffer.sill to one of your own.
  3. Run it on an iPhone or iPad on the same network as your Mac, and tap your Mac. The first time, a Sill for Mac built from this repository asks you to pair: scan the code it shows, or connect the device with a USB cable.

docs/DEVELOPMENT.md has the rest: every command-line flag, the test tools and the simulator harness, permissions and how to reset them, Remote Access, troubleshooting and releases.

Contributing

Issues are welcome: bug reports, questions and ideas. For a pull request, keep to the conventions and decisions in CLAUDE.md: Swift and Apple frameworks only, no third-party dependencies, nothing that needs a server, and latency before picture quality. Open an issue before starting anything large. Before a pull request, Tests/checks/run-all.sh runs the same pure checks as CI, in about five minutes and with no device. Contributions are accepted under the project's license. Please report a security problem privately, as SECURITY.md says, not in a public issue.

License

Sill is licensed under the Apache License 2.0. Copyright 2026 Noah Saffer.

apple-pencil
hevc
ios
ipad
ipados
iphone
iphone-duo
macos
menu-bar
remote-desktop
screencapturekit
screen-sharing
swift
swiftui
tailscale
videotoolbox

Saffsanity/sill

Any window from your Mac, live on your iPhone or iPad. Touch, Apple Pencil, trackpad and keys. Free, open source, no servers.

Swift

34

585 commits

updated Oct 11, 2026

See the code

See what people are saying

SourceMessageScoreDate

Sill (Apache 2.0): stream any macOS window to iPhone or iPad with touch, Pencil and keyboard, free, peer to peer, no servers (r/opensource)

Hello [r/opensource](r/opensource)! I am really excited to share a project that is near and dear to my heart: [Sill](https://apps.apple.com/app/id6816359860), a free and open source (Apache 2.0) pair of apps, now on the App Store and at getsill.app: any window from your Mac, on your iPhone or iPad,…

49

Oct 11, 2026

README

Sill

Any window from your Mac, on your iPhone and iPad.

Sill shows a window from your Mac, or the whole desktop, on your iPhone or iPad. You use it there with touch, a trackpad, a keyboard or Apple Pencil. Sill for Mac captures the window, encodes it as HEVC video and sends it to the Sill app on your device. Your taps, clicks, scrolls and keys go back to your Mac. Your Mac and your device connect on the same network, over a USB cable, with Direct Wireless Connection when they share no network, or through your own VPN, such as Tailscale, with Remote Access. There is no account and no server in between.

getsill.app · Download for Mac · Support · Privacy · Terms

CI

Download on the App Store

Sill for Mac is a free, notarized download from getsill.app. Sill for iPhone and iPad is free on the App Store, and you can also build it from source (below).

Screenshots

These are the iPad screenshots from the App Store; on iPhone and iPhone Duo, Sill has layouts of its own.

"Your Mac, on your iPad." The Mac's Weather app on an iPad held sideways, under Sill's bar of window thumbnails and buttons."Laptop mode." An iPad held upright, with the Mac's Clock app on top and Sill's bar, a row of keys and a trackpad below it."Sharp and smooth." Sill's Settings panel on an iPad held upright, with the Mac's Quality, Resolution and Frame Rate settings.
"Pair once. Private always." Sill's Connect to a Mac screen on an iPad, with a Mac listed as Wired and Add a Mac below it."Launch any Mac app." Sill's Apps list on an iPad held sideways, with a search field, the apps open now and every app installed on the Mac."Every window, one tap away." On an iPad held sideways, a window's thumbnail held in Sill's bar shows Close, Minimize and Full Screen.

Requirements

  • A Mac with Apple silicon, on macOS 14 or later.
  • An iPhone or iPad with iOS 17 or iPadOS 17 or later.
  • On your Mac, Sill asks for Screen Recording, to show your windows, and Accessibility, to click, scroll and type for you and to move and size the window it shows. On macOS 15 or later, also allow Local Network. On your iPhone or iPad, Sill asks for Local Network, to find your Mac, and for the camera when you scan your Mac's pairing code (you can type the code instead).
  • Your Mac and your device on the same network, joined by a USB cable, or near each other with Direct Wireless Connection on. Away from home, your own VPN, such as Tailscale, with Remote Access on.

How it works

  • Sill for Mac lives in the menu bar. When your device picks a window, or the whole desktop, Sill captures it with ScreenCaptureKit and encodes it as HEVC with VideoToolbox, on the hardware video encoder in your Mac (or, while that is busy, in software). It captures nothing while no device is connected.
  • The picture goes over an encrypted connection (TLS 1.3) straight to the Sill app on your iPhone or iPad, which decodes and shows it. When the encoder or the link falls behind, Sill drops frames rather than queue them, so the picture stays current.
  • Your input goes back the same way: taps and clicks, scrolls with momentum, the on-screen trackpad, keys and typed text, and Apple Pencil as the pointer. Sill for Mac turns it into mouse and keyboard events, which needs Accessibility. Three fingers swipe and pinch as on a Mac's trackpad: Mission Control, App Exposé, the Spaces, Apps and Show Desktop, through the keyboard shortcuts your Mac has for them.
  • On iPhone Duo, Sill follows the hinge: open it flat and your Mac fills the inner display; half open, the picture is above the fold with a trackpad and keys below; closed, Sill runs on the cover display. Nothing you touch sits on the fold.
  • The menus of the app you use reach your device too: in the iPad's own menu bar on iPadOS 26 or later, and behind the Menus button in Sill's bar. Sill for Mac reads each menu from the app as you open it and chooses the item you pick, through Accessibility. When someone moves the mouse at your Mac, your device shows the pointer where it is.
  • Nearby, your device finds your Mac with Bonjour on your local network. Over a USB cable, your Mac shows as Wired and the connection uses the cable. With no shared network, Direct Wireless Connection (off by default) connects over peer-to-peer Wi-Fi, the way AirDrop does.
  • Pairing: you pair each iPhone or iPad with your Mac once. Tap your Mac on the device, and your Mac shows a code: scan it, or type its 12 digits. Over a USB cable the device pairs by itself. From then on each end knows the other's key, and every connection, nearby or away, is pinned to those keys. In Sill's Settings on your Mac, Devices lists the devices you paired, and you can remove any of them there.
  • Away from home, Remote Access (off by default) lets the devices you paired reach your Mac through your own VPN or a port you forward on your router; a device learns how the next time it connects at home with Remote Access on. A device away from home gets a quality of its own, Low at Standard resolution until you pick another there or in Sill's settings, so a slow connection never starts at your home quality; your home quality comes back as soon as a device at home connects. When your device comes home and your network lists your Mac, the session moves to your network by itself.
  • When the link can't keep up, Sill for Mac notices that it is holding frames back and tells your device, which says so over the picture and, in its Settings, offers a quality the link can carry.
  • The virtual display (off by default) moves a window you stream onto a display of its own on your Mac, so it keeps updating when other windows cover it. It uses a private macOS API, which is one reason Sill for Mac comes from the website and not from the Mac App Store.

Good to know: Sill shows one window, or the whole desktop, at a time, and it does not play sound from your Mac. Only the iPhones and iPads you paired can connect, unless you turn off Require pairing in Settings › Devices; then any device on your network can, still encrypted. Pairing at home came with Sill for Mac 0.4.0 and Sill for iPhone and iPad 0.5 (2), and each needs the other: the iPhone and iPad app shows an older Sill for Mac as "Update Sill", and an older iPhone and iPad app can't connect to Sill for Mac 0.4.0 or later at home. Since 0.5.1 the two apps share one version number for each release. With Sill for Mac 0.3.1 or earlier, connections on your local network, over the cable and over Direct Wireless Connection are not encrypted, and anything that reaches your Mac there can connect without pairing: update it.

Tips

Sill is free, with no ads, no tracking and no subscription. If it is useful to you, a tip through GitHub Sponsors helps pay for the developer account. A tip unlocks nothing: every feature is free.

Building from source

You need a Mac with Xcode (Sill is built with Xcode 27; the iPhone and iPad app needs Xcode 27.1 or later, for the iPhone Duo's hinge and fold), selected as the active developer directory, with its license accepted.

Sill for Mac, from the repository's folder:

Scripts/make-app.sh --install --open

This builds Sill.app with SwiftPM, signs it with your Apple Development identity, replaces /Applications/Sill.app and opens it. If that was the Sill for Mac you downloaded, grant Screen Recording and Accessibility again and pair each device again: the download keeps its key and paired devices in the data-protection keychain, which only a Developer ID build with the project's provisioning profile reads, and a build of your own keeps them in your login keychain. Without --install it only builds .build/Sill.app. With no Apple Development identity it signs ad hoc, and then Screen Recording and Accessibility have to be granted again after every build.

For work on the host itself, swift run -c release SillHost runs the same host on the command line, with one difference: unless you add --pairing, its home door is plain and open, with no pairing and no encryption, and any device on your network can connect to it, so run it only while developing. The App Store's Sill for iPhone and iPad never dials such a door ("Update Sill"); a Debug build from this repository can (docs/DEVELOPMENT.md, Pairing at home). With --synthetic it streams a test pattern with no Screen Recording needed.

The iPhone and iPad app:

  1. Open iOSClient/Sill.xcodeproj.
  2. In the Sill target's Signing & Capabilities, pick your team, and change the bundle identifier me.saffer.sill to one of your own.
  3. Run it on an iPhone or iPad on the same network as your Mac, and tap your Mac. The first time, a Sill for Mac built from this repository asks you to pair: scan the code it shows, or connect the device with a USB cable.

docs/DEVELOPMENT.md has the rest: every command-line flag, the test tools and the simulator harness, permissions and how to reset them, Remote Access, troubleshooting and releases.

Contributing

Issues are welcome: bug reports, questions and ideas. For a pull request, keep to the conventions and decisions in CLAUDE.md: Swift and Apple frameworks only, no third-party dependencies, nothing that needs a server, and latency before picture quality. Open an issue before starting anything large. Before a pull request, Tests/checks/run-all.sh runs the same pure checks as CI, in about five minutes and with no device. Contributions are accepted under the project's license. Please report a security problem privately, as SECURITY.md says, not in a public issue.

License

Sill is licensed under the Apache License 2.0. Copyright 2026 Noah Saffer.

apple-pencil
hevc
ios
ipad
ipados
iphone
iphone-duo
macos
menu-bar
remote-desktop
screencapturekit
screen-sharing
swift
swiftui
tailscale
videotoolbox