Add and configure extensions
Extensions are reusable bundles that extend Junie CLI with project-specific or domain-specific capabilities. A single extension can package any combination of:
This makes extensions a convenient way to install a curated set of capabilities for a particular technology stack (for example, an Android, Spring Boot, or SQL extension), share team-wide setups, or distribute community-built integrations — without manually configuring each piece.
Run the /extensions slash command (aliases: /plugin, /plugins) to open the extensions screen, where you can browse marketplaces, install, update and remove extensions, and configure additional marketplaces.
Marketplaces
Extensions are distributed via marketplaces. A marketplace exposes a manifest with a list of available extensions and references to where their content is hosted. Junie CLI supports three ways to host a marketplace:
A git repository (GitHub, GitLab, self-hosted, any host).
A local directory on your machine.
A direct HTTP(S) URL pointing at a
marketplace.jsonfile.
Two manifest formats are supported in all three cases:
The native Junie format at
.junie-extension/marketplace.json.The Claude plugin format at
.claude-plugin/marketplace.json.
This means you can connect any Claude-compatible plugin marketplace to Junie CLI in addition to Junie's native marketplaces.
Built-in marketplace
Junie CLI ships with the official JetBrains marketplace pre-registered:
https://github.com/JetBrains/junie-extensions
The marketplace contains a curated set of extensions maintained by the Junie team — for example, extensions for Java, Kotlin, Android, Spring Boot, SQL, Redis, and others.
Add a custom marketplace
To register an additional marketplace:
Run
/extensionsand switch to the Marketplaces tab.Choose Add marketplace and provide one of the supported spec formats:
Spec
Recognized as
https://github.com/owner/repoGitHub repository (clones locally)
owner/repoGitHub shorthand, expanded to
https://github.com/owner/repogit@github.com:owner/repoGit over SSH
https://gitlab.com/owner/repo(or any other host)Generic git repository
./relative/path,/abs/path,~/path,file:///…Local directory
https://example.com/marketplace.jsonDirect URL to a
marketplace.json(HTTP-only, no clone). GitHub/blob/URLs are auto-rewritten to the raw form.The source must contain either a
.junie-extension/marketplace.jsonor a.claude-plugin/marketplace.jsonfile at its root (for git / local sources). URL sources point directly at the manifest file.Depending on the type, Junie CLI clones the repo, probes the local directory, or fetches the JSON, then lists its extensions in the catalog.
To remove a custom marketplace, select it in the Marketplaces tab and choose Remove. The built-in JetBrains marketplace cannot be removed.
You can also drive the same actions inline via /extensions <arg>:
Install an extension
Run
/extensionsto open the extensions screen.Browse the catalog of available extensions across all registered marketplaces, or use search to find a specific extension.
Select an extension and choose the installation scope:
Project scope: the extension is enabled only in the current project. The reference is stored in
.junie/extensions.jsonat the root of the project. This file can be checked into version control and shared with the team.User scope: the extension is enabled across all projects on your machine. The reference is stored in
~/.junie/extensions/extensions.json(or%USERPROFILE%\.junie\extensions\extensions.jsonon Windows).
Extension content (skills, agents, commands, MCP configs, guidelines) is downloaded once into the user-level cache directory ~/.junie/extensions/<marketplace>/<extension>/ and reused across projects.
You can also pass a raw trailing argument directly to the /extensions command, for example:
Newly installed extensions become available within the running session — there is no need to restart Junie CLI.
Remove an extension
To uninstall an extension:
Run
/extensionsand switch to the Installed tab.Select the extension and choose Remove.
The reference is removed from the corresponding extensions.json file. Cached content under ~/.junie/extensions/ may be reused if the extension is reinstalled later.
Update an extension
To pull the latest version of an installed extension, select it in the Installed tab and choose Update.
Where extensions are stored
Location | Purpose |
|---|---|
| Base directory for cached extension content. |
| User-scope configuration: extensions enabled for the current user across all projects. |
| Registry for registered marketplace repositories and their sync status. |
| Project-scope configuration: extensions enabled for the current project; can be committed to VCS. |
| Per-marketplace caches: git clones, local-dir caches, fetched |
Both extensions.json files share the same format: a flat JSON object that maps a marketplace identifier to the list of installed extensions for that marketplace. A typed source is stored alongside so a teammate who pulls the project can auto-register the marketplace without configuring it manually:
The legacy url field is kept populated for git sources so older Junie versions can still downgrade-read the config.
You can override the base directory with the following command-line option:
Option | Default | Description |
|---|---|---|
|
| Override the default extensions directory. Can also be set via the |