Breaking Free from Microsoft's Marketplace Restrictions
A declarative extension management solution for code-server, Gitpod, and other VS Code forks that can't access the official Microsoft marketplace.
Microsoft has blocked access to their extension marketplace for VS Code forks like code-server, forcing developers to manually manage extensions or go without their favorite tools. VSCode Rebel solves this by:
- ๐ Declarative Management: Define your extensions in YAML, let the script handle the rest
- ๐ Open VSX Integration: Automatically fetches latest versions from the open-source registry
- ๐งน Clean Environment: Removes unwanted extensions automatically
- ๐ฆ URL Installation: Install extensions directly from Open VSX URLs
- ๐ Always Current: Keeps extensions updated to their latest versions
- Zero-maintenance extension management - Set it and forget it
- Automatic updates - Always uses the latest available versions
- Cleanup automation - Removes extensions not in your desired list
- URL-based installation - Add extensions directly from Open VSX URLs
- Cross-platform compatibility - Works on Linux, macOS, and Windows (WSL)
- Robust error handling - Gracefully handles network issues and missing extensions
- API-based version detection - Reliable version checking using Open VSX REST API
- Bash shell (4.0+ recommended)
- curl - for downloading extensions and API calls
- yq - for YAML parsing (automatically installed if missing)
- code-server or compatible VS Code fork
- jq (optional) - for better JSON parsing
-
Clone the repository:
git clone https://github.com/yourusername/vscode-rebel.git cd vscode-rebel -
Make the script executable:
chmod +x manage_extensions.sh
-
Edit your extensions list:
nano extensions.yaml
-
Run the manager:
./manage_extensions.sh
Define your desired extensions using a simple YAML format:
extensions:
- id: Anthropic.claude-code
version: latest
- id: ms-python.python
version: latest
- id: esbenp.prettier-vscode
version: latest
- id: bradlc.vscode-tailwindcss
version: latest
# Add more extensions as neededPro Tip: Use version: latest for automatic updates, or specify a version like version: 1.0.0 for pinned versions.
Edit the configuration section in manage_extensions.sh:
# --- Configuration ---
CODE_SERVER_PATH="/usr/lib/code-server/lib/vscode/bin/remote-cli/code-server"
EXTENSIONS_DIR="/root/.local/share/code-server/extensions"
TEMP_DIR="/tmp/code-server-ext-updates"
YAML_FILES_PATTERN="*.yaml"# Process all extensions from YAML files
./manage_extensions.sh
# Show help
./manage_extensions.sh --helpInstall extensions directly from Open VSX URLs:
./manage_extensions.sh "https://open-vsx.org/api/publisher/extension/version/file/publisher.extension-version.vsix"Example:
./manage_extensions.sh "https://open-vsx.org/api/Anthropic/claude-code/1.0.29/file/Anthropic.claude-code-1.0.29.vsix"This will:
- Extract the extension ID and version from the URL
- Add it to your
extensions.yamlfile - Download and install the extension
Set up a cron job to keep extensions updated:
# Edit crontab
crontab -e
# Add this line to check for updates daily at 2 AM
0 2 * * * /path/to/vscode-rebel/manage_extensions.sh > /tmp/extension-updates.log 2>&1The script processes all *.yaml files in the current directory. You can organize extensions by project:
project-a-extensions.yaml
project-b-extensions.yaml
shared-extensions.yaml
Override default paths using environment variables:
export CODE_SERVER_PATH="/custom/path/to/code-server"
export EXTENSIONS_DIR="/custom/extensions/directory"
./manage_extensions.shEnable verbose output for troubleshooting:
set -x
./manage_extensions.sh- Reads Configuration: Parses all
*.yamlfiles for desired extensions - Scans Installed: Checks currently installed extensions in your VS Code fork
- Fetches Latest Versions: Uses Open VSX REST API to get current versions
- Performs Updates: Downloads and installs outdated extensions
- Cleanup: Removes extensions not in your desired list
- Reports Results: Shows what was updated, installed, or removed
Extensions not installing:
- Check if the extension exists on Open VSX
- Verify your
CODE_SERVER_PATHis correct - Ensure you have write permissions to the extensions directory
YAML parsing errors:
- Install
yq:apt install yqorbrew install yq - Verify YAML syntax using an online validator
Network issues:
- Check internet connectivity
- Verify Open VSX is accessible:
curl -s https://open-vsx.org/api/ms-python/python
- Check the Issues page
- Enable debug mode:
set -xbefore running the script - Share logs when reporting issues
We welcome contributions! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Test thoroughly
- Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
git clone https://github.com/yourusername/vscode-rebel.git
cd vscode-rebel
chmod +x manage_extensions.sh
# Test your changes
./manage_extensions.sh --help| Platform | Status | Notes |
|---|---|---|
| Linux | โ Tested | Primary development platform |
| macOS | โ Compatible | Requires Homebrew for dependencies |
| Windows WSL | โ Compatible | Use WSL2 for best performance |
| code-server | โ Tested | Primary target platform |
| Gitpod | โ Compatible | Works with Gitpod workspaces |
| Theia | May require path adjustments |
- GUI Interface - Web-based management dashboard
- Extension Profiles - Different extension sets for different projects
- Backup/Restore - Export and import extension configurations
- Team Sharing - Share extension configurations across teams
- Docker Integration - Pre-built containers with popular extension sets
- Metrics Dashboard - Track extension usage and updates
- Open VSX Registry - The open-source extension registry
- code-server - VS Code in the browser
- Gitpod - Cloud development environments
- The VS Code community for creating amazing extensions
This project is licensed under the MIT License - see the LICENSE file for details.
Made with โค๏ธ by developers, for developers who refuse to be limited by corporate restrictions.
"If you can't access the marketplace, become the marketplace."