{ "schemaVersion": 2, "updated": "2026-07-12", "note": "Portal app catalog, schema v2. All v2 fields are ADDITIVE so v1 clients keep working. Entries with source 'fdroid' resolve the current APK at install time via the F-Droid API, so they never go stale. Entries with source 'url' use a direct apkUrl (use this for your own custom Portal apps); give them a 'versionCode' (bumped per release) OR a 'versionUrl' — a JSON manifest (e.g. the app's own version.json) with a 'versionCode' field that the store reads live, so a 'releases/latest/download' app stays current with no catalog edit per release. Multi-ABI apps (e.g. VLC) ship separate per-architecture APKs on F-Droid; pin the arm64-v8a build with 'versionCode' since Portal is arm64. New in v2: iconUrl (https PNG; omit to get a monogram tile), author, homepage, submittedBy (community credit), longDescription (detail page), devices (['touch','tv'] — omit when the app runs on every Portal). minSdk drives the compatibility badge: the first-gen Portal/Portal+ and Portal TV are API 28, the 2019/2021 models are API 29.", "categories": [ { "name": "Media & Entertainment", "apps": [ { "name": "VLC", "packageName": "org.videolan.vlc", "source": "fdroid", "fdroidId": "org.videolan.vlc", "versionCode": 13070106, "minSdk": 21, "description": "Plays virtually any video or audio file or network stream.", "longDescription": "The classic do-everything media player. Plays local files, USB drives, and network streams (SMB, NFS, HTTP, DLNA), with wide codec support and no ads or tracking.", "iconUrl": "https://f-droid.org/repo/org.videolan.vlc/en-US/icon.png", "author": "VideoLAN", "homepage": "https://www.videolan.org/vlc/" }, { "name": "Jellyfin (stock)", "packageName": "org.jellyfin.mobile", "source": "fdroid", "fdroidId": "org.jellyfin.mobile", "minSdk": 21, "description": "Official Jellyfin client. On a Portal, install portalfin (below) instead.", "longDescription": "The official Jellyfin Android app. It installs and runs on the Portal, but it's a phone app: it loads the standard Jellyfin web interface in a browser window, the menus fight the device's fixed back and home buttons, the styling matches nothing else on the Portal, and it shows controls for hardware the Portal doesn't have (casting and the like). For a client actually built for the Portal — native screens, a native player, and Portal navigation — install portalfin instead (listed just below). This entry stays for anyone who specifically wants the stock app.", "iconUrl": "https://f-droid.org/repo/org.jellyfin.mobile/en-US/icon.png", "author": "Jellyfin Project", "homepage": "https://jellyfin.org" }, { "name": "portalfin (Jellyfin for Portal)", "packageName": "org.jellyfin.mobile.portalfin", "source": "url", "apkUrl": "https://github.com/luke-hurd/portalfin/releases/latest/download/portalfin.apk", "minSdk": 21, "description": "Jellyfin rebuilt for the Portal — native screens, native player, Portal navigation.", "longDescription": "A Jellyfin client built specifically for the Portal, not a phone app stretched to fit. The browsing experience is native Jetpack Compose talking to your Jellyfin server's REST API directly — no browser window — with a native player that's faster and more reliable on the Portal's modest hardware. Built to the Portal's design language (Material 3, the Inter typeface, Meta blue) and its navigation, so the OSD back button and the home overlay — including the protected area at the top — work properly instead of fighting a web UI's own back behavior. Phone-only features the Portal can't use (casting, battery and power settings) are removed rather than left sitting there broken. Recommended over the stock Jellyfin app for Portal users.", "iconUrl": "https://raw.githubusercontent.com/luke-hurd/portalfin/main/app/src/main/res/drawable-nodpi/ic_launcher_full.png", "author": "luke-hurd", "homepage": "https://github.com/luke-hurd/portalfin", "submittedBy": "luke-hurd" }, { "name": "SmartTube", "packageName": "app.smarttube.fdroid", "source": "fdroid", "fdroidId": "app.smarttube.fdroid", "minSdk": 21, "description": "Ad-free YouTube built for the big screen — ideal for Portal TV.", "longDescription": "A YouTube client designed for TVs and remotes: no ads, SponsorBlock, adjustable speed, and a lean interface. Made for the Portal TV's remote, and works on the touch models too.", "iconUrl": "https://f-droid.org/repo/app.smarttube.fdroid/en-US/icon.png", "author": "yuliskov", "homepage": "https://github.com/yuliskov/SmartTube" }, { "name": "AntennaPod", "packageName": "de.danoeh.antennapod", "source": "fdroid", "fdroidId": "de.danoeh.antennapod", "minSdk": 19, "description": "Full-featured podcast manager and player.", "longDescription": "Subscribe, download, and stream podcasts with queue management, playback speed control, and chapter support. Completely open source.", "iconUrl": "https://f-droid.org/repo/de.danoeh.antennapod/en-US/icon.png", "author": "AntennaPod team", "homepage": "https://antennapod.org" }, { "name": "Transistor", "packageName": "org.y20k.transistor", "source": "fdroid", "fdroidId": "org.y20k.transistor", "minSdk": 25, "description": "Simple internet radio — add stations by stream URL.", "longDescription": "A minimal internet-radio player: search stations or paste a stream URL, then tap to listen. Perfect for an always-on kitchen radio.", "iconUrl": "https://f-droid.org/repo/org.y20k.transistor/en-US/icon.png", "author": "y20k", "homepage": "https://codeberg.org/y20k/transistor" }, { "name": "Snapcast", "packageName": "de.badaix.snapcast", "source": "fdroid", "fdroidId": "de.badaix.snapcast", "minSdk": 21, "description": "Synchronized multi-room audio — play music in perfect sync across Portals.", "longDescription": "The official Snapcast client and player. Point it at a Snapcast (or Music Assistant) server on your network and the Portal becomes a synchronized speaker — every room plays the same audio in sync, Sonos-style. Bundles the native player, needs no Google services, and runs on every Portal. Note: this is the stock app for testing the multi-room setup; an Immortal-native always-on companion is on the roadmap.", "iconUrl": "https://f-droid.org/repo/de.badaix.snapcast/en-US/icon.png", "author": "badaix", "homepage": "https://github.com/badaix/snapcast" } ] }, { "name": "Smart Home & Ambient", "apps": [ { "name": "Home Assistant", "packageName": "io.homeassistant.companion.android.minimal", "source": "fdroid", "fdroidId": "io.homeassistant.companion.android.minimal", "minSdk": 21, "description": "Control your smart home dashboard. No-GMS minimal build.", "longDescription": "The official Home Assistant companion app (minimal build, no Google services required). Pin your dashboards to a Portal on the wall or counter for an always-ready smart-home controller.", "iconUrl": "https://f-droid.org/repo/io.homeassistant.companion.android.minimal/en-US/icon.png", "author": "Home Assistant", "homepage": "https://www.home-assistant.io" }, { "name": "Breezy Weather", "packageName": "org.breezyweather", "source": "fdroid", "fdroidId": "org.breezyweather", "minSdk": 21, "description": "Clean, detailed weather with multiple data sources.", "longDescription": "Beautiful, detailed forecasts — hourly graphs, precipitation, air quality, and alerts — from your choice of providers. Pairs nicely with the photo-frame Portal on a desk.", "iconUrl": "https://f-droid.org/repo/org.breezyweather/en-US/icon.png", "author": "Breezy Weather contributors", "homepage": "https://github.com/breezy-weather/breezy-weather" } ] }, { "name": "Productivity", "apps": [ { "name": "Tasks.org", "packageName": "org.tasks", "source": "fdroid", "fdroidId": "org.tasks", "minSdk": 23, "description": "To-do lists and reminders with optional sync.", "longDescription": "A powerful open-source to-do list with reminders, tags, and optional CalDAV/Google Tasks sync. A family task board for the kitchen Portal.", "iconUrl": "https://f-droid.org/repo/org.tasks/en-US/icon.png", "author": "Alex Baker", "homepage": "https://tasks.org" }, { "name": "Markor", "packageName": "net.gsantner.markor", "source": "fdroid", "fdroidId": "net.gsantner.markor", "minSdk": 18, "description": "Fast, offline notes and to-do in plain text / Markdown.", "longDescription": "Notes, to-dos, and journals stored as plain text and Markdown files on the device — fast, offline, and yours. Good for shared shopping lists.", "iconUrl": "https://f-droid.org/repo/net.gsantner.markor/en-US/icon.png", "author": "Gregor Santner", "homepage": "https://github.com/gsantner/markor" }, { "name": "Feeder", "packageName": "com.nononsenseapps.feeder", "source": "fdroid", "fdroidId": "com.nononsenseapps.feeder", "minSdk": 23, "description": "A clean RSS reader — turn the Portal into a news board.", "longDescription": "Follow any site that publishes a feed. Offline reading, background sync, and a clean reading view that suits the Portal's screen.", "iconUrl": "https://f-droid.org/repo/com.nononsenseapps.feeder/en-US/icon.png", "author": "Jonas Kalderstam", "homepage": "https://github.com/spacecowboy/Feeder" }, { "name": "Fossify Calendar", "packageName": "org.fossify.calendar", "source": "fdroid", "fdroidId": "org.fossify.calendar", "minSdk": 23, "description": "Private, offline calendar and agenda.", "longDescription": "A simple, private calendar with month/week/agenda views, events, and reminders — no account needed. Makes a great family wall calendar.", "iconUrl": "https://f-droid.org/repo/org.fossify.calendar/en-US/icon.png", "author": "Fossify", "homepage": "https://github.com/FossifyOrg/Calendar" } ] }, { "name": "Utilities & Power Tools", "apps": [ { "name": "Aurora Store", "packageName": "com.aurora.store", "source": "fdroid", "fdroidId": "com.aurora.store", "minSdk": 21, "description": "Install Play Store apps anonymously — no Google account or GMS.", "longDescription": "Browse and install Play Store apps without a Google account or Google services. On a first-gen Portal, pair it with Shizuku (set Aurora's installer to Shizuku) so installs work. Note: some modern split-APK apps need Immortal's silent install helper running to install cleanly on any Portal.", "iconUrl": "https://f-droid.org/repo/com.aurora.store/en-US/icon.png", "author": "Aurora OSS", "homepage": "https://auroraoss.com" }, { "name": "Shizuku", "packageName": "moe.shizuku.privileged.api", "source": "url", "apkUrl": "https://github.com/RikkaApps/Shizuku/releases/download/v13.6.0/shizuku-v13.6.0.r1086.2650830c-release.apk", "versionCode": 1086, "minSdk": 23, "description": "Lets apps like Aurora install silently on a Gen-1 Portal.", "longDescription": "Gives selected apps shell-level powers over ADB — the piece that lets Aurora Store install apps silently on a first-gen Portal. After installing, run the kit's --shizuku step to start it, and re-run after a reboot.", "author": "RikkaApps", "homepage": "https://shizuku.rikka.app" }, { "name": "Material Files", "packageName": "me.zhanghai.android.files", "source": "fdroid", "fdroidId": "me.zhanghai.android.files", "minSdk": 21, "description": "A clean, capable file manager.", "longDescription": "Browse device storage, USB drives, and network shares (SMB/FTP/SFTP) with a polished Material interface. Open-source and ad-free.", "iconUrl": "https://f-droid.org/repo/me.zhanghai.android.files/en-US/icon.png", "author": "Hai Zhang", "homepage": "https://github.com/zhanghai/MaterialFiles" }, { "name": "Fossify Gallery", "packageName": "org.fossify.gallery", "source": "fdroid", "fdroidId": "org.fossify.gallery", "minSdk": 23, "description": "Browse local photos and videos, no ads.", "longDescription": "A fast, private gallery for the photos and videos on the device (including USB media) — handy alongside Immortal's photo-frame screensaver.", "iconUrl": "https://f-droid.org/repo/org.fossify.gallery/en-US/icon.png", "author": "Fossify", "homepage": "https://github.com/FossifyOrg/Gallery" }, { "name": "Termux", "packageName": "com.termux", "source": "fdroid", "fdroidId": "com.termux", "minSdk": 24, "description": "A full Linux terminal environment on the device.", "longDescription": "A complete terminal emulator and Linux package environment — ssh, python, git, and hundreds of packages, no root needed. For the tinkerers.", "iconUrl": "https://f-droid.org/repo/com.termux/en-US/icon.png", "author": "Termux", "homepage": "https://termux.dev" } ] }, { "name": "Portal Originals", "apps": [ { "name": "Immortal", "packageName": "com.immortal.launcher", "source": "url", "apkUrl": "https://github.com/starbrightlab/immortal/releases/latest/download/immortal.apk", "minSdk": 24, "description": "The Immortal launcher, screensaver, and app store — the project itself.", "longDescription": "The launcher you're using right now: home screen, photo-frame screensaver with local media support, this app store, and self-update. Community app submissions welcome — see the project page.", "iconUrl": "https://raw.githubusercontent.com/starbrightlab/immortal/main/immortal-icon.png", "author": "Starbright Lab", "homepage": "https://github.com/starbrightlab/immortal", "submittedBy": "starbrightlab" }, { "name": "Portal Calendar", "packageName": "com.portal.calendar", "source": "url", "apkUrl": "https://github.com/thefloppytaco/portal-calendar/releases/download/v2.10/portal-calendar-v2.10.apk", "versionCode": 18, "minSdk": 28, "description": "Turn a Portal into an always-on family calendar and chore board.", "longDescription": "A Skylight-style family hub built for the Portal: multi-calendar sync, two-way Google events, shared lists, meal planning, and a kids' chore board with stars. Designed to live on the wall or counter and stay on all day.", "author": "thefloppytaco", "homepage": "https://github.com/thefloppytaco/portal-calendar", "submittedBy": "thefloppytaco" }, { "name": "HippoMuncher", "packageName": "com.family.hippomuncher", "source": "url", "apkUrl": "https://github.com/veereshai/HippoMuncher/releases/latest/download/HippoMuncher.apk", "versionCode": 1, "minSdk": 28, "description": "Head-tracking arcade game — tilt your head to feed the hungry hippo.", "longDescription": "A hands-free family game made for the Portal's front camera: on-device face detection lets you steer a hungry hippo by tilting your head to catch falling fruit while dodging bombs. Three difficulty levels, per-difficulty high scores, and full sound effects.", "iconUrl": "https://raw.githubusercontent.com/veereshai/HippoMuncher/main/app/src/main/ic_launcher-playstore.png", "author": "veereshai", "homepage": "https://github.com/veereshai/HippoMuncher", "submittedBy": "veereshai" }, { "name": "ISS Tracker", "packageName": "com.portal.isstracker", "source": "url", "apkUrl": "https://github.com/compscirunner/portal-iss-tracker/releases/latest/download/space-portal.apk", "versionCode": 2, "minSdk": 24, "description": "NASA-branded space dashboard — live ISS video, ground track, crew & launches.", "longDescription": "An always-on space dashboard built for the Portal: live ISS video feed, real-time ground track, current crew, space weather, upcoming launches, and Deep Space Network status — all from keyless public APIs, no Google services. Designed to live on the wall or counter and stay on all day.", "iconUrl": "https://raw.githubusercontent.com/compscirunner/portal-iss-tracker/main/docs/icon.png", "author": "compscirunner", "homepage": "https://github.com/compscirunner/portal-iss-tracker", "submittedBy": "compscirunner" }, { "name": "Portal-Kasa", "packageName": "com.portal.kasa", "source": "url", "apkUrl": "https://github.com/rudysev/portal-kasa/releases/latest/download/portal-kasa.apk", "versionUrl": "https://raw.githubusercontent.com/rudysev/portal-kasa/main/version.json", "minSdk": 28, "description": "Toggle TP-Link Kasa smart plugs and bulbs on your Wi-Fi — local, no account, no cloud.", "longDescription": "A TP-Link Kasa controller built for the Portal: every plug and bulb on your Wi-Fi on one glanceable dashboard (green = on), with one-tap toggles and All on / All off. Control is entirely local LAN — no TP-Link account, no cloud, no sign-in; devices are discovered by UDP broadcast and switched directly over TCP. The dashboard re-syncs every ~30 seconds while open (backing off in the background), so changes made from the Kasa phone app or a physical button show up on their own. Pairs with the Jarvis assistant (also in this store) for voice control: enable \"Kasa Plugs\" under its External tools and say \"hey jarvis, turn on the coffee maker\". The Portal and the devices must be on the same Wi-Fi network.", "iconUrl": "https://raw.githubusercontent.com/rudysev/portal-kasa/main/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png", "author": "rudysev", "homepage": "https://github.com/rudysev/portal-kasa", "submittedBy": "rudysev" }, { "name": "Portal Overlays", "packageName": "com.portal.overlays", "source": "url", "apkUrl": "https://github.com/GodricTM/PortalOverlays/releases/latest/download/PortalOverlays.apk", "versionCode": 14, "minSdk": 28, "description": "A floating HUD for sideloaded Portals - widgets, notifications, ticker, status strip, floating nav, and Now Playing.", "longDescription": "Draws draggable widgets (clock, weather, battery, sticky note), mirrored notification banners, an RSS/Atom/JSON ticker, a live status strip (time, date, weather, battery, network speed, pinned app dock, tap-to-open segments, and more), a floating Back/Home/Recents nav cluster, and a fullscreen Now Playing view with album art and transport controls - all on top of any app. Push banners via ntfy.sh or a self-hosted ntfy server. Checks GitHub for in-app updates (automatic popup on launch). No Google Play Services required.", "iconUrl": "https://raw.githubusercontent.com/GodricTM/PortalOverlays/main/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png", "author": "GodricTM", "homepage": "https://github.com/GodricTM/PortalOverlays", "submittedBy": "GodricTM" }, { "name": "Portal TTS", "packageName": "com.portal.tts", "source": "url", "apkUrl": "https://github.com/GodricTM/portal-tts-engine/releases/download/v1.0/Portal-TTS-Engine-v1.apk", "versionCode": 20260608, "minSdk": 21, "description": "Offline neural text-to-speech engine — gives the Portal a system voice (it ships with none).", "longDescription": "Meta Portals have no built-in text-to-speech, so apps that speak — like Immortal's spoken time or Portal Overlays' breaking-news read-out — have nothing to talk through. Portal TTS is an offline neural engine (a Sherpa-ONNX fork with Kokoro and Piper voices) that registers as a standard Android TextToSpeech engine: install it, select it under the system text-to-speech settings, and any app on the device can then speak through it — no Google services, fully on-device. Advanced setup: to keep the download small the voice models aren't bundled in the APK — you push a voice-model folder to the app's storage over adb and pick it in the app, so a PC is needed once to add voices. See the project page for models and step-by-step instructions.", "iconUrl": "https://raw.githubusercontent.com/GodricTM/portal-tts-engine/main/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png", "author": "GodricTM", "homepage": "https://github.com/GodricTM/portal-tts-engine", "submittedBy": "GodricTM" }, { "name": "Jarvis (portal-assistant)", "packageName": "com.portal.assistant", "source": "url", "apkUrl": "https://github.com/rudysev/portal-assistant/releases/latest/download/portal-assistant.apk", "versionUrl": "https://raw.githubusercontent.com/rudysev/portal-assistant/main/version.json", "minSdk": 28, "description": "Hands-free voice assistant — ask anything, control the device, open apps. BYO Gemini key.", "longDescription": "A conversational AI assistant built for the Portal, powered by the Gemini Live API. Talk to it in plain language and it answers out loud in a natural voice — web lookups, device control, opening apps — running as background voice with just a small orange bar over whatever's on screen, plus a live on-screen chat when the app is open. It knows the device's local time and approximate location, so questions like \"what's the weather?\" just work. Bring your own free Google Gemini API key (aistudio.google.com/apikey) — it stays on the device. Tap-to-talk works everywhere; the hands-free \"Hey Jarvis\" wake word needs the companion portal-wake app and is Gen 1 only.", "iconUrl": "https://raw.githubusercontent.com/rudysev/portal-assistant/main/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png", "author": "rudysev", "homepage": "https://github.com/rudysev/portal-assistant", "submittedBy": "rudysev" } ] } ] }