Skip to content

Releases

Test build: mouse clicks in Samsung DeX (issue 12)

Choose a tag to compare

@Retrorerr Retrorerr released this 13 Nov 09:21

Debug test build for issue #12. Not a release; do not install this unless you were asked to test it.

Changes from 2.8.0 relevant to the issue:

  • A mouse that Samsung DeX reports with a combined mouse and touchscreen source now clicks.
  • Android's own pointer arrow is hidden over the desktop.
  • Diagnostics exports record how each pointer device presents itself.

This is the Debug variant. It installs next to the normal Portal app as a separate app with its own setup and data.

Portal v2.8.0

Choose a tag to compare

@github-actions github-actions released this 06 Nov 13:20

Portal v2.8.0

Hardware video arrives. On Snapdragon tablets, Linux apps now decode video on the device's video chip, and 4K60 playback takes about half the CPU it used to. This release also adds drag-and-drop file transfers, a new floating control pill, a desktop keyboard and built-in problem reports.

All measurements: OnePlus Pad 3.

Hardware video

Video in Linux apps now runs through Android's own decoders, with no setup.

4K60 playback Software (cores) Hardware (cores) CPU saved
AV1 1.79 0.79 56%
HEVC 1.87 0.87 53%
H.264 1.64 0.88 46%
VP9 1.48 0.81 45%

Real-time decode of a high-bitrate test clip, averaged over 2 runs: CPU across the player, Android's media service and Portal's decoder.

  • Apps: Firefox, Chromium, mpv, Celluloid, VLC, Haruna, GStreamer apps such as Videos, and Flatpak apps with GPU access.
  • Decode: H.264, HEVC, VP9 and AV1, where the chip supports them.
  • Encode: H.264, HEVC and VP9 through VA-API, for example ffmpeg -c:v h264_vaapi.
  • 4K YouTube: a 26 Mbps VP9 stream plays at 59.4–59.9 fps in Firefox.
  • Accuracy: output matches software decoding bit for bit across the test clips.
  • Install: the driver downloads during setup, or in the background on the first launch after this update. Video decodes in software until then and on other GPUs.
  • Turn it off: write off to Portal's files/hw-video-decode and restart Portal.
  • Credit: built on lfdevs' termux-va and Mesa for Android containers, with Portal's fixes on top. termux-va's daemon derives from droidspaces-media-decode.

File transfers

file-dragging.mp4

New Files card beside Apps on the veil.

  • Drag and drop: drag from a compatible Android app, for example in split screen, onto Portal. Files opens by itself.
  • Add files: Android's picker copies one file or a batch into Linux Downloads.
  • Save files: pick files in a compact desktop chooser, then Android asks where to save them.
  • Keeps running: transfers continue when you lift the veil or switch apps. Details shows progress, cancel and retry.
  • Safe copies: originals stay in place, existing files are never replaced, and duplicate names get a number.

Performance

Touch and scrolling (scrollbar drag) Before Now
LibreOffice Writer, finger 25 fps 29 fps
LibreOffice Writer, mouse 9 fps 29 fps
Kate, finger 55 fps 63 fps
Dolphin, finger 30 fps 38 fps
Heat and battery Before Now
24 fps video, frames presented per second 89 24
Firefox, 24 fps video on a 144 Hz panel 69% 48%
KWin during that video 27% 13%
SurfaceFlinger during that video 25% 15%

CPU figures are percent of one core.

  • Input compression: Qt 6 apps on Wayland now combine fast touch and mouse input the way Qt already does on X11. This used to be a LibreOffice-only workaround. Apps that need every sample, such as drawing apps, can still ask for it.
  • Idle refresh: Portal releases its 144 Hz request when idle. After 3 s without input, the idle rate is capped at half the panel (144→72, 120→60), and a touch restores full rate at once.
  • Fewer wakeups: the clipboard, input and guest command services now wait for events instead of polling.
  • Disk: leftover guest /tmp files are cleared at launch, about 2 GB on the test device.

Portal controls

  • Floating pill: opens Report, Files, Apps, the desktop keyboard and, during games, Game settings. It suggests what you need, coasts when dragged, settles at an edge and remembers its place.
  • Desktop keyboard: sends real Linux keys, with ABC, symbol and number-pad layers, plus F1–F12, navigation, system keys and shortcuts. Modifiers arm, lock or hold. It moves, follows rotation and keeps the desktop usable around it.
  • Ctrl+Alt+P: opens the veil from anywhere.
  • Background session: a quiet "Your desktop is running" notification keeps Linux alive while Portal is in the background.
  • Veil: fits small screens, and its panels and tips animate smoothly.
  • Update checks: if the last check is over 30 minutes old, Portal checks for app and driver updates as soon as the desktop appears, so they show while the veil is still up. Debian's package lists still wait 90 s.

Reporting problems

  • Report: in the pill, and on the recovery and failed-setup screens. Portal opens a prefilled GitHub form in your browser and uploads nothing itself.
  • Two forms: Report a bug, and Share what works for app compatibility.
  • Save logs: writes a zip to Download/Portal, with file paths, web, email, IP and MAC addresses removed wherever Portal can spot them.

Apps

  • Portable apps: Open With → Open with Portal in Dolphin, or portal-run <path>. Runs AppImages without FUSE, native bundles, Java, .NET and Windows programs, and names any missing runtime.
  • LibreOffice: runs at true fractional scale like any other Qt app, with no launcher workarounds.
  • Qt: Qt/X11 apps reach the Android keyboard. Qt 5/6 Wayland, SVG and image plugins are now installed, including on existing installs.
  • Keyboards: physical keyboard keys skip Gboard's autocorrect.
  • Chromium: keeps its sandbox under tawcroot.
  • Flatpak: GPU support adds the 26.08 runtime, and bubblewrap run as root works.
  • Launchers: Portal no longer forces Wayland flags on Electron apps or a scale on Steam. Launchers you edited stay as they are.
  • KWallet: first-login setup no longer depends on a package that older images install later.
  • Ubisoft games under Proton: the overlay and its prompt stay off.

Fixes

  • Stalled videos: videos no longer freeze until you leave and re-enter Portal. The audio sink now recovers when PipeWire misses a cycle.
  • Adreno 740 (Galaxy Z Fold5): fixes panel flicker, dotted shadows and icons, and white squares in Firefox.
  • App updates: Android relaunching Portal during an update no longer leaves a frozen logo or a black screen.

Known issues

  • OnePlus Pad 3 at 50 Hz: OxygenOS drops the screen to 50 Hz after a few seconds without touch, even during video, so 60 fps video stutters in Portal and Android browsers alike. Portal can't override it. Touching the screen restores the full rate.
  • Game mode on OnePlus: with Game Space holding 144 Hz, 60 fps video in Firefox presents at about 55–72 fps when idle and drops some frames.
  • DRM video: sites that need Widevine, such as Vimeo, won't play. ARM64 Linux has no Widevine.
  • SDL2 apps: some open the Android keyboard at startup with no text field.

Files

  • Portal-2.8.0.apk: the app (install this one)
  • Portal-2.8.0-debug.apk: debuggable build, for troubleshooting only

VA layer r1-20261105

Choose a tag to compare

@Retrorerr Retrorerr released this 05 Nov 09:50

Portal's VA-API hardware video decode driver (termuxva_drv_video.so), downloaded by Portal during setup. Built by .github/workflows/va-layer-arm64.yml run 42004424815 from lfdevs/mesa-for-android-container mesa-27.0.0-devel-20261025-r1 + patches/mesa/va-layer-r1/portal-va-r1.patch.

Fixes H.264 streams with five or more references hanging every video decoder, and gives up on VA waits that cannot finish so clients fall back to software.

sha256 (gz): 0a4d6fe0b4d1b525182ffbc0de64098018c1f00160c70e18b93ed4ca7399f7cc
sha256 (so): 99772d5562e3341b18ec6715f3b84a17e5534c142eabbe31e95872e547263eb1

Mesa KGSL layer 26.3.0-devel-20260824 (Portal, 2026-11-05)

Choose a tag to compare

Graphics driver layer for Portal: lfdevs mesa-for-android-container mesa-26.3.0-devel-20260824 (98f3d62) with Portal's patches/mesa/kgsl-layer-26.3.0: 0001 KGSL implicit sync for dma-buf BOs, 0002 keep merged submits' BOs alive until GPU_COMMAND, 0003 GL/EGL wait timeouts in ms and checked error paths, 0004 save the u_blitter scissor with exclusive bounds, 0005 attach KGSL EGL displays to the DRM render device found through Portal's shim, 0006 set the TP UBWC flag hint on Adreno 740 (panel flicker, dotted shadows and white browser icons on SM8550). Built by the Mesa KGSL layer ARM64 workflow (run 42084815573). Not an app release.

Flatpak GL extension 26.3.0 (Portal, 2026-11-05)

Choose a tag to compare

GPU graphics for Flatpak apps on Portal: org.freedesktop.Platform.GL.portal, Portal's Mesa KGSL layer (lfdevs mesa-26.3.0-devel-20260824 with patches/mesa/kgsl-layer-26.3.0 0001-0006) packaged as a Flatpak GL extension, plus flatpak/0001, which derives the kgsl driver from FD_FORCE_KGSL inside the sandbox. One bundle per freedesktop runtime branch (24.08, 25.08, 26.08). Without it, Flatpak apps such as Zen render on the runtime's llvmpipe (CPU). Built by the Mesa KGSL Flatpak GL extension ARM64 workflow (run 42084815692). Not an app release.

Portal v2.7.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 08:26

Portal v2.7.0

Portal has a new engine. Debian now runs under tawcroot instead of PRoot, which makes starting the desktop, opening apps and anything that touches a lot of files several times faster. The APK is also 20% smaller, and Steam, the clipboard and the on-screen keyboard got a round of fixes.

New engine: tawcroot

  • Portal now runs Debian under tawcroot, a rootless engine that handles Linux file paths and permissions inside each app's own process. PRoot did the same job from a separate process, so every file operation took a round trip between the two. Measured on a OnePlus Pad 3:
    • The desktop is ready in about 2.7 s after Portal starts, down from about 4.7 s.
    • Opening Plasma's edit mode (long press on the panel) takes 1.5 s instead of 3.5 s.
    • File-heavy work is much faster: listing /usr/lib recursively takes 0.8 s instead of 6 s, searching /usr/share 1 s instead of 4 s, unpacking an archive 5 s instead of 26 s, and Python imports about 3 times faster.
  • Everything that worked under PRoot works under tawcroot: sudo and APT, Flatpak apps with their real sandbox and GPU, Discover, Firefox, Chromium and Electron apps with their sandboxes on, Steam and Proton, the camera and microphone, and the optional apps.
  • Existing installs switch to tawcroot on their next start; nothing needs reinstalling. File ownership carries over between the two engines.
  • Devices whose kernel can't run tawcroot (roughly Android 7 and older) fall back to PRoot automatically.
  • Steam games built for x86-64 Linux now start from scripts too: tawcroot hands x86-64 programs to Box64 the way Linux does with binfmt_misc.
  • Unity games such as Kerbal Space Program boot to their menu instead of exiting or crashing during start.

Smaller app

  • The APK is down from 22.4 MiB to 18.0 MiB, and Portal takes about 32 MB less space once installed. The KWin, Mesa (Turnip) and Xwayland builds Portal ships are now stored compressed and unpacked only when they change.
  • The unused second "candidate" Xwayland build was removed; every install uses Portal's own patched Xwayland.

Steam and games

  • While Steam runs, the game handle at the top of the screen can be dragged anywhere, and it stays where you put it, also after rotating the tablet.
  • The game panel was redesigned: settings are grouped like a settings list, with Portal's own switches and sliders.
  • Starting a Windows game with no ARM64 Proton installed now opens Steam's install dialog for Proton 11.0 (ARM64), instead of only telling you to install it.
  • Source and other games built for the Steam Linux Runtime (sniper, soldier) no longer refuse to start because they don't find their runtime.
  • Ubisoft games through Proton no longer fail with "Corrupted installation (CODE 011)". Ubisoft Connect's overlay is kept off for them, because its hooks can't run on ARM64 yet.
  • Steam's tray menu closes when you tap somewhere else, as do other X11 menus.
  • Steam Settings no longer crashes when it opens.

Keyboard and clipboard

  • The Android keyboard comes up in Firefox and other GTK apps on Wayland again when you tap a text field.
  • On a fresh install, typing works from the first session even if the input method was still being installed when the desktop started.
  • Text you copy on Android while Portal stays on screen (for example from a notification's Copy button, or another device's shared clipboard) now reaches Linux right away.
  • Switching back to Portal no longer empties the Linux clipboard when Android briefly refuses to share the clipboard.
  • Copying in Linux no longer sometimes sends the previous text back to Android, and copies reach Android in the order you made them.

Apps

  • On installs with no KWallet yet, including every fresh install, Claude, ChatGPT, VS Code, Chromium and KDE apps no longer stop on KWallet's setup wizard: Portal creates the default wallet and opens it at login, as a desktop Linux login does. A wallet you already set up is left as it is.
  • VLC no longer aborts at startup.
  • Discover, admin prompts (pkexec, System Settings' admin pages) and other system services that start on demand work again on devices using the PRoot fallback.

Privacy and size

  • Android backup no longer includes Portal's data.
  • Portal's release build drops its debug and verbose log messages.

Performance comparison (PRoot vs tawcroot, panel long press to edit mode):

panel-edit-mode-proot-vs-tawcroot.mp4

Files:

  • Portal-2.7.0.apk: the app (install this one)
  • Portal-2.7.0-debug.apk: debuggable build, for troubleshooting only
  • Portal-2.7.0.aab: Play Store bundle, not for direct install

Portal v2.6.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 10:57

Portal v2.6.0

Portal now has an app store with Flatpak, Linux apps can use the tablet's cameras and microphone, and scrolling and video are smooth in every browser. There are also a lot of crash, freeze and input fixes.

Camera and microphone

  • Linux apps can use the tablet's microphone and cameras. The microphone shows up as "Portal Microphone" and is the default input, so video calls in Firefox, voice chat, pw-record and anything else that records audio just work.
  • Front and back cameras show up as normal video devices (/dev/video*) and as PipeWire cameras, so browsers, ffmpeg and other camera apps find them. Video runs at full frame rate (about 27 fps at 1080p in Firefox) and pictures stay upright when you rotate the tablet.
  • Android asks for microphone or camera permission only when a Linux app actually starts using one, not at startup. If you say no, apps get silence or a black picture instead of an error, and Portal tells you how to allow it later.
  • The camera turns off as soon as the app or browser tab using it closes, and the microphone and cameras are released whenever Portal goes to the background, so Android's privacy indicator goes away.
  • Plasma's volume meters no longer keep the microphone open in the background.

Apps and Flatpak

  • Discover, KDE's app store, is included. It installs Debian packages and Flatpak apps from Flathub, and shows updates for both in one place. Fresh installs get it on the panel; existing installs get it in the background after updating, in the app menu.
  • Flatpak apps run with their normal sandbox (bubblewrap), the same way they do on a desktop Linux install. Portal now emulates the parts of Linux namespaces and mounts that bubblewrap needs.
  • Flatpak apps run on the GPU. Portal installs its own graphics driver for Flatpak during setup, so apps like Zen are hardware accelerated from their first start instead of drawing everything on the CPU. Existing installs get the driver at their next start.
  • Installed Flatpak apps now show up in the launcher and search, and Discover's Launch button works.
  • Admin prompts (installing from Discover, System Settings' admin pages, pkexec) work without a password, like sudo already did.
  • Installing global themes from the KDE Store no longer freezes System Settings with "Not Responding".
  • Discover no longer freezes for a minute or more the first time it shows apps when a large icon theme is active.
  • Discover's Updates page no longer gets stuck on "Fetching updates".
  • Flatpak installs no longer fail with "Corrupted file object" errors.
  • Fixed GTK4 apps (Flatpak or not) closing right after they start, Electron Flatpaks failing to start their sandbox, and Qt apps that use shared memory (such as Deskflow) saying they are already running or never opening a window.
  • Games and apps built on GLEW (HyperRogue and about 50 other Debian packages) no longer show a black window on Wayland.
  • X11 apps that render on the CPU no longer show up as blank white windows.
  • ps aux, uptime, htop and similar tools get the system information they need.

Performance and smoothness

  • Qt and KDE apps such as Dolphin, Konsole and Kate now animate and smooth-scroll at the screen's full refresh rate instead of a fixed 60 Hz, which juddered on 90, 120 and 144 Hz screens. It keeps working when Android changes the refresh rate after an app has started, as per-app refresh settings on OnePlus and OPPO devices do.
  • Zen and other Firefox-based browsers, including Firefox installed from Flathub or as a download, now render on the GPU. Before, they fell back to software rendering and dropped frames, especially on YouTube.
  • Debian's Chromium now uses the GPU instead of crashing back to software rendering.
  • Less CPU use while playing video and using network-heavy apps: Portal no longer intercepts every socket send an app makes.
  • The desktop no longer drops to 20 fps, or spins a CPU core, when the connection to the display is interrupted, and recovers on its own.
  • Less background work while the desktop is idle (the logout watcher and Portal's own logging).

Graphics

These driver fixes also reached 2.5.0 through the updater.

  • Fixed moving content leaving trails ("ghosting") in portrait at some display scales, caused by large wallpapers uploading as black.
  • Fixed windows being slowly cut away from the bottom-right edge while a tray popup or other repainting window was open (most visible with the Cloud Dark rice).
  • GPU waits now time out when they should instead of blocking for the whole job, and running out of GPU memory no longer crashes apps.

Browsers

  • Firefox tabs no longer crash on devices where Android blocks reopening shared memory (Galaxy Z Fold5 and others).
  • Fixed Firefox aborting with "Unexpected error 9 on netlink descriptor" and content tabs crashing right at start in rare cases.
  • Fresh installs ship Mozilla's own Firefox in the Debian image, so setup no longer has to download it, and Firefox ESR is no longer included. Existing installs keep their setup.

Keyboard, mouse and controllers

  • Tapping a text field again brings the Android keyboard back after you dismissed it.
  • Folding a keyboard folio behind the tablet counts as no keyboard, so the on-screen keyboard appears.
  • Disabled keyboards no longer count as connected.
  • The keyboard no longer stops typing after an earlier session left its input engine running, and Plasma's Virtual Keyboard tray toggle can no longer switch it off for good.
  • Chromium and Electron apps open the on-screen keyboard when you tap a text field on Wayland.
  • A controller that no game is reading, or an input method that stopped responding, can no longer freeze Portal.

Display

  • The Galaxy Z Fold cover screen gets its own interface size instead of reusing the inner screen's, and Portal remembers a size for each screen.

Setup and updates

  • A runtime download that ends early (for example behind some proxies) now resumes instead of stalling setup.
  • When a setup step fails, the error shown now includes the command's last lines, so the cause isn't cut off.
  • Portal checks for new versions of itself, its graphics driver and ChatGPT every 30 minutes instead of every 6 hours. Debian package lists are still checked every 6 hours.

Stability

  • Fixed a memory leak that grew every time Portal's window was recreated.
  • Fixed a crash when the desktop window had no size yet.
  • Fixed the mouse cursor code closing a file it no longer owned, which could break unrelated parts of Portal.
  • Fixed the audio service leaving processes running when it failed to start.
  • The recovery screen no longer loops if its dialog can't open.
  • Copying something very large on Android no longer clears the Linux clipboard.

Other

  • The release debug APK is now the real Debug build: a separate app with its own data that installs beside the normal one, instead of a debuggable copy of the normal app.

Files:

  • Portal-2.6.0.apk: the app (install this one)
  • Portal-2.6.0-debug.apk: debuggable build, for troubleshooting only
  • Portal-2.6.0.aab: Play Store bundle, not for direct install

runtime-debian13-arm64-2026.10.17.1

Choose a tag to compare

Canonical Debian 13 ARM64 runtime debian13-arm64-2026.10.17.1 for Portal.

Flatpak GL extension 26.3.0 (Portal, 2026-10-16)

Choose a tag to compare

GPU graphics for Flatpak apps on Portal: org.freedesktop.Platform.GL.portal, Portal's Mesa KGSL layer (lfdevs mesa-26.3.0-devel-20260824 with patches/mesa/kgsl-layer-26.3.0 0001-0004) packaged as a Flatpak GL extension, plus flatpak/0001, which derives the kgsl driver from FD_FORCE_KGSL inside the sandbox. One bundle per freedesktop runtime branch (24.08, 25.08). Without it, Flatpak apps such as Zen render on the runtime's llvmpipe (CPU). Built by the Mesa KGSL Flatpak GL extension ARM64 workflow (run 38876593589). Not an app release.

Mesa KGSL layer 26.3.0-devel-20260824 (Portal, 2026-10-15)

Choose a tag to compare

Graphics driver layer for Portal: lfdevs mesa-for-android-container mesa-26.3.0-devel-20260824 (98f3d62) with Portal's patches/mesa/kgsl-layer-26.3.0: 0001 KGSL implicit sync for dma-buf BOs, 0002 keep merged submits' BOs alive until GPU_COMMAND, 0003 GL/EGL wait timeouts in ms and checked error paths, 0004 save the u_blitter scissor with exclusive bounds so blits no longer shrink the bound scissor (windows drawn through KWin effects were eaten away from the bottom-right while the tray or another popup was open). Built by the Mesa KGSL layer ARM64 workflow (run 38794142810). Not an app release.