Legal

Privacy Policy

Effective 25 July 2026

SwiftX has no account, no backend and no telemetry. Your captures stay on your Mac unless you set up a destination to send them to — and then they go straight there, never through us.

What this policy covers

SwiftX is a native macOS screen capture app developed in the open by the SwiftX project ("SwiftX", "the project", "we"). This policy covers the SwiftX app for macOS and this website. It explains what the app does with your data, what leaves your machine and where it goes, and what the people who write SwiftX can and cannot see.

SwiftX is free software licensed under the GNU General Public License v3. There is no SwiftX account, no SwiftX server, no paid tier and no company behind it collecting anything.

What we do not collect

  • No account. There is no sign-up, no login and no SwiftX user identity. Nothing about you is registered anywhere.
  • No backend. The project runs no servers that receive your captures, recordings, files, settings or metadata.
  • No telemetry or analytics. The app sends no usage statistics, crash reports, device identifiers or diagnostics — not to us, not to anyone.
  • No update pings. The app does not phone home to check for new versions.
  • No advertising, profiling or sale of data. There is nothing to sell, because nothing reaches us.

That is a property of how the app is built rather than a promise you have to take on trust. The source is public at github.com/RetroHazard/SwiftX, and the network calls SwiftX makes are the ones described below — the destinations you configure, and nothing else.

What SwiftX stores on your Mac

Everything the app keeps, it keeps locally, in your own user account:

  • Captures and recordings — written to ~/Pictures/SwiftX by default, or to whichever folder you choose.
  • History — a History.db SQLite file in ~/Library/Application Support/SwiftX recording each task's file name, path, date, type, destination host and resulting URLs.
  • Settings — JSON files in the same folder holding your hotkeys, capture preferences, workflows, watched folders, image-effect presets and destination configuration.
  • Logs — a local troubleshooting log. It is written for you to read; it is never transmitted.
  • Credentials — API keys, upload tokens and OAuth access and refresh tokens live in the macOS Keychain, not in the JSON settings.

All of it is yours. Delete those folders and it is gone, because nothing is mirrored anywhere else.

macOS permissions the app asks for

macOS grants these, not us, and you can withdraw any of them at any time in System Settings → Privacy & Security:

  • Screen Recording — required by ScreenCaptureKit for every screenshot and screen recording. Without it the app cannot capture anything.
  • Accessibility — used for window snapping, scrolling capture and the window tools, which need to read and move window geometry.
  • Microphone — requested only if you turn on "Record microphone" for a screen recording. Audio is written into that recording's file and nowhere else.
  • Files and folders — to write captures to the folder you pick and to watch any folders you configure.

SwiftX runs outside the App Sandbox because it launches helper binaries such as ffmpeg and the shell that runs your custom Actions. It ships under the macOS hardened runtime with no entitlement exceptions.

Uploads go where you send them

SwiftX uploads nothing by default. When you configure a destination, the file is transferred directly from your Mac to that destination. It does not pass through project infrastructure at any point, and the project keeps no copy, no log and no record of it.

The destinations you can choose from include:

  • Your own storage — Amazon S3, Backblaze B2, Azure Blob and S3-compatible endpoints, using credentials you supply.
  • Your own servers — Nextcloud, ownCloud, Seafile and similar self-hosted destinations.
  • Third-party hosts — image, file and video hosts, and any service reachable through a custom uploader (.sxcu) definition.
  • Connected accounts — Google Drive, YouTube and OneDrive, covered in their own sections below.
  • URL shorteners — when you shorten a link, the URL (not the file) is sent to the shortener you picked.
  • Share links — the "share" actions open your browser at a third-party site with the URL as a parameter. Nothing is uploaded by that action; your browser makes the request.

Once a file reaches a destination it is governed by that provider's privacy policy and terms, not by this one. Choose destinations you trust, and remember that a public image host means a publicly reachable URL.

Google user data (Google Drive and YouTube)

Connecting a Google destination is optional and inert until you click Connect. Sign-in happens in your own browser, against Google's own consent screen, using OAuth 2.0 with PKCE and a loopback redirect to http://127.0.0.1. SwiftX never sees or handles your Google password.

Scopes requested. SwiftX asks for the narrowest scope that lets the feature work:

  • https://www.googleapis.com/auth/drive.file — per-file access to Google Drive, limited to files SwiftX itself creates. It gives SwiftX no ability to list, open, modify or delete anything else in your Drive.
  • https://www.googleapis.com/auth/youtube.upload — permission to upload a video to your own channel. Uploads are created as unlisted. It grants no access to your account details, comments, subscribers, playlists or analytics.

How Google user data is accessed, used, stored and shared:

  • Accessed — only when you run an upload. SwiftX uses the token to create the file you asked it to create and, for Drive, to set the sharing permission that makes the returned link usable.
  • Used — solely to deliver that upload and hand you back its link. For no other purpose, and never to build a profile of you.
  • Stored — the OAuth access and refresh tokens are stored in the macOS Keychain on your own Mac. The resulting file ID and link are written to your local history. No Google user data is stored on any system operated by the project, because the project operates none.
  • Shared — with nobody. SwiftX transfers no Google user data to any third party, uses none of it for advertising, sells none of it, and uses none of it to develop, improve or train generalized AI or machine-learning models. Humans do not read it; no one on the project can, as it never leaves your machine.
  • Deleted — disconnect the account in SwiftX to erase its tokens from the Keychain immediately, then revoke the grant at Google as below.
Limited Use disclosure

SwiftX's use and transfer of information received from Google APIs to any other app will adhere to the Google API Services User Data Policy, including the Limited Use requirements.

You can review or revoke SwiftX's access to your Google account at any time at myaccount.google.com/permissions. Revoking there stops all further access even if the app is still installed.

Microsoft account data (OneDrive)

OneDrive works the same way and is equally optional. Sign-in happens in your browser against Microsoft's own consent screen, using OAuth 2.0 with PKCE and a loopback redirect to http://127.0.0.1. SwiftX is registered as a public client and never sees your Microsoft password.

  • Files.ReadWrite — the Microsoft Graph permission required to write a file into your OneDrive and create a share link for it. SwiftX uses it only to upload the file you asked it to upload and to create that link. It does not browse, index, read or delete your other files.
  • offline_access — returns a refresh token so you do not have to sign in again for every upload.

Access, use, storage and sharing follow the same rules as the Google section: tokens in your Keychain, uploads direct from your Mac to OneDrive, nothing stored by the project, nothing shared with anyone, and no use for advertising or model training.

Revoke SwiftX's access at account.live.com/consent/Manage for a personal Microsoft account, or at myapplications.microsoft.com for a work or school account.

Optional AI image analysis

SwiftX can send a capture to an AI endpoint to describe it or pull text out of it. The feature is dormant until you enter an API key and pick a model, and the endpoint is whichever OpenAI-compatible base URL you configure — a commercial provider, or a model you host yourself.

When you run an analysis, the image and your prompt go from your Mac straight to that provider. What they retain, log or train on is governed by their policy, so read it before pointing SwiftX at them — especially if your captures contain anything confidential. Your API key is kept in the Keychain. Leave it empty and no image is ever sent.

What never leaves the device

  • Text recognition (OCR) runs through Apple's Vision framework, entirely on-device. Grabbed text goes to your clipboard, not to a server.
  • Annotation, image effects, resizing, colour picking, QR codes, hashing and thumbnails are all local computation.
  • Window and screen enumeration happens through ScreenCaptureKit and stays on the Mac.
  • The browser extension bridge hands an image or URL from your browser to SwiftX over standard input on your own machine. The bridge itself makes no web request.

None of these features opens a network connection.

Security

  • Secrets are held in the macOS Keychain rather than in plain-text configuration files.
  • Every OAuth flow uses PKCE with a loopback redirect, so no authorization code passes through a third-party redirect service.
  • Uploads use HTTPS wherever the destination offers it. If you point a custom uploader at a plain-text endpoint, that is your decision to make.
  • Release builds are signed with an Apple Developer ID certificate and notarized by Apple, and the notarization ticket is stapled to the disk image — so macOS can verify the build is genuine and unaltered even with no network connection.
  • They run under the macOS hardened runtime with no entitlement exceptions, so every protection it offers — library validation, no unsigned executable memory, no debugger attach — stays at its strictest setting.
  • Releases are built and signed by a public automated workflow from tagged source in the repository, not assembled by hand on a maintainer's machine. What the release contains is what the public commit says it contains.

No system is perfect. If you believe you have found a vulnerability, report it through the repository rather than a public post where the details would be exposed.

Children

SwiftX is a tool for developers and other professionals and is not directed at children under 13 — or under 16 in the EEA and the UK. We knowingly collect no personal information from anyone, children included, because we collect none at all.

Keeping and deleting your data

Because everything is local, deletion is entirely in your hands:

  • Captures — delete the files from your screenshots folder.
  • History — clear entries in the History window, or delete ~/Library/Application Support/SwiftX/History.db.
  • Settings and credentials — delete the ~/Library/Application Support/SwiftX folder, and disconnect each connected account so its Keychain entry is removed.
  • Connected accounts — disconnect in SwiftX, then revoke the grant with Google or Microsoft using the links above.
  • Files you have already uploaded — those live at the destination. Remove them there.

We cannot delete anything on your behalf, because we hold nothing to delete.

GDPR, CCPA and similar laws

Privacy laws such as the GDPR and the CCPA give you rights over personal data an organisation holds about you: access, correction, deletion, portability, objection, and the right not to have it sold. Those rights are exercised against whoever holds the data.

The SwiftX project holds none. It is not a controller or processor of your captures — they never reach it — and it sells nothing. Where you have connected a Google or Microsoft account, those companies are the controllers of what sits in your account there, and their policies and request channels apply to it. The same is true of any other host you upload to.

This website

  • The site is a static export hosted on GitHub Pages. GitHub serves the files and may log requests as part of operating its network — see the GitHub Privacy Statement.
  • There are no analytics, no tracking pixels, no advertising and no third-party embeds.
  • Fonts are served from this origin, so loading a page contacts no font CDN.
  • The only browser storage is a swiftx-theme key in localStorage remembering your light or dark choice. It is not a cookie, carries no identifier, and never leaves your browser.

Changes to this policy

If SwiftX gains a feature that changes what leaves your machine, this page changes with it and the effective date at the top moves. Every revision is in public version control, so you can see exactly what changed and when, and material changes are called out in the release notes for the version that introduces them.

Contact

Questions about this policy, or about how SwiftX handles data, belong on the issue tracker: github.com/RetroHazard/SwiftX/issues. That is the project's contact channel. It is public, so keep credentials, tokens and personal details out of anything you post there.