{"id":20498357,"url":"https://github.com/grapheneos/pdfviewer","last_synced_at":"2025-05-15T03:07:55.514Z","repository":{"id":38706075,"uuid":"79160566","full_name":"GrapheneOS/PdfViewer","owner":"GrapheneOS","description":"Simple Android PDF viewer based on pdf.js and content providers. The app doesn't require any permissions. The PDF stream is fed into the sandboxed WebView without giving it access to content or files. CSP is used to enforce that the JavaScript and styling properties within the WebView are entirely static.","archived":false,"fork":false,"pushed_at":"2025-04-13T02:57:49.000Z","size":4560,"stargazers_count":715,"open_issues_count":42,"forks_count":108,"subscribers_count":25,"default_branch":"main","last_synced_at":"2025-04-14T03:11:52.346Z","etag":null,"topics":["android","grapheneos","pdf","pdf-viewer","pdfjs","security"],"latest_commit_sha":null,"homepage":"https://grapheneos.org/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GrapheneOS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"thestinger","custom":"https://grapheneos.org/donate"}},"created_at":"2017-01-16T21:20:40.000Z","updated_at":"2025-04-13T02:57:52.000Z","dependencies_parsed_at":"2023-09-24T17:39:27.344Z","dependency_job_id":"bde73531-ec31-4603-b663-082ebbdd4980","html_url":"https://github.com/GrapheneOS/PdfViewer","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrapheneOS%2FPdfViewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrapheneOS%2FPdfViewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrapheneOS%2FPdfViewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrapheneOS%2FPdfViewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GrapheneOS","download_url":"https://codeload.github.com/GrapheneOS/PdfViewer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254264769,"owners_count":22041794,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","grapheneos","pdf","pdf-viewer","pdfjs","security"],"created_at":"2024-11-15T18:13:55.296Z","updated_at":"2025-05-15T03:07:50.504Z","avatar_url":"https://github.com/GrapheneOS.png","language":"Java","funding_links":["https://github.com/sponsors/thestinger","https://grapheneos.org/donate"],"categories":[],"sub_categories":[],"readme":"Simple Android PDF viewer based on pdf.js and content providers. The app\ndoesn't require any permissions. The PDF stream is fed into the sandboxed\nWebView without giving it access to the network, files, content providers or\nany other data.\n\nContent-Security-Policy is used to enforce that the JavaScript and styling\nproperties within the WebView are entirely static content from the APK assets\nalong with blocking custom fonts since pdf.js handles rendering those itself.\n\nIt reuses the hardened Chromium rendering stack while only exposing a tiny\nsubset of the attack surface compared to actual web content. The PDF rendering\ncode itself is memory safe with dynamic code evaluation disabled, and even if\nan attacker did gain code execution by exploiting the underlying web rendering\nengine, they're within the Chromium renderer sandbox with less access than it\nwould have within the browser.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrapheneos%2Fpdfviewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrapheneos%2Fpdfviewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrapheneos%2Fpdfviewer/lists"}