This project provides a solution for syncing and serving JetBrains based IDE plugins in air-gapped environments. The system consists of two components:
- Syncer: Downloads plugins from the JetBrains Marketplace, stores them locally, and generates an
index.xml
file with metadata. - Server: Hosts the downloaded plugins and serves the
index.xml
file as an offline plugin marketplace.
- Air-gapped Support: Sync and serve JetBrains plugins without an internet connection.
- Automatic Plugin Compatibility Check: Downloads only plugins that are compatible with the specified JetBrains builds.
- Metadata Handling: Stores plugin metadata for easy generation of
index.xml
. - Simple HTTP Server: Serves the plugins and the
index.xml
file, which can be accessed by JetBrains based IDEs like PyCharm.
- Go 1.18+ installed.
- Access to JetBrains Marketplace to run the syncer (can be done on a machine with internet access).
.
├── cmd/
│ ├── syncer/ # Main entry point for the syncer
│ └── server/ # Main entry point for the server
├── internal/
│ ├── downloader/ # Handles downloading plugins and saving metadata
│ ├── xmlgenerator/ # Generates the index.xml file from metadata
│ └── models/ # Shared data models (PluginMetadata, etc.)
├── output/
│ └── plugins/ # Where downloaded plugins and metadata are stored
│ └── <plugin-id>/
│ └── <version>/
│ ├── <plugin>.zip
│ └── metadata.json
├── README.md # Project documentation
└── config.json # Configuration file for the syncer
First, run the syncer to download the plugins and generate the index.xml
file.
Define the plugins you want to sync in a config.json
file:
{
"intellij": {
"builds": [
{
"since-build": "233",
"until-build": "*"
}
]
},
"plugins": [
{
"id": "dev.turingcomplete.intellijdevelopertoolsplugins"
},
{
"id": "org.intellij.scala"
}
]
}
go run cmd/syncer/main.go
This will:
- Download plugins listed in
config.json
(if compatible with the specified builds). - Store each plugin's
.zip
file and its metadata in theoutput/plugins
directory. - Generate
output/index.xml
.
Next, run the server to serve the downloaded plugins and the generated index.xml
.
go run cmd/server/main.go
This will:
- Start a simple HTTP server on
http://localhost:8080
that serves the plugins andindex.xml
. - Allow JetBrains based IDEs to access the offline marketplace.
- Open your JetBrains IDE (PyCharm, Webstorm, etc.).
- Go to
Settings
>Plugins
>⚙️
(gear icon) >Manage Plugin Repositories
. - Add
http://localhost:8080/index.xml
as a custom repository. - Your IDE will now fetch plugins from your local server.
- Ensure the syncer is run in an environment with internet access.
- Make sure the server is running and accessible from the IDE.
- Check
output/plugins/
for the downloaded plugins andmetadata.json
files.
Contributions are welcome! Please feel free to open issues or submit pull requests.
This project is licensed under the MIT License.