8 ms·
Show HN: Gander, an Android file viewer that asks for no permissions
Hi HN,
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.
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.
Gander holds no permissions, not even INTERNET so the OS itself guarantees the file cannot leave the phone.
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.
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'll work on it as issues come up :P
It is 14 MB, MIT licensed and uploaded on Github releases.
Do try it! I would love some feedback especially on files that render badly or need new support.
- tim-projects 2mo agoSounds great! You'll just need your social security or passport id sent to google to install and use it... sobs
- quickdeer 1mo agoThis sounds great and I would like to try it on my iPhone. Will you be developing an IOS version?
- Mobeen0119 2mo agoSince everything is offline, what ended up being the hardest format to support while keeping rendering faithful?
- vrighter 2mo agoWhy would rendering a document need internet access?
- Chilinot 2mo agoPDFs can do all sorts of shenanigans, such as bundle executable javascript that runs when the file is opened.
- echoangle 2mo agoYou don’t need internet to run JS though. And the JS seems to be pretty sandboxed in normal viewers too, so a pdf file shouldn’t make network requests on its own. As long as there is no iframe-like content I don’t see how rendering a document would ever need network.
- vrighter 2mo agoif that document really does need internet access to be rendered (unlikely) then it can use the internet connection one would have used to upload the file in the first place.
- chrisjj 2mo agoApart from exfiltration, no reason at all.
- mokshablr 2mo agopptx by a mile. A slide is absolutely positioned shapes with a whole layout inheritance thing going on so the JS renderer ends up reimplementing a whole layout engine, and it gets you to "approximately right" and stops there. Charts I gave up on. docx was annoying in a different way. Bullets came out as junk characters for a while and I couldnt work out why. I then found that Word writes them as private use area codepoints in the Symbol font so unless you have that exact font you get some junk. I just map them back to unicode after the render. xlsx was the easy one, SheetJS does the hard part. On faithful though none of this is faithful the way LibreOffice is. Its more that "you can read the document and it looks roughly right" which is what I wanted out of an app of 14MB.
- TekMol 2mo agoThis is interesting. I thought granting internet access to apps is not avoidable on Android. When an app does not request internet, is it really guaranteed that it cannot talk to the outside world? Or is it having other avenues like opening a browser or some other component with a custom url or something? Update: I just asked Gemini, and it does not look good: An Android app without the INTERNET permission is not guaranteed to be isolated from the outside world. While it cannot make direct network connections itself, it can use several other mechanisms to transmit data externally: Intent-Based Communication (The Browser) An app can launch an explicit or implicit Intent to hand data over to another app that does have internet access. That means the app can open a system browser using a URL containing the data it wants to transmit. It can also load a Chrome Custom Tab inside its own UI task, passing data through the URL string. There is also Inter-Process Communication: If two apps from the same developer share a User ID (sharedUserId), they run in the same process and share all permissions, including internet access. There is also the concept of Content Providers: Content Providers allow apps to share data. An offline app can write data into a shared database or a public Content Provider. A secondary, online-enabled app can then read that database and upload the contents.
- sheept 2mo agoI guess that makes sense. Since most non-privacy-focused Android distributions don't let users turn off the internet permission, keeping the permission secure likely ceased to be a priority. The full list of bypasses is likely much larger because it doesn't fall in the scope of bug bounties.
- well_ackshually 2mo agopermission.INTERNET has _never_ been a dangerous permission on android.
- marak830 2mo agoChrist that's depressing. I'm assuming that all works even with application sandboxing (1) or am I mis-reading how that is applied to applications. Man I need to move my movement to GrapheneOS up to be sooner. (1) https://source.android.com/docs/security/app-sandbox https://source.android.com/docs/security/app-sandbox
- sgc 2mo agoCan you add odt, ods, etc support? I use libreoffice viewer but it would be nice to reduce the number of apps on my device.
- mokshablr 2mo agoods actually already works.. it goes through the same SheetJS path as xlsx and csv. But your question made me check properly and there's a bug... I never registered the OpenDocument mime type so Gander wont show up in the "open with" list when you tap a .ods. Opening it from inside the app works fine. Fixed in the manifest just now, it'll be in the next build. odt and odp dont work at all. odt is a fair ask.. its the same shape of problem as docx so it's doable. Less sure about odp though.. the pptx renderer is already the weakest part of this. And yeah, fewer apps on the phone was pretty much the whole reason I started building this.
- dheerajvs 2mo agoTried it and I love it. Good work! Have you considered hosting it on F-Droid?
- clort 2mo agoThat is listed in the Roadmap section right at the end of the README.md file
- netfortius 2mo agoObtainium works just fine with the github source
- xigoi 2mo agoF-Droid makes it much easier to discover apps.
- HelloUsername 2mo agoSeems nice, will check it out. I liked this one as well: "Little File Explorer – File Manager for Android 1.0 and above" 28.dec.2023 https://news.ycombinator.com/item?id=38789958 https://news.ycombinator.com/item?id=38789958
- ziagham 2mo agoNice idea
- adamddev1 2mo agoThis looks great. It seems crazy how we got to this point where this is a revolutionary, unique product.
- est 2mo agoThis is super cool. > Requirements: JDK 17+ and the Android SDK (platform 35). Bummer. I am stuck with Android 14 for the moment.
- notpushkin 2mo agoWhich is also weird considering most of formats are just opened in a WebView with a respective JS-based viewer. Surely it can be backported?
- shscs911 2mo agoJust installed it in my Android 10 phone and it works.
- mokshablr 2mo agoSorry, that's on my README. That line is under "Build from source" so it's what you need to compile it, not to run it. minSdk is 26, so Android 8 and up. Android 14 is well past the floor, you're good to go!
- noja 2mo agoThis is a great idea - but doesn't Android inject network permission into all apks? It did in the past.
- nextaccountic 2mo agoCould you publish to a store? Either/or Google Play or F-Droid
- chrisjj 2mo agoSeconded.
- ashish004 2mo agoThis is cool!
- chrisjj 2mo agoWell done! > A tiny, open source, fully offline file viewer for Android that opens PDF, Word, Perhaps correct Word to DOCX. Word is not just DOCX and DOCX is not just Word. This user needs DOC viewing and would be disappointed having installed this app. I wish you every success with this.
- mokshablr 2mo agoFair enough, fixed that in the README.
- chesscoachx 2mo agoGreat. You built an excellent tool to solve a real-world problem: being able to open files on the fly without granting internet access and without having to install 400 MB bloated suites that track everything.
- weberer 2mo agoThanks, Claude
- freedomben 2mo agoGreat work! A tool like this is sorely needed. How is accessibility? Do PDFs work with screenreaders for example?
- mathfailure 2mo agoI don't understand the comments to this post. Don't people use firewalls anymore to limit internet access only to the apps really needing it?
- rationalist 2mo agoNo, most people do not.
- PennRobotics 2mo agoI had the goal to eliminate annoying ads in some apps that I use. I deleted the user data for those apps and also applied restrictions so they could no longer access internet. Ads still showed up. I mostly stopped using these types of apps and switched to F-Droid alternatives.
- atmanactive 2mo agoCould you please recommend a comfortable personal firewall app for Android?
- ies7 2mo agoRethink: dns + firewall + vpn
- mathfailure 1mo agoAFWall+, of course.
- fg137 2mo agoFirewalls are already a pain for desktop OS. They are basically unusable on mobile for normal users.
- collabs 2mo agoTwo things I really like: 1. Markdown loads as preview 2. Plain text files wrap instead of scrolling to the right Good job and thank you for sharing
- mokshablr 2mo agoThanks for trying it out!
- aand16 2mo agoPlease add signature to readme so users can verify before installing with Obtainium eg: 5B:5C:F6:4A:94:23:7C:D5:F0:E0:85:76:00:38:BC:1C:EB:DF:18:DA:BA:5C:B3:EA:CA:7C:15:9F:22:A7:E2:4B
- mokshablr 2mo agoAdded, it's in the README under Install now. Thanks for bringing that up!
- carloslfu 2mo agothis is cool! It's amazing that it's still such a pain to do something like this with built-in Android app.
- atmanactive 2mo agoThanks for sharing. Could it be possible to add optional force-dark mode for documents as well? The feature list mentioned dark mode, but that's for app's own UI. The really awesome feature would be to be able to invert the document colors so that the document itself is shown in dark mode. Thanks.
- array4277 2mo agoThe app is pleasingly very responsive. I don't think I've used anything else on Android that lets me open and close PDFs rapidly without getting bogged down. Nice!
- snootypoot 2mo ago[dead]
- jeffwilson75 2mo ago[flagged]
- getpokedagain 2mo agoGoing to test this out. I've been very happy to see the number of new apps being developed to be installed on android via obtanium and away from the Google app store. I assume it's llms enabling folks to get quick apps out.
- celsoazevedo 2mo agoCan this open .rtf files? I know it's old, but I still receive them from time to time.
- nubinetwork 2mo agoHow does this work? I was under the impression that newer android sdk versions required permissions to access the filesystem... if you're using an older sdk, I can't really imagine the app working for longer than a year.
- Anamon 2mo agoIt's explained in the readme. Granting access to folders on the file system is a process independent from permissions. This is from the Android documentation[1]: "Because the user is involved in selecting the files or directories that your app can access, this mechanism doesn't require any system permissions […]" [1] https://developer.android.com/training/data-storage/shared/documents-files https://developer.android.com/training/data-storage/shared/d...
- nubinetwork 2mo agoI don't get why everyone went doomer a few years ago when they were implementing the newer apis then... /shrug
- maxzhdev 2mo agoUseful application. I hope the author will upload it to the store and pass Google verification