diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 95137f05..b3290eb0 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -105,4 +105,7 @@ jobs:
tag: ${{ env.VERSION_NUMBER }}-${{ env.BUILD_NUMBER }}
prerelease: true
bodyFile: CHANGELOG.md
+ update_altstore:
+ needs: ['release']
+ uses: ./.github/workflows/update-altstore.yml
diff --git a/.github/workflows/update-altstore.yml b/.github/workflows/update-altstore.yml
new file mode 100644
index 00000000..316132e8
--- /dev/null
+++ b/.github/workflows/update-altstore.yml
@@ -0,0 +1,55 @@
+name: Update AltStore source
+on:
+ workflow_dispatch:
+ workflow_call:
+
+jobs:
+ update_altstore:
+ name: Update AltStore source
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: main
+ - name: Get version info from latest release
+ run: |
+ TAG=$(gh release view --json tagName --jq '.tagName')
+ echo "TAG=${TAG}" >> $GITHUB_ENV
+ echo "VERSION_NUMBER=${TAG%-*}" >> $GITHUB_ENV
+ echo "BUILD_NUMBER=${TAG##*-}" >> $GITHUB_ENV
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Get IPA size from release
+ run: |
+ SIZE=$(gh release view "${{ env.TAG }}" --json assets --jq '.assets[] | select(.name == "Yattee.ipa") | .size')
+ echo "IPA_SIZE=${SIZE:-0}" >> $GITHUB_ENV
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Update altstore-source.json
+ run: |
+ DATE=$(date -u +"%Y-%m-%dT%H:%M:%S+00:00")
+ jq --arg version "${{ env.VERSION_NUMBER }}" \
+ --arg build "${{ env.BUILD_NUMBER }}" \
+ --arg date "$DATE" \
+ --arg url "https://github.com/yattee/yattee/releases/download/${{ env.TAG }}/Yattee.ipa" \
+ --argjson size "${{ env.IPA_SIZE }}" \
+ '.apps[0].versions = [{
+ version: $version,
+ buildVersion: $build,
+ date: $date,
+ localizedDescription: "",
+ downloadURL: $url,
+ size: $size,
+ minOSVersion: "18.0"
+ }] + [.apps[0].versions[] | select(.version != $version or .buildVersion != $build)]' \
+ altstore-source.json > altstore-source.tmp && mv altstore-source.tmp altstore-source.json
+ - name: Commit and push
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "github-actions[bot]@users.noreply.github.com"
+ git add altstore-source.json
+ git diff --cached --quiet && echo "No changes to commit" && exit 0
+ git commit -m "Update AltStore source for ${{ env.VERSION_NUMBER }} (${{ env.BUILD_NUMBER }})"
+ git push
diff --git a/README.md b/README.md
index 5c0e6945..2dec6d07 100644
--- a/README.md
+++ b/README.md
@@ -1,28 +1,37 @@
-
-

+
Yattee
-
Privacy-focused video player for iOS, macOS, and tvOS
+
Privacy-focused video player for iPhone, iPad, Mac, and Apple TV
[](https://www.gnu.org/licenses/agpl-3.0.en.html)
[](https://github.com/yattee/yattee/issues)
[](https://github.com/yattee/yattee/pulls)
-[](https://matrix.to/#/#Yattee:matrix.org)
[](https://yattee.stream/discord)
-
-
+## Install
+
+
+
+
+
+[Join the TestFlight beta](https://yattee.stream/beta2)
+
+
+
+
+
## Features
**Playback**
-- 4K video with custom MPV-based player
+- 4K video with custom MPV-based player (H.264, H.265, VP9, AV1)
- Picture in Picture, background audio, fullscreen
- Playback queue, history, resume from last position
- Chapter navigation, playback speed, subtitles and captions
- Gesture controls (seek, volume, brightness)
+- Seek preview with storyboards
**Content Sources**
- YouTube via Invidious, Piped, or self-hosted Yattee Server
@@ -40,19 +49,21 @@
**Library**
- Subscriptions with per-channel notifications
-- Bookmarks, playlists, watch history
-- Search across all configured sources
+- Bookmarks with tags and notes, playlists, watch history
+- Unified search across all configured sources
- Import/export subscriptions (JSON, CSV, OPML)
**Downloads & Sync**
-- Offline video and audio downloads
-- iCloud sync for bookmarks, subscriptions, and history across devices
+- Offline video and audio downloads with quality selection
+- iCloud sync for bookmarks, subscriptions, history, and settings across devices
- Handoff continuity between iPhone, iPad, Mac, and Apple TV
-**Platforms**
+**Apple Ecosystem**
- iOS 18+ / macOS 15+ / tvOS 18+
- Native SwiftUI on every platform
-- Customizable home layout, accent colors, and player controls
+- Customizable home layout, accent colors, player controls, and app icon
+- Clipboard URL detection and deep linking (`yattee://`)
+- Remote control between devices on your network
## Yattee Server
@@ -83,6 +94,8 @@ Check out the [yattee-server](https://github.com/yattee/yattee-server) repositor
Browse the [issues](https://github.com/yattee/yattee/issues) list or open a new one to discuss your idea. Every contribution is welcome.
+See [AGENTS.md](AGENTS.md) for developer setup and project architecture.
+
Join [Discord](https://yattee.stream/discord) or the [Matrix channel](https://matrix.to/#/#yattee:matrix.org) if you need advice or want to discuss the project.
## Translations
diff --git a/altstore-source.json b/altstore-source.json
new file mode 100644
index 00000000..9f0fca45
--- /dev/null
+++ b/altstore-source.json
@@ -0,0 +1,42 @@
+{
+ "name": "Yattee",
+ "subtitle": "Privacy-focused video player",
+ "description": "Yattee is a privacy-focused video player for iPhone, iPad, Mac, and Apple TV. Watch YouTube via Invidious, Piped, or self-hosted Yattee Server. Supports PeerTube, local files, SMB shares, and WebDAV. Features include 4K playback, Picture in Picture, background audio, SponsorBlock, DeArrow, playback queue, subscriptions, bookmarks, downloads, and iCloud sync.",
+ "iconURL": "https://raw.githubusercontent.com/yattee/yattee/main/Assets/yattee-icon-512.png",
+ "headerURL": "",
+ "website": "https://github.com/yattee/yattee",
+ "tintColor": "#5B8DF5",
+ "apps": [
+ {
+ "name": "Yattee",
+ "bundleIdentifier": "stream.yattee.app",
+ "developerName": "Yattee",
+ "subtitle": "Privacy-focused video player",
+ "localizedDescription": "Yattee is a privacy-focused video player for iPhone, iPad, Mac, and Apple TV.\n\nPlayback\n- 4K video with custom MPV-based player (H.264, H.265, VP9, AV1)\n- Picture in Picture, background audio, fullscreen\n- Playback queue, history, resume from last position\n- Chapter navigation, playback speed, subtitles and captions\n- Gesture controls (seek, volume, brightness)\n- Seek preview with storyboards\n\nContent Sources\n- YouTube via Invidious, Piped, or self-hosted Yattee Server\n- PeerTube instances (federated video)\n- Local files, SMB network shares, WebDAV servers\n\nIntegrations\n- SponsorBlock (configurable skip categories)\n- DeArrow (crowdsourced titles and thumbnails)\n- Return YouTube Dislike\n\nLibrary\n- Subscriptions with per-channel notifications\n- Bookmarks with tags and notes, playlists, watch history\n- Unified search across all configured sources\n- Import/export subscriptions (JSON, CSV, OPML)\n\nDownloads & Sync\n- Offline video and audio downloads with quality selection\n- iCloud sync for bookmarks, subscriptions, history, and settings across devices\n- Handoff continuity between iPhone, iPad, Mac, and Apple TV\n\nApple Ecosystem\n- Customizable home layout, accent colors, player controls, and app icon\n- Clipboard URL detection and deep linking (yattee://)\n- Remote control between devices on your network",
+ "iconURL": "https://raw.githubusercontent.com/yattee/yattee/main/Assets/yattee-icon-512.png",
+ "tintColor": "#5B8DF5",
+ "category": "entertainment",
+ "screenshots": [],
+ "versions": [
+ {
+ "version": "2.0.0",
+ "buildVersion": "250",
+ "date": "2026-02-09T00:00:00-00:00",
+ "localizedDescription": "Yattee v2 rewrite",
+ "downloadURL": "https://github.com/yattee/yattee/releases/download/2.0.0-250/Yattee.ipa",
+ "size": 0,
+ "minOSVersion": "18.0"
+ }
+ ],
+ "appPermissions": {
+ "entitlements": [
+ "com.apple.developer.icloud-container-identifiers",
+ "com.apple.developer.icloud-services",
+ "com.apple.developer.ubiquity-kvstore-identifier",
+ "aps-environment"
+ ]
+ }
+ }
+ ],
+ "news": []
+}
diff --git a/assets/yattee-icon-512.png b/assets/yattee-icon-512.png
new file mode 100644
index 00000000..deb03856
Binary files /dev/null and b/assets/yattee-icon-512.png differ
diff --git a/assets/yattee-logo.png b/assets/yattee-logo.png
new file mode 100644
index 00000000..4519fc43
Binary files /dev/null and b/assets/yattee-logo.png differ