{"id":50878719,"url":"https://github.com/decryptable/octonext","last_synced_at":"2026-06-15T12:02:11.583Z","repository":{"id":362383410,"uuid":"1258273982","full_name":"decryptable/octonext","owner":"decryptable","description":"A fast, clean code tree sidebar for GitHub with themes, file icons, search, bookmarks, PR navigation, and downloads.","archived":false,"fork":false,"pushed_at":"2026-06-04T00:37:47.000Z","size":756,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-04T02:12:08.202Z","etag":null,"topics":["chrome","chrome-extension","chrome-extensions","developer-tools","explorer","firefox","firefox-addon","firefox-extension","git","github"],"latest_commit_sha":null,"homepage":"","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/decryptable.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","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},"funding":{"github":["decryptable"],"custom":["https://saweria.co/decryptable"]}},"created_at":"2026-06-03T12:32:54.000Z","updated_at":"2026-06-04T00:37:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/decryptable/octonext","commit_stats":null,"previous_names":["decryptable/octonext"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/decryptable/octonext","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decryptable%2Foctonext","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decryptable%2Foctonext/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decryptable%2Foctonext/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decryptable%2Foctonext/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/decryptable","download_url":"https://codeload.github.com/decryptable/octonext/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decryptable%2Foctonext/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34361403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"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":["chrome","chrome-extension","chrome-extensions","developer-tools","explorer","firefox","firefox-addon","firefox-extension","git","github"],"created_at":"2026-06-15T12:02:06.039Z","updated_at":"2026-06-15T12:02:11.577Z","avatar_url":"https://github.com/decryptable.png","language":"TypeScript","funding_links":["https://github.com/sponsors/decryptable","https://saweria.co/decryptable"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"#\"\u003e\u003cimg src=\"public/banner.svg\" alt=\"OctoNext — a file-tree sidebar for GitHub\" width=\"100%\" /\u003e\u003c/a\u003e\n\n\u003cbr /\u003e\n\nA **file-tree sidebar for GitHub**. Browse any repo without page reloads.\nManifest V3, TypeScript, [Bun](https://bun.sh) — runs in your browser, **no\nbackend and no telemetry.**\n\n\u003cbr /\u003e\n\n[![CI](https://img.shields.io/github/actions/workflow/status/decryptable/octonext/ci.yml?branch=main\u0026style=flat-square\u0026label=CI)](https://github.com/decryptable/octonext/actions/workflows/ci.yml)\n[![Version](https://img.shields.io/github/v/release/decryptable/octonext?style=flat-square\u0026color=2da44e\u0026label=version)](https://github.com/decryptable/octonext/releases)\n[![Manifest V3](https://img.shields.io/badge/manifest-v3-54aeff?style=flat-square)](./src/manifest.config.ts)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178c6?style=flat-square)](./tsconfig.json)\n[![Bun](https://img.shields.io/badge/Bun-%E2%89%A51.2-f0883e?style=flat-square)](https://bun.sh)\n[![No telemetry](https://img.shields.io/badge/telemetry-none-8b949e?style=flat-square)](#privacy)\n\n\u003cbr /\u003e\n\n[![Themes](https://img.shields.io/badge/themes-22-a371f7?style=flat-square)](#themes)\n[![Icon packs](https://img.shields.io/badge/icon%20packs-Material%20%C2%B7%20Vira-a371f7?style=flat-square)](#features)\n[![Fonts](https://img.shields.io/badge/fonts-8-a371f7?style=flat-square)](#)\n[![Max file](https://img.shields.io/badge/max%20file-130%20lines-30363d?style=flat-square)](#)\n[![Tests](https://img.shields.io/badge/unit%20tests-37%20passing-2da44e?style=flat-square)](https://github.com/decryptable/octonext/actions/workflows/ci.yml)\n\n\u003cbr /\u003e\n\n[Install](#install-from-source) ·\n[Features](#features) ·\n[Themes](#themes) ·\n[Architecture](./ARCHITECTURE.md) ·\n[Contributing](./CONTRIBUTING.md) ·\n[Support](#support)\n\n\u003c/div\u003e\n\n---\n\n## Why OctoNext\n\nGitHub reloads the whole page every time you open a folder. OctoNext puts a\ncollapsible file tree next to the page instead, loading folders on demand from\nthe GitHub REST API. Navigate, search, download, and review PRs in one tab.\n\nYou only need to sign in for private repos: paste a personal access token on the\noptions page. It is checked against GitHub, then stored in `chrome.storage` and\nsent nowhere else.\n\n## Project pulse\n\nStars over time and commit activity, not a wall of count badges.\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"https://star-history.com/#decryptable/octonext\u0026Date\"\u003e\n  \u003cimg alt=\"Star history line chart\" width=\"72%\" src=\"https://api.star-history.com/svg?repos=decryptable/octonext\u0026type=Date\" /\u003e\n\u003c/a\u003e\n\n\u003cbr /\u003e\u003cbr /\u003e\n\n\u003cimg alt=\"Commit activity graph\" width=\"92%\" src=\"https://github-readme-activity-graph.vercel.app/graph?username=decryptable\u0026repo=octonext\u0026theme=github-compact\u0026hide_border=true\u0026area=true\" /\u003e\n\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003eFeatures\u003c/b\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\n| Area | What you get |\n| --- | --- |\n| **File tree** | Collapsible sidebar on `github.com` repo pages, lazy-loaded folders, expand all / collapse all, keyboard navigation, custom scrollbars |\n| **Icons** | Two full file-icon packs — Material Icon Theme and Vira — plus a minimal pack |\n| **Themes** | 22 themes including 5 animated ones — see [Themes](#themes) — with **live preview** in settings |\n| **Fonts** | 8 bundled coding fonts or system stacks, with live preview and adjustable size |\n| **Search** | Instant fuzzy file filtering with match highlighting |\n| **Pull requests** | PR panel with stats summary, searchable + paginated changed files, and review comments — all without opening the diff page |\n| **Download** | Checkbox selection; a single file downloads directly, multiple files or folders become a path-preserving ZIP |\n| **Sizes** | Total repo size in the header, plus per-folder and per-file sizes |\n| **Bookmarks** | Save repositories locally and jump back any time |\n| **Layout** | Dock left or right, resize, pin open, drag the toggle to any height |\n| **Enterprise** | GitHub Enterprise via per-domain opt-in (right-click the toolbar icon) |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ePull request panel\u003c/b\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nEverything comes from the API, so you read a PR without leaving the sidebar:\n\n- **Summary header** — open / merged / closed / draft state, title, author,\n  `base ← head` branches, and totals for changed files, additions, deletions,\n  commits, and review comments.\n- **Searchable changed files** — type to filter with live match highlighting;\n  results are cached in memory so filtering never re-fetches.\n- **Pagination** — large diffs page through in fixed chunks instead of one\n  endless scroll, with an `X–Y of N` indicator.\n- **Labels and reviewers** — surfaced as chips right in the sidebar.\n- **Jump to anything** — click a file to scroll straight to its diff, or a\n  comment to open it in context.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eInstall (from source)\u003c/b\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\n```bash\nbun install\nbun run build      # outputs the unpacked extension to dist/\n```\n\n- **Chrome / Edge** — open `chrome://extensions`, enable Developer mode, click\n  **Load unpacked**, and select `dist/`.\n- **Firefox** — run `bun run package` and load\n  `release/octonext-firefox-vX.Y.Z.zip` via `about:debugging` → This Firefox →\n  Load Temporary Add-on.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ePackaging for the stores\u003c/b\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\n```bash\nbun run package\n```\n\nProduces store-ready and self-distribution artifacts in `release/`:\n\n| Artifact | Target |\n| --- | --- |\n| `octonext-chrome-vX.Y.Z.zip` | Chrome Web Store (MV3, service worker) |\n| `octonext-chrome-vX.Y.Z.crx` | Signed CRX3 for direct Chrome install |\n| `octonext-firefox-vX.Y.Z.zip` | Firefox Add-ons upload |\n| `octonext-firefox-vX.Y.Z.xpi` | Installable Firefox package |\n\nThe CRX is signed with a key in `keys/octonext.pem`, generated on first run and\nkept out of version control. Keep it safe to preserve a stable extension ID.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDevelopment\u003c/b\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\n```bash\nbun run dev             # rebuild on change into dist/ (fast incremental)\nbun run typecheck       # strict TypeScript checks\nbun run test            # unit tests for the core logic\nbun run lint:structure  # every file \u003c=130 lines, no comments, kebab-case\nbun run format          # Prettier\n```\n\nStructure rules, enforced in CI: **no source file over 130 lines**, no comments\nin `src`, kebab-case filenames. See `scripts/check/rules.ts`.\n\n\u003c/details\u003e\n\n## Themes\n\n22 themes, switched live from the options page. The last five are animated —\nmotion on folder toggles, clicks, ripples, and hovers.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eFull theme list\u003c/b\u003e\u003c/summary\u003e\n\n\u003cbr /\u003e\n\n| Static | Animated |\n| --- | --- |\n| Auto (system) | Pixel |\n| GitHub Light / Dark / Dark Dimmed | Cute |\n| One Dark | Retro CRT |\n| Dracula · Nord · Monokai | Hacker |\n| Solarized Light / Dark | Synthwave |\n| Gruvbox Dark · Tokyo Night | |\n| Monokai Pro · Ristretto · Octagon | |\n| Vira Teal · Vira Ocean | |\n\n\u003c/details\u003e\n\n## Privacy\n\nNo servers, no analytics, no tracking. The only requests go to the GitHub API\nfor the repo you are viewing. Your token, if you set one, stays in\n`chrome.storage` and is sent **only** to GitHub.\n\nFull privacy policy: **[decryptable.github.io/octonext](https://decryptable.github.io/octonext/)**\n\n## Tech stack\n\n- **Bun** — package manager, bundler, test runner, and asset pipeline\n- **TypeScript** (strict) — all source, no UI framework\n- **material-icon-theme** + **Vira** — two bundled VS Code file-icon packs\n- **@fortawesome/\\*** — UI icons\n- **webextension-polyfill** — cross-browser `browser.*` APIs\n\nSee [`ARCHITECTURE.md`](./ARCHITECTURE.md) for the source map and data flow, and\n[`CONTRIBUTING.md`](./CONTRIBUTING.md) to get involved.\n\n## Support\n\nFree, and staying free. If it saves you time, you can tip:\n\n\u003ca href=\"https://saweria.co/decryptable\" target=\"_blank\" rel=\"noreferrer\"\u003e\n  \u003cimg src=\"public/capy_happy.svg\" alt=\"Donate via Saweria\" height=\"48\" /\u003e\n\u003c/a\u003e\n\n## License\n\n[MIT](./LICENSE) © [decryptable](https://github.com/decryptable)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecryptable%2Foctonext","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdecryptable%2Foctonext","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecryptable%2Foctonext/lists"}