{"id":47270584,"url":"https://github.com/zachflower/codereader","last_synced_at":"2026-03-15T11:27:32.227Z","repository":{"id":340220503,"uuid":"1162105074","full_name":"zachflower/codereader","owner":"zachflower","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-23T20:32:06.000Z","size":1649,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-24T02:51:07.955Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/zachflower.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-02-19T21:55:12.000Z","updated_at":"2026-02-23T20:32:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/zachflower/codereader","commit_stats":null,"previous_names":["zachflower/codereader"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/zachflower/codereader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachflower%2Fcodereader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachflower%2Fcodereader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachflower%2Fcodereader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachflower%2Fcodereader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zachflower","download_url":"https://codeload.github.com/zachflower/codereader/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachflower%2Fcodereader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30540855,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-15T07:17:37.589Z","status":"ssl_error","status_checked_at":"2026-03-15T07:17:31.738Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-03-15T11:27:30.680Z","updated_at":"2026-03-15T11:27:32.222Z","avatar_url":"https://github.com/zachflower.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CodeReader\n\n\u003e **Shhh... you're working.**\n\nCodeReader is a VS Code extension that renders EPUB ebooks as syntax-highlighted source code. Book content is wrapped in realistic-looking classes, methods, comments, and docstrings so your \"code review\" is actually the next chapter of your novel.\n\nSupports 18 programming languages (and counting) for rendering, remembers your reading position across sessions, and lets you save and manage highlighted passages.\n\n![Screenshot of CodeReader rendering an EPUB as Python code, with a highlighted passage and the status bar showing \"Python\".](./screenshot.png)\n\n## Table of Contents\n\n- [Features](#features)\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Commands](#commands)\n- [Configuration](#configuration)\n- [Supported Languages](#supported-languages)\n- [Known Issues](#known-issues)\n- [License](#license)\n\n## Features\n\n- **Stealth rendering** - EPUB content is transformed into realistic-looking source code using classes, methods, docstrings, comments, and variable assignments.\n- **18 languages** - Switch the rendering language at any time via the status bar or command palette. Choices include Python, TypeScript, Rust, Go, Java, Clojure, and more.\n- **Auto-registers for `.epub` files** - Double-clicking any `.epub` in the Explorer opens it directly in CodeReader.\n- **Progress tracking** - Your scroll position is saved per book and restored the next time you open it.\n- **Highlights** - Select any text and it is saved as a highlight (yellow background). Highlights persist across sessions.\n- **Hover tooltips on highlights** - Hover over a highlighted passage to preview it and get a one-click \"Remove highlight\" link.\n- **Remove highlights** - Via the right-click context menu, the command palette, or the hover tooltip.\n- **Word wrap** - Automatically enables word wrap when a book is opened (configurable).\n- **Read-only documents** - The virtual document cannot be accidentally edited.\n- **Status bar indicator** - Shows the active rendering language; click it to switch.\n\n## Installation\n\n### From the VS Code Marketplace\n\n\u003e Search for **CodeReader** in the Extensions view (`Ctrl+Shift+X`) and click **Install**.\n\n### From a `.vsix` Package\n\n1. Download the latest `.vsix` file from the [Releases](../../releases) page.\n2. In VS Code, open the Extensions view (`Ctrl+Shift+X`).\n3. Click the **`...`** menu in the top-right corner and choose **Install from VSIX…**\n4. Select the downloaded file.\n\n## Usage\n\n### Opening a Book\n\n**Option A - Command palette:**\n\n1. Press `Ctrl+Shift+P` (or `Cmd+Shift+P` on macOS).\n2. Run **CodeReader: Open EPUB**.\n3. Select any `.epub` file.\n\n**Option B - File Explorer:**\n\nDouble-click any `.epub` file in the VS Code Explorer. CodeReader is the default editor for `.epub` files and should open automatically (or be an option if opening a binary ePUB, such as one with complex formatting or images).\n\n### Switching the Rendering Language\n\n- Click the language indicator in the **status bar** (bottom-right, visible whenever a book is open).\n- Or run **CodeReader: Switch Language** from the command palette.\n\nThe book re-renders immediately in the chosen language.\n\n### Highlights\n\n- **Add:** Select any text - it is highlighted automatically after a short debounce delay (~600 ms). You can also run **CodeReader: Highlight Selection** from the command palette.\n- **Remove:** Right-click anywhere inside a highlighted passage and choose **CodeReader: Remove Highlight**, or hover over the passage and click the **Remove highlight** link in the tooltip.\n\n### Progress\n\nYour reading position (the topmost visible line) is saved continuously. The next time you open the same book, the view is restored to where you left off.\n\n## Commands\n\n| Command | Title | Description |\n|---|---|---|\n| `codereader.openEpub` | CodeReader: Open EPUB | Opens a file picker to select an `.epub` file. |\n| `codereader.switchLanguage` | CodeReader: Switch Language | Displays a quick-pick menu to change the rendering language. |\n| `codereader.removeHighlight` | CodeReader: Remove Highlight | Removes the highlight at the current cursor position (also available in the editor context menu). |\n\n## Configuration\n\nSettings are available under **Settings → Extensions → CodeReader** or in `settings.json`.\n\n| Setting | Type | Default | Description |\n|---|---|---|---|\n| `codereader.language` | `string` | `\"python\"` | Programming language used to render EPUB content. See [Supported Languages](#supported-languages) for valid values. |\n| `codereader.wordWrap` | `boolean` | `true` | Automatically enable word wrap when opening a book. Does not affect other editors. |\n\n**Example `settings.json`:**\n\n```json\n{\n  \"codereader.language\": \"rust\",\n  \"codereader.wordWrap\": true\n}\n```\n\n## Supported Languages\n\n| Label | Setting Value |\n|---|---|\n| Bash | `shellscript` |\n| Batch | `bat` |\n| C | `c` |\n| C# | `csharp` |\n| C++ | `cpp` |\n| Clojure | `clojure` |\n| Go | `go` |\n| Java | `java` |\n| JavaScript | `javascript` |\n| Objective-C | `objectivec` |\n| PHP | `php` |\n| PowerShell | `powershell` |\n| Python | `python` |\n| Ruby | `ruby` |\n| Rust | `rust` |\n| Swift | `swift` |\n| TypeScript | `typescript` |\n| Visual Basic | `vb` |\n\n## Known Issues\n\n- **Basic HTML stripping** - EPUB HTML is processed with regex-based tag removal. Heavily formatted EPUBs (tables, nested lists, custom fonts) may produce stray characters or awkward line breaks.\n- **No image support** - Images embedded in EPUBs are silently ignored (they would rather break the disguise anyway).\n- **Chapter titles** - Chapter titles are currently generated as `Chapter 1`, `Chapter 2`, etc. Actual titles from the EPUB TOC are not yet extracted.\n- **Large EPUBs** - Very large books are rendered in one pass and held in memory. Opening them may be slow on low-spec machines.\n\n## License\n\nThis project is licensed under the [MIT](LICENSE). \u0026copy; 2026 Zachary Flower. All rights reserved.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzachflower%2Fcodereader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzachflower%2Fcodereader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzachflower%2Fcodereader/lists"}