{"id":47245429,"url":"https://github.com/yaoyao2mm/cheatreader","last_synced_at":"2026-04-09T03:00:29.558Z","repository":{"id":344307840,"uuid":"1181343285","full_name":"yaoyao2mm/cheatreader","owner":"yaoyao2mm","description":"A floating desktop reader with transparent text-only mode for low-distraction reading.","archived":false,"fork":false,"pushed_at":"2026-03-29T01:10:49.000Z","size":85720,"stargazers_count":246,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-03T00:39:08.254Z","etag":null,"topics":["desktop","epub","flutter","macos","markdown","reader"],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yaoyao2mm.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-14T02:46:06.000Z","updated_at":"2026-04-03T00:09:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yaoyao2mm/cheatreader","commit_stats":null,"previous_names":["yaoyao2mm/cheatreader"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/yaoyao2mm/cheatreader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyao2mm%2Fcheatreader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyao2mm%2Fcheatreader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyao2mm%2Fcheatreader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyao2mm%2Fcheatreader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yaoyao2mm","download_url":"https://codeload.github.com/yaoyao2mm/cheatreader/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyao2mm%2Fcheatreader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31583290,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["desktop","epub","flutter","macos","markdown","reader"],"created_at":"2026-03-14T05:18:52.038Z","updated_at":"2026-04-09T03:00:29.550Z","avatar_url":"https://github.com/yaoyao2mm.png","language":"Dart","readme":"\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eEnglish\u003c/strong\u003e · \u003ca href=\"./README.zh-CN.md\"\u003e简体中文\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/assets/cheatreader-hero.svg\" alt=\"CheatReader hero banner\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA floating desktop reader for low-distraction reading.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  CheatReader keeps books visible in the corner of your screen without turning your desktop into a full reading app.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Platform\" src=\"https://img.shields.io/badge/platform-Flutter-54C5F8?style=flat-square\"\u003e\n  \u003cimg alt=\"Desktop\" src=\"https://img.shields.io/badge/focus-desktop-2F4858?style=flat-square\"\u003e\n  \u003cimg alt=\"Formats\" src=\"https://img.shields.io/badge/formats-txt%20%7C%20epub%20%7C%20html%20%7C%20md%20%7C%20fb2%20%7C%20docx%20%7C%20pdf-B08968?style=flat-square\"\u003e\n  \u003cimg alt=\"UI\" src=\"https://img.shields.io/badge/mode-transparent%20text--only-F0E6DC?style=flat-square\u0026labelColor=16110F\u0026color=F0E6DC\"\u003e\n\u003c/p\u003e\n\n\u003e [!IMPORTANT]\n\u003e CheatReader is only a local multi-format file reader.\n\u003e It does not support importing books or content from any URL, web link, online source, or remote feed.\n\u003e It does not support, encourage, or endorse any act that infringes the lawful rights of writers, publishers, or other copyright holders.\n\u003e This project is shared for learning and technical exchange only.\n\u003e The author does not intend to use this software for commercial activity or to profit from it.\n\n## Why It Exists\n\nTraditional reading apps want your full attention.\nCheatReader does the opposite: it stays light, quiet, and easy to tuck into the edge of your workspace while you keep doing other things.\n\n## Highlights\n\n- Transparent text-only mode that lets the app disappear into your desktop\n- Compact single-line and multi-line reading modes\n- Configurable mode switching via double click, middle click, or keyboard shortcut\n- Adjustable line spacing, reading width, and keyboard controls for longer sessions\n- Direct jump by line, page, percentage, and text search with previous/next match navigation\n- Built-in custom font loading with a dedicated user-selected font option\n- Boss-key style hide and restore support without losing reading state\n- Support for `txt`, `epub`, `html`, `markdown`, `fb2`, `docx`, and `pdf`\n- Local managed library copies so imported books still restore after restart\n- Lightweight desktop-first reading flow with drag-and-drop import\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/assets/cheatreader-intro-transparent-en.svg\" alt=\"CheatReader transparent mode intro\" /\u003e\n\u003c/p\u003e\n\n![CheatReader full-screen demo](https://raw.githubusercontent.com/yaoyao2mm/cheatreader/main/.github/assets/full-screen-1.gif)\n\n## Platform Support\n\n| Platform | Status | Notes |\n| --- | --- | --- |\n| macOS | Best supported | Transparent overlay mode is fully tuned here |\n| Windows | Supported | Same reading flow, frameless desktop window, test recommended on target machine |\n| Linux | Supported | Same reading flow, frameless desktop window, Ubuntu startup now prefers multi-line recovery-safe behavior |\n\n## Supported Formats\n\n| Format | Status | Notes |\n| --- | --- | --- |\n| `txt` | Full | Encoding-aware plain text import |\n| `epub` | Text extraction | Chapter text is extracted into the existing reader flow |\n| `html` / `htm` / `xhtml` | Text extraction | Ignores page chrome and keeps readable body text |\n| `md` / `markdown` | Text extraction | Strips markdown syntax into plain readable text |\n| `fb2` | Text extraction | Pulls FictionBook section text into the reader |\n| `docx` | Text extraction | Extracts readable document body text into the existing text-first flow |\n| `pdf` | Text extraction | Best-effort text-layer extraction; image-only or layout-heavy PDFs may fail or read imperfectly |\n\n## Run\n\n```bash\nflutter pub get\nflutter run -d macos\n```\n\n### Install on macOS without an Apple Developer account\n\nIf you download the unsigned macOS app from GitHub Releases, macOS may block it the first time you launch it.\n\nYou can remove the quarantine flag in Terminal:\n\n```bash\nxattr -dr com.apple.quarantine /Applications/cheatreader.app\n```\n\nIf you keep the app somewhere else, replace the path with the actual app location.\n\n### Run on Windows\n\n```bash\nflutter config --enable-windows-desktop\nflutter run -d windows\n```\n\n### Run on Linux\n\n```bash\nflutter config --enable-linux-desktop\nflutter run -d linux\n```\n\nIf a saved floating-window layout becomes hard to find, you can reset just the\ndisplay-related settings without wiping the bookshelf:\n\n```bash\ncheatreader --reset-display\n```\n\n## Desktop Prerequisites\n\n### Windows\n\n- Flutter with Windows desktop enabled\n- Visual Studio with Desktop development with C++\n\n### Linux\n\n- Flutter with Linux desktop enabled\n- `clang`, `cmake`, `ninja-build`, `pkg-config`\n- GTK development packages required by Flutter desktop\n\nTypical Ubuntu/Debian setup:\n\n```bash\nsudo apt-get update\nsudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev\n```\n\n## Verify\n\n```bash\nflutter test\nflutter analyze\n```\n\nFor desktop floating-window changes, also run the manual checklist in\n[`manual-test-files/regression-checklist.md`](./manual-test-files/regression-checklist.md).\n\nYou can also test platform builds directly:\n\n```bash\nflutter build windows\nflutter build linux\n```\n\n## Todo\n\nThis section highlights the feedback that comes up most often, so users can see what we plan to prioritize next.\n\n- [x] Add an in-app About section with version info and a bug-report entry\n- [ ] Improve the bookshelf experience with better organization and recovery for imported books\n- [x] Add more reading controls such as line spacing, reading width, and shortcut customization\n- [ ] Improve desktop installation and distribution so first-time setup feels easier\n- [ ] Keep improving import stability for edge-case `epub`, `html`, and encoded text files\n\n## Releases\n\nThis repository is configured for automated desktop releases with GitHub Actions.\n\n- Push a tag like `v0.1.0`\n- GitHub Actions runs analyze and tests\n- The workflow builds macOS, Windows, and Linux release artifacts\n- GitHub Release assets are uploaded automatically\n\nYou can also trigger the workflow manually from the Actions tab with a tag name.\n\n## License\n\nThis repository is licensed under the [CheatReader Non-Commercial License](./LICENSE).\nYou may use, study, modify, and share this code for personal learning and other non-commercial purposes only.\nCommercial use, resale, paid distribution, sublicensing, or using this project and its derivatives to generate revenue is not permitted without prior written permission from the copyright holder.\n\n## Project Direction\n\nCheatReader is intentionally opinionated:\n\n- minimal chrome\n- floating utility, not a bookshelf-heavy library app\n- text-first extraction over perfect original-format rendering\n\nThat keeps the experience fast, calm, and easy to leave open all day.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaoyao2mm%2Fcheatreader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyaoyao2mm%2Fcheatreader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaoyao2mm%2Fcheatreader/lists"}