-
Phandroid v2.0.77-dev Pre-release
released this
2026-10-14 10:32:00 +02:00 | 61 commits to main since this releaseChanged
- Merged upstream Phanpy — 4 commit(s); no Android-fork code changes (see
CHANGELOG.phanpy.mdfor upstream detail):56a8e3fcAdd one more 'View Quotes' menufa9ba209Reduce gap between boosts in carouselee4bd4e5Try macroTransform1e4e7d06i18n updates (fi-FI,tr-TR) (#1613)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Merged upstream Phanpy — 4 commit(s); no Android-fork code changes (see
-
Phandroid v2.0.24 Stable
released this
2026-10-11 23:17:52 +02:00 | 4538 commits to main since this releaseSame fixes as dev 2.0.74 — the findings of the 2026-10-11 whole-project review.
Fixed
- Camera capture works again. The native camera component never forwarded the
refthat the composer clicks, so "Take photo or video" and the toolbar button
did nothing at all — while the listing advertised the feature. The component is
patched in place now instead of overridden, so it also produces upstream's current
attachment shape and cannot silently drift behind upstream again. - No more source maps in the APK. Upstream builds them for crash-report
symbolication, which Phandroid does not ship; Capacitor copied them into the
assets anyway, so every APK carried its own complete unminified source. They are
excluded now and the release verifies on the artifact that none remain. - Sharing into the running app works, and a share no longer repeats itself. The
event that signals a share to an already-running app was dispatched on iOS only,
and the share intent stayed the activity's current intent for its whole life — so
a warm share did nothing, while every WebView reload re-opened the composer with
the same old share (by then without its image). - A share into a logged-out app waits instead of vanishing. It is kept until you
log in, and a toast says why nothing happened yet. - The status bar follows the theme. It was set once at startup, so a light system
with a dark app theme gave same-coloured icons on a same-coloured header. - Multi-account push no longer kills the other accounts. Turning push off for one
account unregistered the endpoint every account shares, an endpoint rotation healed
only the current account, and logging out left the preference behind — so a later
login silently re-enabled push. - Account export: a cancelled share sheet is no longer reported as "Export
failed", and the cache file is cleaned up by the next export instead of racing
the app you shared to. - German F-Droid clients get a "What's New" text (English content under a German
heading) instead of an empty update note.
Added
- A crash shows a recovery screen instead of a blank app, with a Reload button and
the stack behind "Error details" — the app has no telemetry, so a screenshot of that
screen is the only diagnostic you can send. - Failures you can act on now say so: camera failure, an unreadable shared image
and failed push (re-)subscribes show a toast instead of only a console message that
release builds strip.
Security
- The FileProvider no longer exposes all of external storage — only the two
app-private roots the camera and the export actually use. - A shared item's name can no longer make Phandroid delete arbitrary files in its
private directory; only names that look like the plugin's own image copy are removed.
Changed
- Pipeline hardening (no user-visible effect): no secrets while
apt-getinstalls
fdroidserver, concurrency guards so overlapping runs cannot corrupt each other, job
timeouts, the signer fingerprint checked before publishing, failure reporting for the
iPhanpy watcher, and correct release-note labelling.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Camera capture works again. The native camera component never forwarded the
-
Phandroid v2.0.21 Stable
released this
2026-10-07 07:33:03 +02:00 | 4552 commits to main since this releaseChanged
- Merged upstream Phanpy
production— 70 commits, including Preact 11, the reworked push
notification settings, dependency upgrades and translation updates (see
CHANGELOG.phanpy.md). The automatic sync had stopped at three conflicts in files the fork
patches; they are resolved the same way as on the dev channel, so prod now runs the same
code as dev 2.0.65 apart from the app's identity.
Fixed
- Push settings keep the chosen policy ("from everyone", "from people you follow", …).
Upstream moved it into a different field; the native push layer reads it from both places. - The inherited Phanpy Rollbar token is gone from prod as well (error logging is off in
Phandroid; the token had only been removed on the dev channel).
Added
- Phandroid has tests of its own, and the pipeline runs them (
tests-phandroid/): back
button, link warning, composer and native login, against the built app in Chromium posing
as the Android runtime. The upstream sync runs them before pushing a merge, every release
before signing.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Merged upstream Phanpy
-
Phandroid v2.0.19 Stable
released this
2026-09-14 21:23:00 +02:00 | 4626 commits to main since this releaseFixed
- The app no longer keeps every scrolled-past post in memory. A timeline appended
every loaded page to its list and never dropped anything, so posts, their DOM and the
matchingstatesentries piled up for as long as the reader kept scrolling. Measured
against a build: ~37 DOM nodes and ~0.12 MB of heap per post, with no ceiling — 520
posts came to 19.6k nodes and 74 MB. Upstream's state GC could not reclaim any of it,
because it deliberately skips posts that are still mounted. A browser tab gets closed
or reloaded and never notices; the Android app is one process that stays alive for
days. Timelines now keep at most 200 posts mounted, which holds the same run at ~8k
nodes and lets the GC clear the rest. The reading position is unaffected — an anchored
post stays put to within 0.4 px when older ones are dropped. - Aborting a link preview no longer raises an unhandled rejection.
StatusCardcancels
its unfurl request when a post unmounts but never caught the resulting rejection; with
posts now unmounting during scrolling, that fired on every trim.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- The app no longer keeps every scrolled-past post in memory. A timeline appended
-
Phandroid v2.0.18 Stable
released this
2026-09-07 08:24:47 +02:00 | 4629 commits to main since this releaseFixed
- Closing a picture opened from a feed returns to the feed instead of opening the post.
Images tapped in a timeline or a profile's media grid open through?media-only=, where
the post page is only a carrier for the image. Closing dropped that parameter and left
the reader on a post they never asked to open. It now returns to where the picture was
opened from, computed the same way the post page computes its own close target.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Closing a picture opened from a feed returns to the feed instead of opening the post.
-
Phandroid v2.0.17 Stable
released this
2026-09-06 00:16:46 +02:00 | 4630 commits to main since this releaseFixed
- Images opened from a profile's media grid can be closed again. Those open through a
second URL parameter (media-only) that the close handler did not recognise on this
channel, so the viewer stayed on screen with no way out except force-quitting the app.
The dev channel got this in 2.0.28 on 2026-08-22; porting it here was missed.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Images opened from a profile's media grid can be closed again. Those open through a
-
Phandroid v2.0.16 Stable
released this
2026-09-05 16:27:02 +02:00 | 4632 commits to main since this releaseFixed
- Structurally prevents the 2.0.14 bug from recurring.
app_name,
title_activity_main,package_nameandcustom_url_schemewere hand-maintained
literals invalues/strings.xml, duplicatingapplicationIdwith nothing to check
them against it. They are generated fromapplicationIdnow and no longer exist as
editable source, and the release workflow independently verifies app label and OAuth
scheme against the actually built APK before it is signed.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Structurally prevents the 2.0.14 bug from recurring.
-
Phandroid v2.0.15 Stable
released this
2026-08-25 08:30:42 +02:00 | 4635 commits to main since this releaseFixed
- App name, applicationId string and URL scheme were wrong. 2.0.14 shipped this build
withapp_name,package_nameandcustom_url_schemecopied from the dev channel
(values/strings.xml), so the app showed "Phandroid Dev" and carried the dev appId string
and OAuth scheme in its resources — introduced while adding the UnifiedPush string
resources. Restored to prod's own values.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- App name, applicationId string and URL scheme were wrong. 2.0.14 shipped this build
-
Phandroid v2.0.14 Stable
released this
2026-08-22 23:16:58 +02:00 | 4636 commits to main since this releaseAdded
- Phandroid has its own privacy policy. The one shipped so far was upstream Phanpy's,
word for word — it described a website on Cloudflare Pages, not an Android app that
registers for push and asks for notification permission. - German translations for the push messages in the native layer, which were hardcoded in
German so everyone else got German system messages.
Fixed
- Push toasts appear reliably — they were posted from a background thread.
- The dev release pruning works past 100 releases (the listing was not paginated).
- The iPhanpy watcher no longer re-baselines itself after a network error.
- CI failures are reported even when the job dies before the checkout, and never on the
public instance.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Phandroid has its own privacy policy. The one shipped so far was upstream Phanpy's,
-
Phandroid v2.0.11 Stable
released this
2026-08-17 08:46:15 +02:00 | 4639 commits to main since this releaseChanged
- Merged upstream Phanpy — 58 commit(s); no Android-fork code changes (see
CHANGELOG.phanpy.mdfor upstream detail):ef1920a1Allow injection of the commit hash and timestamp for hermetic builds.e450df1eAllow mocking out the build time too.e09e527fDelete .prettierrc.ecb871eci18n updates (kab) (#1552)124fd9afUpgrade depsb56ca996Use punycode.toUnicode for ascii domainsa2e7e4f6Punycode all the thingsf7c0612eSafari prefers percentage3febb6a3i18n updates (ar-SA,ca-ES,cs-CZ,de-DE,eo-UY,es-ES,eu-ES,fa-IR,fi-FI,fr-FR,gl-ES,he-IL,hu-HU,it-IT,ja-JP,ko-KR,lt-LT,nb-NO,nl-NL,oc-FR,pl-PL,pt-BR,pt-PT,ru-RU,th-TH,tok,tr-TR,uk-UA,zh-CN,zh-TW) (#1554)c39b766fDowngrade viteeb238db7Don't need treeshake: false anymorec3a493deLet's give Vite 8.1 a try again7924490bShazam only the avatars part, not the followers text37b47e35Sort latest first for changelog56245a68Migrate from react-quick-pinch-zoom to react-zoom-pan-pinch0fc51ac7Load temml.min.js instead5467bb5cAttempt to fix weird avatar issuese2dd6504[autofix.ci] apply automated fixesc143f7eai18n updates (de-DE,gl-ES,it-IT,pt-BR) (#1555)1f08c03aUpdate README.mdb0aeb771i18n updates (fi-FI) (#1557)2eee0273i18n updates (fi-FI,pl-PL) (#1558)6ca018ebUpgrade depsd74dfe0aFix bugs due to oxfmt upgradeb6d73b29Make bundle size report smarterda8aeb14[autofix.ci] apply automated fixes538c7d4bFix script erroraa9eadd2Improve size diff table6d1994feFix missing curSize6bffb3e2i18n updates (kab) (#1560)d09ee9f6Small adjustments to how the diff looks3dc87d24Estimate gzip50210175Update community deployments in READMEbc0d0419Update README.md5f48f84cInclude quotes as part of "mentions"d8b11351i18n updates (pt-BR,zh-CN) (#1561)9dad55f8Squircle all the thingsbc673ea4Test if this would fix double-click zoom quirk0b78702eSetbuildTimefrom an env var, but leavenowalone.00edb9e1Unfurl quoted posts tooad6db1fdi18n updates (pt-BR) (#1563)7d5adfbbi18n updates (pt-BR) (#1564)7062c7b3i18n updates (pt-BR) (#1565)c432942ei18n updates (pt-BR) (#1568)ff134a58i18n updates (pt-BR) (#1569)57870e34i18n updates (ca-ES,pt-BR) (#1570)68ec2cafFix missing native image context menu in media modal9a9da8fai18n updates (de-DE,pt-BR) (#1571)fabe7404Update README.mdd650f026Disable opening custom emoji in a modal if inside a link90511e43Perf-related fixes for composerfe7a7dc9Fix search button not working1aadde48Possible fix for overlapping compse button and tab bar
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Merged upstream Phanpy — 58 commit(s); no Android-fork code changes (see