Show HN: Gander, an Android file viewer that asks for no permissions at all

Hacker News Top Products

Summary

Gander is a tiny open-source Android file viewer that opens PDFs, Word, Excel, PowerPoint, photos, videos, audio, Markdown and code with zero permissions, no ads, and no internet access.

Hi HN,<p>I built an Android file viewer that opens PDF, Word, Excel, PowerPoint, images, video, audio, Markdown and code, and asks for no permissions at all.<p>I have always been uneasy about opening files people send me. On Android you either install a 400 MB office suite and sign in or use a small free viewer that wants storage access and ends up uploading your file to a server to render it. Also the hassle of having to download different apps for different file formats was really annoying.<p>Gander holds no permissions, not even INTERNET so the OS itself guarantees the file cannot leave the phone.<p>PDFs use Pdfium, media uses Media3, and Office formats are rendered by bundled JS libraries in a WebView and so no request goes to any server.<p>It is a viewer only. Complex PowerPoint decks come out approximately right, spreadsheet charts are not drawn, and old binary .doc and .ppt are unsupported. I&#x27;ll work on it as issues come up :P<p>It is 14 MB, MIT licensed and uploaded on Github releases.<p>Do try it! I would love some feedback especially on files that render badly or need new support.
Original Article
View Cached Full Text

Cached at: 07/31/26, 07:55 AM

mokshablr/gander

Source: https://github.com/mokshablr/gander

Gander: take a gander at any file. Open source Android file viewer for PDF, DOCX, XLSX, PPTX, JPG, MP4, MP3 and Markdown. 100% offline, 15 MB APK, zero permissions, no ads or trackers.

Gander 🪿

Take a gander at any file. A tiny, open source, fully offline file viewer for Android that opens PDF, Word, Excel, PowerPoint, photos, videos, audio, Markdown, text and code in one app, with zero permissions, no ads, no tracking and no internet access at all.

License: MIT Release Build Min API Kotlin

Every phone ships with a dozen half-viewers that bounce your documents to cloud services. Gander is the opposite: one small APK (about 15 MB) that renders everything on the device. It cannot phone home because it does not even hold the INTERNET permission.

Gander demo: thumbnail recents, folder browsing, PDF, Word, Excel and Markdown viewing

Screenshots

Home: recents and foldersFolder browsingPDF
Recent files with thumbnail previews and granted foldersBrowsing a granted folder with previewsPDF viewer
Word (.docx)PowerPoint (.pptx)Excel (.xlsx)
Word document viewerPowerPoint slides viewerExcel spreadsheet viewer with sheet tabs

Features

  • One viewer for everything: documents, spreadsheets, slides, images, video, audio, Markdown, code
  • Pinch zoom and smooth scrolling everywhere, with deep zoom into huge photos (tiled decoding)
  • Recent files with thumbnail previews (image, video frame, PDF first page)
  • Folder browsing through one-time system grants, still without any storage permission
  • Share sheet and “Open with” integration: share a file from any app (chat, mail, browser) into Gander, or tap it in a file manager
  • Find in document: search inside Word, Excel, slides, Markdown, text and code with match navigation
  • Share and locate: send the open file to any app, or jump to its folder in the file manager
  • Private by construction: no permissions, no INTERNET, no analytics, no accounts, nothing leaves the phone
  • Modern Android: Material 3, dark mode, edge to edge, works on Android 8.0+

Supported formats

CategoryFormatsRenderer
DocumentsPDFPdfium (native)
Word .docxdocx-preview, offline in a sandboxed WebView
Spreadsheets.xlsx .xls .xlsm .xlsb .csv .odsSheetJS, offline
SlidesPowerPoint .pptxPPTXjs, offline
PhotosJPG, PNG, WebP, BMP, HEIC/HEIFTiled deep-zoom image view, EXIF aware
GIF (animated), SVG, AVIF, ICOWebView
VideoMP4, M4V, MOV, MKV, WebM, 3GP, AVI, FLV, MPEG-TSMedia3 ExoPlayer
AudioMP3, M4A, AAC, FLAC, WAV, OGG, Opus, AMRMedia3 ExoPlayer
Markdown.md rendered as formatted HTMLmarked + DOMPurify, offline
Text and code.txt .json .xml logs, most source filesText viewer

Legacy binary .doc and .ppt are not supported (no faithful offline renderer exists); the app explains this and suggests re-saving as .docx / .pptx. Binary .xls works.

Install

  1. Download the latest APK from Releases: Gander-x.y-arm64.apk fits practically every phone from 2017 onward (use the universal APK for very old or x86 devices).
  2. Copy it to your phone, tap it, and allow “install unknown apps” when asked.
  3. Optional: Play Protect may warn about an unknown developer; that is what sideloaded open source looks like. Tap “Install anyway”.

Updating: install the new APK over the old one; recents and folder grants survive.

Automatic updates without a store: install Obtainium and add https://github.com/mokshablr/gander as an app source. It follows the tagged GitHub releases here and updates Gander like a store would.

How the zero-permission trick works

Gander receives files through the Storage Access Framework and “Open with” intents, so the OS hands it exactly the documents you chose and nothing else. Office formats render inside a locked-down WebView whose every request is intercepted by WebViewAssetLoader: bundled JS libraries load from app assets and the document streams from the content URI. No network stack is ever touched, and the app does not declare the INTERNET permission, so there is nothing to audit or trust.

Folder browsing uses ACTION_OPEN_DOCUMENT_TREE grants. Note that Android itself refuses to grant the Downloads root to any app; grant Documents, DCIM or a subfolder of Downloads instead.

Build from source

Requirements: JDK 17+ and the Android SDK (platform 35).

./gradlew assembleDebug        # installable debug build
./gradlew assembleRelease      # unsigned without a keystore

Release signing expects a local, untracked keystore at keystore/gander.jks (store and key password gander-local, alias gander); generate one with:

keytool -genkeypair -keystore keystore/gander.jks -alias gander \
  -keyalg RSA -keysize 2048 -validity 10000 \
  -storepass gander-local -keypass gander-local -dname "CN=Gander"

The keystore is gitignored on purpose: it is a personal signing key and must never land in a public repo.

Architecture in one paragraph

ViewerActivity routes by file extension first, MIME type second (FileKind.kt), into one of four surfaces: a native Pdfium view for PDF, a tiled SubsamplingScaleImageView for photos, Media3 ExoPlayer for video and audio, or a sandboxed WebView for everything rendered by vendored JS libraries (app/src/main/assets/viewer/). The home screen (MainActivity) lists recents (persisted SAF grants) and granted folders (DocumentsContract child queries), with thumbnails generated off-thread and cached (Thumbs.kt).

Vendored viewer libraries and their licenses: JSZip (MIT), docx-preview (Apache-2.0), SheetJS CE (Apache-2.0), PPTXjs + divs2slides (MIT), jQuery 1.11 (MIT), D3 3.x + NVD3 (BSD/Apache), marked (MIT), DOMPurify (Apache-2.0/MPL).

Roadmap

  • F-Droid listing
  • Legacy .doc / .ppt support if a usable offline renderer appears
  • iOS companion (thin QuickLook wrapper)

Contributing

Issues and small PRs are welcome, see CONTRIBUTING.md. If Gander is useful to you, a star helps other people find it.

License

MIT. Vendored viewer libraries keep their own licenses, listed above; all are MIT/Apache/BSD and compatible.

Similar Articles

Fileloom

Product Hunt

Fileloom is introduced as a free, ad-free Android application designed for viewing various file types.