[{"data":1,"prerenderedAt":481},["ShallowReactive",2],{"project-49119425":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":45,"post_text":48,"what":49,"said":106,"maker_in_thread":219,"shape":228,"grid":232,"attempts":442,"same_week":443,"maker_shows":34,"maker_hidden":473,"reader_version":474,"card":475},"49119425","Gander","An Android file viewer that asks for no permissions","title","Show HN: Gander, an Android file viewer that asks for no permissions","https:\u002F\u002Fgithub.com\u002Fmokshablr\u002Fgander","github.com","mokshablr",1785476713,2026,211,79,267,4366,7,"notable","dev_tools","file viewer","mobile_app",[24,25,26,27],"android file viewer","offline document viewer","pdf viewer android","no permissions","loved",0.379,{"positive":31,"neutral":32,"mixed":33,"critical":34},13,15,0,1,29,{"privacy":37,"docs":38,"idea":39,"design":41,"execution":43,"performance":44},{"positive":34,"critical":34},{"positive":33,"critical":33},{"positive":40,"critical":33},4,{"positive":42,"critical":33},2,{"positive":34,"critical":33},{"positive":34,"critical":33},[34,33,33,33,46,33,33,33,33,33,33,33,33,33,47,46,33,46,47,47,47,33,33,47,47,47,33,33,33,33,47,46,46,47,46,46,46,46,46,46],5,3,"Hi HN,\n\nI built an Android file viewer that opens PDF, Word, Excel, PowerPoint, images, video, audio, Markdown and code, and asks for no permissions at all.\n\nI 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.\n\nGander holds no permissions, not even INTERNET so the OS itself guarantees the file cannot leave the ph",{"problem":50,"audience":56,"pricing":65,"motivation":69,"time_to_build":73,"stack":74,"openness":103,"stage":104,"team_size":105},{"value":51,"source":52,"evidence":53},"Opening files people send without installing a large office suite or granting storage and internet access","maker",[54],{"id":55},"post",{"value":57,"source":58,"evidence":59},"Android users who open files sent to them","inferred",[60,61],{"id":55},{"id":62,"by":63,"text":64},"49121537","chesscoachx","Great. 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…",{"value":66,"source":52,"evidence":67},"Free, MIT licensed",[68],{"id":55},{"value":70,"source":52,"evidence":71},"Uneasy about opening files people send and wanting to avoid large suites and uploading servers",[72],{"id":55},null,[75,79,83,87,93],{"value":76,"source":52,"evidence":77},"Pdfium",[78],{"id":55},{"value":80,"source":52,"evidence":81},"Media3",[82],{"id":55},{"value":84,"source":52,"evidence":85},"Bundled JS libraries in a WebView",[86],{"id":55},{"value":88,"source":52,"evidence":89},"SheetJS",[90],{"id":91,"by":11,"text":92},"49121789","pptx 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…",{"value":94,"source":52,"evidence":95},"JDK 17+ and Android SDK for building",[96,100],{"id":97,"by":98,"text":99},"49120704","est","This is super cool. > Requirements: JDK 17+ and the Android SDK (platform 35). Bummer. I am stuck with Android 14 for the moment.",{"id":101,"by":11,"text":102},"49121848","Sorry, 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…","open_source","launched","unknown",{"praise":107,"objections":131,"requests":140,"questions":181,"alternatives":207},[108,116,124],{"value":109,"source":110,"evidence":111},"Fast and responsive, especially PDFs","commenter",[112],{"id":113,"by":114,"text":115},"49123024","array4277","The 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!",{"value":117,"source":110,"evidence":118},"Offline, privacy-respecting design",[119,120],{"id":62,"by":63,"text":64},{"id":121,"by":122,"text":123},"49121305","andyjohnson0","This is all very true, unfortunately. Google designed Android as a an OS for internet appliances. They're not interested in local-only apps working on local files. But I think…",{"value":125,"source":110,"evidence":126},"Markdown preview and wrapped plain text",[127],{"id":128,"by":129,"text":130},"49121698","collabs","Two 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",[132,136],{"value":133,"source":110,"evidence":134},"Requires JDK 17 and Android 14 build limits for some users",[135],{"id":97,"by":98,"text":99},{"value":137,"source":52,"evidence":138},"Office rendering is approximate, not faithful",[139],{"id":91,"by":11,"text":92},[141,156,163,170],{"value":142,"source":110,"evidence":143},"Publish to F-Droid or Google Play",[144,148,152],{"id":145,"by":146,"text":147},"49120070","dheerajvs","Tried it and I love it. Good work! Have you considered hosting it on F-Droid?",{"id":149,"by":150,"text":151},"49121378","nextaccountic","Could you publish to a store? Either\u002For Google Play or F-Droid",{"id":153,"by":154,"text":155},"49151428","maxzhdev","Useful application. I hope the author will upload it to the store and pass Google verification",{"value":157,"source":110,"evidence":158},"Support ODT and ODS formats",[159],{"id":160,"by":161,"text":162},"49120069","sgc","Can you add odt, ods, etc support? I use libreoffice viewer but it would be nice to reduce the number of apps on my device.",{"value":164,"source":110,"evidence":165},"Dark mode for document content",[166],{"id":167,"by":168,"text":169},"49122677","atmanactive","Thanks 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…",{"value":171,"source":110,"evidence":172},"Support for RTF and legacy DOC",[173,177],{"id":174,"by":175,"text":176},"49125409","celsoazevedo","Can this open .rtf files? I know it's old, but I still receive them from time to time.",{"id":178,"by":179,"text":180},"49121487","chrisjj","Well 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…",[182,193,200],{"value":183,"source":110,"evidence":184},"How the no-internet guarantee holds on Android",[185,189],{"id":186,"by":187,"text":188},"49119998","TekMol","This 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…",{"id":190,"by":191,"text":192},"49121277","noja","This is a great idea - but doesn't Android inject network permission into all apks? It did in the past.",{"value":194,"source":110,"evidence":195},"How file access works without storage permissions",[196],{"id":197,"by":198,"text":199},"49131102","nubinetwork","How 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…",{"value":201,"source":110,"evidence":202},"Accessibility with screen readers",[203],{"id":204,"by":205,"text":206},"49121660","freedomben","Great work! A tool like this is sorely needed. How is accessibility? Do PDFs work with screenreaders for example?",[208,212],{"value":209,"source":110,"evidence":210},"LibreOffice viewer",[211],{"id":160,"by":161,"text":162},{"value":213,"source":110,"evidence":214},"Little File Explorer",[215],{"id":216,"by":217,"text":218},"49120143","HelloUsername","Seems 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:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=38789958",{"comments":46,"answered":34,"key":220},[221,224,225],{"id":222,"text":223},"49126795","Added, it's in the README under Install now. Thanks for bringing that up!",{"id":91,"text":92},{"id":226,"text":227},"49128728","Fair enough, fixed that in the README.",{"commenters":229,"max_depth":40,"maker_replies":46,"first_comment_mins":230,"lifespan_hours":231},58,8,222,[233,235,239,242,245,249,252,254,258,260,262,265,267,269,272,274,277,280,283,285,288,290,293,297,300,302,305,307,311,313,315,319,322,326,330,331,332,334,337,341,344,347,350,352,354,355,356,358,359,363,367,370,373,375,378,380,383,387,389,392,396,397,400,403,405,408,410,414,417,419,421,423,425,429,433,437,439],[186,33,34,234,187,33],"project\u002Fcritical\u002Fprivacy",[236,33,33,237,238,33],"49120179","commenter\u002Fneutral\u002Fprivacy","sheept",[240,33,33,237,241,33],"49122143","well_ackshually",[243,33,33,237,244,33],"49120388","marak830",[246,33,33,247,248,33],"49121136","commenter\u002Fneutral\u002Fnone","csande17",[250,33,33,237,251,33],"49121284","murderfs",[253,33,33,237,187,33],"49121173",[255,33,33,256,257,33],"49120457","other\u002Fneutral\u002Fnone","nottorp",[121,33,46,259,122,33],"project\u002Fpositive\u002Fprivacy",[261,33,33,237,179,33],"49121395",[263,33,33,237,264,33],"49121558","j16sdiz",[266,33,33,237,179,33],"49132635",[268,33,33,237,241,33],"49122170",[270,33,33,237,271,33],"49121419","inigyou",[273,33,33,237,179,33],"49121496",[275,33,33,237,276,33],"49121677","drunner",[278,33,33,237,279,33],"49121751","drupe",[281,33,33,237,282,33],"49121521","zombot",[284,33,33,237,276,33],"49121686",[286,33,33,237,287,33],"49121532","yonatan8070",[289,33,33,237,241,33],"49122133",[291,33,33,256,292,33],"49131185","rrvsh",[294,33,33,295,296,33],"49124266","other\u002Fneutral\u002Fprivacy","exe34",[298,33,33,256,299,33],"49131081","hod6654",[301,33,33,256,296,33],"49132043",[303,33,33,237,304,33],"49126740","reorder9695",[306,33,33,256,292,33],"49131178",[308,34,47,309,310,33],"49122125","project\u002Fneutral\u002Fdocs","aand16",[222,34,33,312,11,34],"maker\u002Fneutral\u002Fdocs",[145,42,46,314,146,33],"project\u002Fpositive\u002Fnone",[316,42,33,317,318,33],"49120620","commenter\u002Fneutral\u002Fdocs","clort",[320,42,33,317,321,33],"49121444","netfortius",[323,42,47,324,325,33],"49132239","project\u002Fneutral\u002Fnone","xigoi",[327,47,46,328,329,33],"49120636","project\u002Fpositive\u002Fidea","adamddev1",[160,40,47,324,161,33],[149,46,47,324,150,33],[333,46,47,324,179,33],"49121502",[167,335,47,336,168,33],6,"project\u002Fneutral\u002Fdesign",[338,18,47,339,340,33],"49119467","maker\u002Fneutral\u002Fexecution","Mobeen0119",[342,18,33,237,343,33],"49119973","vrighter",[345,18,33,237,346,33],"49120043","Chilinot",[348,18,33,237,349,33],"49120488","echoangle",[351,18,33,237,343,33],"49152860",[353,18,33,237,179,33],"49121452",[91,18,33,339,11,34],[216,230,47,324,217,33],[178,357,47,309,179,33],9,[226,357,33,312,11,34],[360,361,47,324,362,33],"49230664",10,"quickdeer",[364,365,33,295,366,33],"49121756",11,"mathfailure",[368,365,33,295,369,33],"49121893","rationalist",[371,365,33,295,372,33],"49122157","PennRobotics",[374,365,33,295,168,33],"49122618",[376,365,33,295,377,33],"49124098","ies7",[379,365,33,295,366,33],"49226930",[381,365,33,295,382,33],"49122774","fg137",[384,385,33,295,386,33],"49120362",12,"tim-projects",[97,31,47,388,98,33],"project\u002Fneutral\u002Fexecution",[390,31,47,388,391,33],"49120716","notpushkin",[393,31,46,394,395,33],"49120749","project\u002Fpositive\u002Fexecution","shscs911",[101,31,33,312,11,34],[128,398,46,399,129,33],14,"project\u002Fpositive\u002Fdesign",[401,398,33,402,11,34],"49151076","maker\u002Fpositive\u002Fnone",[197,32,47,404,198,33],"project\u002Fneutral\u002Fprivacy",[406,32,33,247,407,33],"49142790","Anamon",[409,32,33,247,198,33],"49143455",[411,412,46,328,413,33],"49124654",16,"getpokedagain",[113,415,46,416,114,33],17,"project\u002Fpositive\u002Fperformance",[153,418,46,314,154,33],18,[190,420,47,404,191,33],19,[204,422,46,399,205,33],20,[174,424,47,388,175,33],21,[426,427,46,328,428,33],"49122621",22,"carloslfu",[430,431,46,314,432,33],"49121476",23,"ashish004",[434,435,46,314,436,33],"49120381",24,"ziagham",[62,438,46,328,63,33],25,[440,438,33,247,441,33],"49123234","weberer",[],[444,449,454,458,463,468],{"id":445,"name":446,"points":447,"category":448},"49124218","Elevators",1680,"learning_science",{"id":450,"name":451,"points":452,"category":453},"49170165","Inclusive Color Space",627,"creative",{"id":455,"name":456,"points":457,"category":453},"49149966","Isopolis",350,{"id":459,"name":460,"points":461,"category":462},"49140396","Cycloidal Gearbox",338,"hardware",{"id":464,"name":465,"points":466,"category":467},"49158333","Swiftlet",312,"ai",{"id":469,"name":470,"points":471,"category":472},"49145937","Kakehashi",255,"infrastructure",false,"v2",{"id":476,"name":5,"line":6,"ai":473,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":477,"top":18,"kw":478,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":479,"url":9,"mix":480,"praise":109,"objection":133,"sub":21},49119425,0.38,[24,25,26,27],"1000500000000035053330033300003553555555",[31,32,33,34],1794036706725]