Source-based development repository. Main branch: v2-source
Download the extension from official stores:
- Chrome Web Store: https://chromewebstore.google.com/detail/mfobjniokjbcldieppimekoibpocahed
- Firefox Add-ons: https://addons.mozilla.org/zh-TW/firefox/addon/ycs-continued/
This repository is the source-based continuation of YCS (YouTube Comment Search) extension.
Status:
- Main development branch:
v2-source - Supported browsers: Chrome 88+ (Manifest V3), Firefox
- Original project: sonigy/YCS
- Migrated from
ycs_cont_migrationbranch to single-repo structure
The extension enables searching, filtering, and exporting YouTube comments, replies, chat replays, and video transcripts, with continuous fixes for YouTube API changes (2024-2025).
- Node.js 22+ (defined in
app/.nvmrc) - npm
All development commands run from the app/ directory:
# Install dependencies
cd app
npm ci
# Development build (watch mode, HMR disabled)
npm run dev
# Production build → app/dist/
npm run build
# Clean cache and rebuild
npm run rebuild
# Lint check
npm run lint
# Type checking
npm run typecheck
# Format code with Prettier
npm run format
npm run format:check
# Clean all build artifacts
npm run rm
# Run tests with Node.js test runner
npm test- Build the extension:
cd app && npm run build - Open browser extension page:
- Chrome:
chrome://extensions - Firefox:
about:debugging#/runtime/this-firefox
- Chrome:
- Enable "Developer mode"
- Click "Load unpacked" and select
app/dist/directory
From project root, use the Makefile:
make release TYPE=patch # Auto bump, commit, tag, build, package
make release TYPE=minor
make release TYPE=majorThis will:
- Update version in
app/manifest.jsonandapp/manifest.firefox.json - Create git commit and tag
- Build both Chrome and Firefox versions
- Package as
.zipfiles inpacking/directory
Manual build (if needed):
./scripts/build-extension.sh chrome # or firefox
./scripts/package-extension.sh chrome # or firefoxThree-layer communication model:
YouTube.com Page
├─ web-resources.ts (Web Page Layer)
│ └─ Search logic, UI rendering, Fuse.js integration
│ └─ window.postMessage() ↕️
├─ content-scripts.ts (Content Script Layer)
│ └─ Message relay, script injection management
│ └─ chrome.runtime.sendMessage() ↕️
└─ background.ts (Service Worker)
└─ IndexedDB cache, storage monitoring, badge updates
└─ YouTube Data API requests (API key stored securely)
Why this structure? Manifest V3 security restrictions require web page code to run in isolated context. The content script acts as a secure bridge between web page and extension background. For YouTube Data API integration, API keys are stored securely in the background and never exposed to the web page.
Build system: Parcel 2.0.1 with TypeScript (ES6 target, strict mode)
Storage: IndexedDB cache with auto-cleanup (200 MB quota limit, configurable in options)
The extension integrates with YouTube's internal Innertube API for comments, chat replays, and transcripts.
Documentation:
- innertube-comments-integration.md - Start here for comment integration
- innertube-migration-guide.md - frameworkUpdates migration guide
- innertube-nested-comments.md - Nested replies architecture and Entity-driven format
- innertube-chat-replay-api-changes.md - Chat replay API changes
- continuation-processing.md - Implementation reference
- sap-sid-authorization.md - SAPISID authorization header generation
- adaptive-authorization-headers.md - Adaptive authorization for member-only videos
- youtube-data-api-messaging.md - YouTube Data API v3 messaging architecture
- Original YCS by sonigy
- YCS-Continued maintained by pc035860