A Chromium browser extension that enhances LinkedIn Learning video viewing experience with theater mode and custom aspect ratios.
- Theater Mode: Automatically expand video to maximum viewport height while maintaining proportions
- Custom Aspect Ratios: Preset buttons for common ratios (16:9, 16:10, 21:9, 32:9)
- Custom Dimensions: Manually set width and height for precise control
- Max Height Slider: Fine-tune the maximum video height with a convenient slider
- Persistent State: Remember preferences between videos and sessions
- LinkedIn-styled UI: Matches LinkedIn's light/dark theme
Download Latest Version ← Click here!
- Click the link above to go to GitHub Actions
- Click on the latest successful workflow run (green checkmark ✓)
- Scroll down to "Artifacts" section at the bottom
- Download
linkedin-learning-enhancer-v1.0.0(or latest version) - Extract the ZIP file to a folder
- Install in your browser:
- Open
chrome://extensions/ - Enable "Developer mode" (toggle in top-right)
- Click "Load unpacked"
- Select the extracted folder
- ✅ Done! The extension icon should appear in your toolbar
- Open
edge://extensions/ - Enable "Developer mode" (toggle in left sidebar)
- Click "Load unpacked"
- Select the extracted folder
- ✅ Done! The extension icon should appear in your toolbar
Note: GitHub Actions artifacts are retained for 90 days. Each version (e.g., v1.0.0) overwrites the previous build of the same version, keeping only the latest.
For tagged stable releases, visit the Releases page and download the ZIP file. Installation steps are the same as above.
- Chrome Web Store: Coming soon...
- Edge Add-ons: Coming soon...
- Node.js 18.x or 20.x
- npm
# Clone the repository
git clone https://github.com/rmjoia/LinkedInLearning-extension.git
cd LinkedInLearning-extension
# Install dependencies
npm install
# Build the extension
npm run build
# Run tests
npm test
# Run linter
npm run lintsrc/
├── background/ # Service worker for extension lifecycle
├── content/ # Content script injected into LinkedIn Learning pages
├── popup/ # Extension popup UI
├── services/ # Business logic services
│ ├── AspectRatioService.ts
│ ├── MediaSessionService.ts
│ ├── StorageService.ts
│ └── TabService.ts
└── models/ # TypeScript interfaces and types
npm run build- Build the extension for productionnpm run watch- Build in watch mode for developmentnpm test- Run the test suite oncenpm run test:watch- Run tests in watch modenpm run lint- Run ESLintnpm run lint:fix- Run ESLint and auto-fix issuesnpm run package- Create a distributable ZIP file
This extension follows SOLID principles, DRY, and Least Privilege with:
- Service-oriented architecture: Separation of concerns with dedicated services
- TypeScript: Full type safety and modern JavaScript features
- Comprehensive testing: Karma + Jasmine with 15+ tests
- Repository pattern: Clean mock implementations for testing
This project uses GitHub Actions for continuous integration and deployment:
-
CI Pipeline (
ci.yml):- Runs on every push and pull request
- Tests against Node.js 18.x and 20.x
- Lints code with ESLint
- Runs test suite with Karma + Jasmine
- Builds extension and verifies artifacts
- Uploads build artifacts for 30 days
-
CD Pipeline (
cd.yml):- Triggers on GitHub releases
- Runs security audit, linting, and tests
- Builds and packages extension
- Uploads ZIP to GitHub release
- Publishes to Chrome Web Store
- Publishes to Edge Add-ons
To enable automatic publishing, add these secrets to your GitHub repository:
- Go to Google Cloud Console
- Create a new project or select existing
- Enable Chrome Web Store API
- Create OAuth 2.0 credentials
- Add these secrets to GitHub:
CHROME_EXTENSION_ID: Your extension ID from Chrome Web StoreCHROME_CLIENT_ID: OAuth client IDCHROME_CLIENT_SECRET: OAuth client secretCHROME_REFRESH_TOKEN: OAuth refresh token
- Go to Partner Center
- Navigate to your extension
- Generate API credentials
- Add these secrets to GitHub:
EDGE_PRODUCT_ID: Your product ID from Partner CenterEDGE_CLIENT_ID: API client IDEDGE_CLIENT_SECRET: API client secretEDGE_ACCESS_TOKEN_URL: Token endpoint URL
The project includes automated version bumping scripts that update both package.json and manifest.json simultaneously:
# 1. Bump version (choose one)
npm run version:patch # 1.0.0 → 1.0.1 (bug fixes)
npm run version:minor # 1.0.0 → 1.1.0 (new features)
npm run version:major # 1.0.0 → 2.0.0 (breaking changes)
# 2. Commit and tag
git add package.json manifest.json
git commit -m "chore: bump version to x.y.z"
git tag vx.y.z
git push && git push --tagsAutomated Release Process:
Once you push a tag (e.g., v1.0.0), GitHub Actions will automatically:
- ✅ Build & Test - Run full CI pipeline (lint, test, build)
- 📦 Create Release - Generate GitHub release with release notes
- ⬇️ Upload Artifacts - Attach ZIP file and SHA256 checksum
- 🚀 Publish to Stores - Submit to Chrome Web Store and Edge Add-ons (if configured)
Download Releases:
Users can download the extension directly from the GitHub Releases page without needing the Chrome/Edge stores.
Each release includes:
linkedin-learning-enhancer-<version>.zip- Ready to installlinkedin-learning-enhancer-<version>.zip.sha256- Checksum for verification
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Run tests:
npm test - Run linter:
npm run lint:fix - Commit:
git commit -am "feat: add amazing feature" - Push:
git push origin feature/amazing-feature - Open a Pull Request
MIT License - see LICENSE file for details
- Report bugs: GitHub Issues
- Questions: Open a discussion on GitHub