IDE Services 2024.3 Help

What's new

Updates

2024.3.3 Bugfix update

  • Supported automation token usage to download plugins from /api/plugins/<plugin-id>/archive

2024.3 General Availability

  • IDE Services Core

    • Rebranding from Toolbox Enterprise to JetBrains IDE Services

    • Introduced HELM charts for Kubernetes deployment.

    • Separated free functionality from IDE Provisioner. It is now possible to manage the Toolbox App settings and selected plugins with IDE Provisioner disabled.

  • IDE Provisioner

    • Added a New Settings Controller for better management of IDE settings.

  • AI Enterprise

    • Introduced AI Enterprise, a new product of the JetBrains IDE Services suite.

  • Web UI

    • Implemented usage limits for all IDE Services products (for the pay-as-you-go billing model.)

    • Implemented the functionality for enabling and disabling IDE Services products on the profile level.

API changes

  • GET /api/configs:

    • Breaking change! Removed the required property 'codeWithMe' from the response with the '200' status

  • PATCH /api/configs: Breaking change! removed the endpoint.

  • GET /api/constituents:

    • Breaking change! Removed the required property 'ai' from the response with the '200' status

    • Breaking change! Removed the required property 'cwm' from the response with the '200' status

    • Breaking change! Removed the required property 'idep' from the response with the '200' status

    • The response property 'items' became required for the status '200'

    • Added the required property 'items' to the response with the '200' status

  • GET /api/constituents/ai:

    • Breaking change! Removed the required property 'id' from the response with the '200' status

    • Breaking change! Removed the required property 'url' from the response with the '200' status

    • Added the optional property 'assignedUsersLimit' to the response with the '200' status

    • The response property 'activeIdeProfilesCount' became required for the status '200'

    • The response property 'activeUsersCount' became required for the status '200'

    • The response property 'disabledByLimitsUsersCount' became required for the status '200'

    • The response property 'provider' became required for the status '200'

    • Added the required property 'activeIdeProfilesCount' to the response with the '200' status

    • Added the required property 'activeUsersCount' to the response with the '200' status

    • Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status

    • Added the required property 'provider' to the response with the '200' status

  • POST /api/constituents/ai:

    • Breaking change! Added the new required request property 'provider'

    • Breaking change! Removed the required property 'id' from the response with the '200' status

    • Breaking change! Removed the required property 'id' from the response with the '403' status

    • Breaking change! Removed the required property 'url' from the response with the '200' status

    • Breaking change! Removed the required property 'url' from the response with the '403' status

    • Breaking change! Removed the request property 'url'

    • Added the new optional request property 'assignedUsersLimit'

    • Added the optional property 'assignedUsersLimit' to the response with the '200' status

    • Added the optional property 'assignedUsersLimit' to the response with the '403' status

    • The response property 'activeIdeProfilesCount' became required for the status '200'

    • The response property 'activeIdeProfilesCount' became required for the status '403'

    • The response property 'activeUsersCount' became required for the status '200'

    • The response property 'activeUsersCount' became required for the status '403'

    • The response property 'disabledByLimitsUsersCount' became required for the status '200'

    • The response property 'disabledByLimitsUsersCount' became required for the status '403'

    • The response property 'provider' became required for the status '200'

    • The response property 'provider' became required for the status '403'

    • Added the required property 'activeIdeProfilesCount' to the response with the '200' status

    • Added the required property 'activeIdeProfilesCount' to the response with the '403' status

    • Added the required property 'activeUsersCount' to the response with the '200' status

    • Added the required property 'activeUsersCount' to the response with the '403' status

    • Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status

    • Added the required property 'disabledByLimitsUsersCount' to the response with the '403' status

    • Added the required property 'provider' to the response with the '200' status

    • Added the required property 'provider' to the response with the '403' status

  • PUT /api/constituents/ai:

    • Breaking change! Added the new required request property 'provider'

    • Breaking change! Removed the required property 'id' from the response with the '200' status

    • Breaking change! Removed the required property 'url' from the response with the '200' status

    • Breaking change! Removed the request property 'url'

    • Added the new optional request property 'assignedUsersLimit'

    • Added the optional property 'assignedUsersLimit' to the response with the '200' status

    • The response property 'activeIdeProfilesCount' became required for the status '200'

    • The response property 'activeUsersCount' became required for the status '200'

    • The response property 'disabledByLimitsUsersCount' became required for the status '200'

    • The response property 'provider' became required for the status '200'

    • Added the required property 'activeIdeProfilesCount' to the response with the '200' status

    • Added the required property 'activeUsersCount' to the response with the '200' status

    • Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status

    • Added the required property 'provider' to the response with the '200' status

  • POST /api/constituents/cwm:

    • The request property 'concurrentHostsLimit' became optional

  • PUT /api/constituents/cwm:

    • The request property 'concurrentHostsLimit' became optional

  • DELETE /api/constituents/idep:

    • Breaking change! Removed the media type 'application/json' for the response with the status '200'

    • Breaking change! Removed the media type 'application/json' for the response with the status '403'

  • GET /api/constituents/idep:

    • Breaking change! Removed the media type 'application/json' for the response with the status '403'

    • Breaking change! Removed the media type 'application/json' for the response with the status '404'

    • The response property 'activeUsersCount' became required for the status '200'

    • The response property 'disabledByLimitsUsersCount' became required for the status '200'

    • Added the required property 'activeUsersCount' to the response with the '200' status

    • Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status

  • POST /api/constituents/idep:

    • Breaking change! Removed the media type '/' for the response with the status '403'

    • Breaking change! Removed the media type 'application/json' for the response with the status '400'

    • Breaking change! Removed the media type 'application/json' for the response with the status '409'

    • The request property 'assignedUsersLimit' became optional

    • The response property 'activeUsersCount' became required for the status '200'

    • The response property 'disabledByLimitsUsersCount' became required for the status '200'

    • Added the required property 'activeUsersCount' to the response with the '200' status

    • Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status

  • PUT /api/constituents/idep:

    • Breaking change! Removed the media type 'application/json' for the response with the status '403'

    • Breaking change! Removed the media type 'application/json' for the response with the status '404'

    • The request property 'assignedUsersLimit' became optional

    • The response property 'activeUsersCount' became required for the status '200'

    • The response property 'disabledByLimitsUsersCount' became required for the status '200'

    • Added the required property 'activeUsersCount' to the response with the '200' status

    • Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status

  • DELETE /api/constituents/lv: added the endpoint.

  • GET /api/constituents/lv:

    • Added the non-success response with the status '404'

  • POST /api/constituents/lv: added the endpoint.

  • GET /api/debug/stream: added the endpoint.

  • GET /api/feed-filters/products: Breaking change! removed the endpoint.

  • GET /api/feed-filters/{id}/products: added the endpoint.

  • POST /api/idp/sync-status: added the endpoint.

  • GET /api/ij-plugins: Breaking change! This API has been deprecated.

  • GET /api/ij-plugins-extras/all-channels: Breaking change! This API has been deprecated.

  • GET /api/ij-plugins-extras/audit-logs: Breaking change! This API has been deprecated.

  • DELETE /api/ij-plugins/{pluginId}: Breaking change! This API has been deprecated.

  • GET /api/ij-plugins/{pluginId}: Breaking change! This API has been deprecated.

  • PATCH /api/ij-plugins/{pluginId}: Breaking change! This API has been deprecated.

  • GET /api/license:

    • Breaking change! The response property 'isServerKeyValid' became optional for the status '200'

    • Breaking change! Removed the required property 'isLicenseExpiredButCorrect' from the response with the '200' status

    • Breaking change! Removed the required property 'isLicenseValid' from the response with the '200' status

    • Breaking change! Removed the required property 'licenseId' from the response with the '200' status

    • Breaking change! Removed the required property 'licenseKey' from the response with the '200' status

    • Added the optional property 'activatedBy' to the response with the '200' status

    • Added the optional property 'activationDate' to the response with the '200' status

    • Added the optional property 'expirationDate' to the response with the '200' status

    • Added the optional property 'id' to the response with the '200' status

    • Added the optional property 'key' to the response with the '200' status

    • Added the optional property 'lastRefreshedDate' to the response with the '200' status

    • Added the optional property 'plan' to the response with the '200' status

    • Added the optional property 'status' to the response with the '200' status

    • The response property 'isValid' became required for the status '200'

    • The response property 'jbaUrl' became required for the status '200'

    • Added the required property 'isValid' to the response with the '200' status

    • Added the required property 'jbaUrl' to the response with the '200' status

  • POST /api/license:

    • Breaking change! The response property 'isServerKeyValid' became optional for the status '200'

    • Breaking change! Removed the required property 'isLicenseExpiredButCorrect' from the response with the '200' status

    • Breaking change! Removed the required property 'isLicenseValid' from the response with the '200' status

    • Breaking change! Removed the required property 'licenseId' from the response with the '200' status

    • Breaking change! Removed the required property 'licenseKey' from the response with the '200' status

    • Added the optional property 'activatedBy' to the response with the '200' status

    • Added the optional property 'activationDate' to the response with the '200' status

    • Added the optional property 'expirationDate' to the response with the '200' status

    • Added the optional property 'id' to the response with the '200' status

    • Added the optional property 'key' to the response with the '200' status

    • Added the optional property 'lastRefreshedDate' to the response with the '200' status

    • Added the optional property 'plan' to the response with the '200' status

    • Added the optional property 'status' to the response with the '200' status

    • The response property 'isValid' became required for the status '200'

    • The response property 'jbaUrl' became required for the status '200'

    • Added the required property 'isValid' to the response with the '200' status

    • Added the required property 'jbaUrl' to the response with the '200' status

  • POST /api/license/sync: added the endpoint.

  • GET /api/login/authenticated: added the endpoint.

  • GET /api/machine-config:

    • The response property 'proxyRequired' became required for the status '200'

    • Added the required property 'proxyRequired' to the response with the '200' status

  • PATCH /api/machine-config:

    • The response property 'proxyRequired' became required for the status '200'

    • Added the required property 'proxyRequired' to the response with the '200' status

  • GET /api/metrics: added the endpoint.

  • GET /api/plugin-repository:

    • Added the new optional 'query' request parameter 'channel[]'

  • GET /api/plugins:

    • Breaking change! Deleted the 'query' request parameter 'private'

  • GET /api/profiles/schema.json: Breaking change! removed the endpoint.

  • GET /api/profiles/{profileId}/groups:

    • Added the new optional 'query' request parameter 'order'

    • Added the new optional 'query' request parameter 'sort'

  • GET /api/profiles/{profileId}/users:

    • Added the required property 'items/items/constituents' to the response with the '200' status

    • Added the required property 'items/items/isAssignedDirectly' to the response with the '200' status

  • DELETE /api/transparency/agreement: added the endpoint.

  • GET /api/transparency/agreement:

    • The response property 'isDefault' became required for the status '200'

    • Added the required property 'isDefault' to the response with the '200' status

  • POST /api/transparency/agreement:

    • The response property 'isDefault' became required for the status '200'

    • Added the required property 'isDefault' to the response with the '200' status

  • POST /api/transparency/agreement/upload:

    • The response property 'isDefault' became required for the status '200'

    • Added the required property 'isDefault' to the response with the '200' status

  • GET /api/usage-stats/events-stats-ai-last:

    • The response property 'value' became required for the status '200'

    • Added the required property 'value' to the response with the '200' status

  • GET /api/usage-stats/events-stats-cwm-last:

    • The response property 'value' became required for the status '200'

    • Added the required property 'value' to the response with the '200' status

  • GET /api/usage-stats/events-stats-ide: Breaking change! removed the endpoint.

  • GET /api/usage-stats/events-stats-ide-last: Breaking change! removed the endpoint.

  • GET /api/usage-stats/events-stats-idep: added the endpoint.

  • GET /api/usage-stats/events-stats-idep-last: added the endpoint.

  • GET /api/users:

    • Added the new optional 'query' request parameter 'filter-constituent'

    • Added the required property 'items/items/constituents' to the response with the '200' status

  • POST /api/users:

    • Added the required property 'profiles/items/isAssignedDirectly' to the response with the '200' status

  • GET /api/users/{id}:

    • Added the required property 'profiles/items/isAssignedDirectly' to the response with the '200' status

  • PATCH /api/users/{id}:

    • Added the required property 'profiles/items/isAssignedDirectly' to the response with the '200' status

  • PUT /api/users/{id}:

    • Added the required property 'profiles/items/isAssignedDirectly' to the response with the '200' status

  • DELETE /api/users/{id}/tokens: added the endpoint.

  • GET /api/users/{userId}/profiles:

    • Added the required property 'items/items/isAssignedDirectly' to the response with the '200' status

Preview 11

  • IDE Services Core

    • Introduced user groups.

    • Implemented the licensing and activation mechanisms for IDE Services and suite products.

    • Implemented synchronization of IDE Services user groups with the identity provider's user groups.

    • Introduced SAML support.

    • Supported user group mapping between IDE Services and identity providers.

    • Supported user import from Microsoft Entra ID and Okta.

  • IDE Provisioner

    • Implemented automatic installation and updates for plugins from channels other than the stable channel.

    • Removed templates for deprecated XML settings from the Web UI.

    • Added the "Check for updates" frequency setting to Toolbox Settings.

  • Code With Me Enterprise

    • Improved the flow for joining a Code With Me session.

  • JetBrains IDE Services plugin

    • Added the ability to read a client machine configuration from disk.

    • Changed the placement of the organization's logo icon in IDEs.

    • Implemented the notification displayed in case of authentication issues.

    • Improved the UX of the Export IDE Configuration Changes action.

    • Added an option to prohibit users from disabling/enabling certain plugins.

  • Web UI

    • Redesigned the Login page.

    • Redesigned the header dropdown.

    • Added an option to assign profiles to user groups.

API changes

In Preview 11, we introduced a number of changes to the IDE Services API. The refactoring aimed to decrease the number of RPC-styled endpoints, unify collection formats, and move subcollections to separate controllers.

  • GET /api/configs: added the required property codeWithMe to the response with the 200 status.

  • PATCH /api/configs: added the endpoint.

  • GET /api/constituents: added the endpoint.

  • DELETE /api/constituents/ai: added the endpoint.

  • GET /api/constituents/ai: added the endpoint.

  • POST /api/constituents/ai: added the endpoint.

  • PUT /api/constituents/ai: added the endpoint.

  • DELETE /api/constituents/cwm: added the endpoint.

  • GET /api/constituents/cwm: added the endpoint.

  • POST /api/constituents/cwm: added the endpoint.

  • PUT /api/constituents/cwm: added the endpoint.

  • DELETE /api/constituents/idep: added the endpoint.

  • GET /api/constituents/idep: added the endpoint.

  • POST /api/constituents/idep: added the endpoint.

  • PUT /api/constituents/idep: added the endpoint.

  • GET /api/constituents/lv: added the endpoint.

  • GET /api/cwm-tbe/events:

    • Breaking change! Removed the required property events from the response with the 200 status.

    • Added the required property items to the response with the 200 status.

    • The response property items became required for the status 200.

  • GET /api/cwm-tbe/events-stats:

    • Breaking change! Removed the required property eventsStats from the response with the 200 status.

    • Added the required property items to the response with the 200 status.

    • Added the required property total to the response with the 200 status.

    • The response property items became required for the status 200.

    • The response property total became required for the status 200.

  • GET /api/feed-filters/products:

    • Breaking change! Changed the response body format from array to object for the 200 status.

    • Added the required property items to the response with the 200 status.

    • Added the required property total to the response with the 200 status.

    • The response property items became required for the status 200.

    • The response property total became required for the status 200.

  • GET /api/feed-filters/qualities:

    • Breaking change! Changed the response body format from array to object for the 200 status.

    • Added the required property items to the response with the 200 status.

    • Added the required property total to the response with the 200 status.

    • The response property items became required for the status 200.

    • The response property total became required for the status 200.

  • GET /api/groups: added the endpoint.

  • GET /api/groups/{groupId}/profiles: added the endpoint.

  • DELETE /api/groups/{groupId}/profiles/{profileId}: added the endpoint.

  • PUT /api/groups/{groupId}/profiles/{profileId}: added the endpoint.

  • GET /api/groups/{groupId}/users: added the endpoint.

  • GET /api/groups/{id}: added the endpoint.

  • GET /api/ij-plugins:

    • Breaking change! This API has been deprecated.

    • Added the deprecated-plugin-controller API tag.

    • Removed the plugin-controller API tag.

  • Breaking change! GET /api/ij-plugins-extras/all-channels: this API has been deprecated.

  • Breaking change! GET /api/ij-plugins-extras/audit-logs: this API has been deprecated.

  • POST /api/ij-plugins/upload:

    • Breaking change! This API has been deprecated.

    • Added the deprecated-plugin-controller API tag.

    • Removed the plugin-controller API tag.

  • DELETE /api/ij-plugins/{pluginId}:

    • Breaking change! This API has been deprecated.

    • Added the deprecated-plugin-controller API tag.

    • Removed the plugin-controller API tag.

  • GET /api/ij-plugins/{pluginId}:

    • Breaking change! This API has been deprecated.

    • Added the deprecated-plugin-controller API tag.

    • Removed the plugin-controller API tag.

  • PATCH /api/ij-plugins/{pluginId}:

    • Breaking change! This API has been deprecated.

    • Added the deprecated-plugin-controller API tag.

    • Removed the plugin-controller API tag.

  • POST /api/import/users:

    • Added the required request property users/items/groups.

    • Removed the request property users/items/profiles.

  • Breaking change! GET /api/machine-config/trusted-certificates: this API has been deprecated.

  • Breaking change! PUT /api/machine-config/trusted-certificates: this API has been deprecated.

  • Breaking change! DELETE /api/machine-config/trusted-certificates: this API has been deprecated.

  • GET /api/ping:

    • The response property message became required for the status 200.

    • Added the required property message to the response with the 200 status.

  • GET /api/plugins: added the endpoint.

  • POST /api/plugins: added the endpoint.

  • GET /api/plugins-audit-logs: added the endpoint.

  • GET /api/plugins-channels: added the endpoint.

  • DELETE /api/plugins/{pluginId}: added the endpoint.

  • GET /api/plugins/{pluginId}: added the endpoint.

  • PATCH /api/plugins/{pluginId}: added the endpoint.

  • GET /api/plugins/{pluginId}/channels: added the endpoint.

  • GET /api/plugins/{pluginId}/versions: added the endpoint.

  • DELETE /api/plugins/{pluginId}/versions/{version}: added the endpoint.

  • PATCH /api/plugins/{pluginId}/versions/{version}: added the endpoint.

  • GET /api/profiles:

    • Breaking change! Removed the required property profiles from the response with the 200 status.

    • The response property items became required for the status 200.

    • Added the required property items to the response with the 200 status.

  • POST /api/profiles:

    • Added a new optional request property constituents.

    • Added a new optional request property plugins/autoInstalled/items/content/items/channel.

    • Added the optional property plugins/autoInstalled/items/content/items/channel to the response with the 200 status.

    • The response property constituents became required for the status 200.

    • Added the required property constituents to the response with the 200 status.

  • POST /api/profiles/evaluate/profile-filters:

    • Breaking change! Added a new required request property constituents.

    • Added a new optional request property plugins/autoInstalled/items/content/items/channel.

    • Added the optional property plugins/autoInstalled/items/content/items/channel to the response with the 200 status.

    • The response property constituents became required for the status 200.

    • Added the required property constituents to the response with the 200 status.

  • GET /api/profiles/{id}:

    • Added a new optional request property plugins/autoInstalled/items/content/items/channel.

    • The response property constituents became required for the status 200.

    • Added the required property constituents to the response with the 200 status.

  • PUT /api/profiles/{id}:

    • Added a new optional request property constituents.

    • Added a new optional request property plugins/autoInstalled/items/content/items/channel.

    • Added the optional property plugins/autoInstalled/items/content/items/channel to the response with the 200 status.

    • The response property constituents became required for the status 200.

    • Added the required property constituents to the response with the 200 status.

  • DELETE /api/profiles/{id}/users: added the endpoint.

  • GET /api/profiles/{id}/users:

    • Removed the required property users from the response with the 200 status.

    • Added the profile-users-controller API tag.

    • Removed the profile-controller API tag.

    • The response property items became required for the status 200.

    • The response property total became required for the status 200.

    • Added the required property items to the response with the 200 status.

  • PUT /api/profiles/{id}/users: added the endpoint.

  • GET /api/profiles//audit-logs

    • Breaking change! Changed the response body format from array/none to object/none for the 200 status.

    • The response property items became required for the status 200.

    • The response property total became required for the status 200.

    • Added the required property items to the response with the 200 status.

    • Added the required property total to the response with the 200 status.

  • GET /api/profiles/{profileId}/audit-logs/{eventId}: added the endpoint.

  • GET /api/profiles/{profileId}/groups: added the endpoint.

  • DELETE /api/profiles/{profileId}/users/{userId}: added the endpoint.

  • PUT /api/profiles/{profileId}/users/{userId}: added the endpoint.

  • GET /api/toolbox/installer/windows: added the endpoint.

  • POST /api/tools/settings:

    • Added the optional property payload/tools/items/enabledPlugins/autoInstalled/items/channel to the response with the 200 status.

    • Added the optional property payload/tools/items/enabledPlugins/autoInstalled/items/source to the response with the 200 status.

  • POST /api/tools/settings/ide-configuration:

    • Added the optional property payload/tools/items/enabledPlugins/autoInstalled/items/channel to the response with the 200 status.

    • Added the optional property payload/tools/items/enabledPlugins/autoInstalled/items/forced to the response with the 200 status.

    • Added the required property payload/notifications/plugins/disabledPlugins to the response with the 200 status.

  • POST /api/transparency/agreement: added the endpoint.

  • Breaking change! POST /api/transparency/agreement/upload: this API has been deprecated.

  • GET /api/usage-stats/detailed: added the endpoint.

  • GET /api/usage-stats/events-stats-ai: added the endpoint.

  • GET /api/usage-stats/events-stats-ai-last: added the endpoint.

  • GET /api/usage-stats/events-stats-cwm: added the endpoint.

  • GET /api/usage-stats/events-stats-cwm-last: added the endpoint.

  • GET /api/usage-stats/events-stats-ide: added the endpoint.

  • GET /api/usage-stats/events-stats-ide-last: added the endpoint.

  • GET /api/usage-stats/recalculate: added the endpoint.

  • GET /api/usage-stats/report: added the endpoint.

  • POST /api/usage-stats/sending-status: added the endpoint.

  • GET /api/users:

    • Breaking change! Changed the response body format from array/none to object/none for the 200 status.

    • Breaking change! Removed the query request parameter include-total-count.

    • Added a new optional query request parameter filter-group-id.

    • The response property items became required for the status 200.

    • The response property total became required for the status 200.

    • Added the required property items to the response with the 200 status.

    • Added the required property total to the response with the 200 status.

  • POST /api/users: added the optional property profiles/items/groups to the response with the 200 status.

  • GET /api/users/products/{userId}:

    • Breaking change! This API has been deprecated.

    • Added the deprecated-user-controller API tag.

    • Removed the user-controller API tag.

  • PUT /api/users/profile:

    • Breaking change! This API has been deprecated.

    • Added the deprecated-user-controller API tag.

    • Removed the user-controller API tag.

  • POST /api/users/profiles/{profileId}/unassign:

    • Breaking change! This API has been deprecated.

    • Added the deprecated-user-controller API tag.

    • Removed the user-controller API tag.

  • GET /api/users/{id}: added the optional property profiles/items/groups to the response with the 200 status.

  • PATCH /api/users/{id}: added the optional property profiles/items/groups to the response with the 200 status.

  • PUT /api/users/{id}: added the optional property profiles/items/groups to the response with the 200 status.

  • GET /api/users/{id}/profiles:

    • Breaking change! Changed the response body format from array/none to object/none for the 200 status.

    • Added the user-profiles-controller API tag.

    • Removed the user-controller API tag.

    • The response property items became required for the status 200.

    • The response property total became required for the status 200.

    • Added the required property items to the response with the 200 status.

    • Added the required property total to the response with the 200 status.

  • GET /api/users/{userId}/groups: added the endpoint.

  • GET /api/users/{userId}/products: added the endpoint.

  • DELETE /api/users/{userId}/profiles/{profileId}: added the endpoint.

  • PUT /api/users/{userId}/profiles/{profileId}:

    • Added the user-profiles-controller API tag.

    • Removed the user-controller API tag.

Preview 10

  • IDE Provisioner

    • Improved performance of the plugin repository.

    • Introduced a possibility to disable the marketplace in IDEs.

    • Added a possibility to view the history of profile changes.

    • Switched to using XPath for setting templates instead of XML.

    • Added a possibility to configure automatically installed tools in profiles.

    • Added a possibility to configure Toolbox App settings in profiles.

    • Added a possibility to install plugins using jetbrains:// links.

    • Improved the logic of downloading feeds in offline mode. Now offline.json is not fully regenerated.

    • Introduced the ability to skip downloading tool distributions that have already been downloaded. Additionally, the --force option was implemented to forcibly re-download the tool.

  • JetBrains IDE Services plugin

  • Web UI

    • Redesigned the Configuration page.

    • Updated login pages for different user roles.

    • Implemented the restricted mode UI, which becomes active when IDE Provisioner is disabled.

    • Introduced a number of fixes and improvements to polish the overall look and feel of the Web UI.

  • API changes

    • GET /api/automation-tokens: replaced the operation id getAll_3 with getAll_2.

    • GET /api/configs: added an endpoint.

    • Breaking change! POST /api/import/users: changed the format/type of the users/items/permissions request property from array to object.

    • GET /api/plugin-repository/api/search/plugins: added an endpoint.

    • GET /api/profiles: replaced the operation id getAll_2 with getAll_1.

    • POST /api/profiles:

      • Added a new optional request property applications/content/items/autoinstalled.

      • Added a new optional request property settings/autoinstalledTools.

      • Added a new optional request property settings/autoinstalledToolsVersion.

      • Added a new optional request property settings/toolbox.

      • Added a new optional request property settings/toolboxVersion.

      • Added the optional property applications/content/items/autoinstalled to the response with the 200 status.

      • Added the optional property settings/autoinstalledTools to the response with the 200 status.

      • Added the optional property settings/autoinstalledToolsVersion to the response with the 200 status.

      • Added the optional property settings/toolbox to the response with the 200 status.

      • Added the optional property settings/toolboxVersion to the response with the 200 status.

    • POST /api/profiles/evaluate/profile-filters:

      • Added a new optional request property applications/content/items/autoinstalled.

      • Added a new optional request property settings/autoinstalledTools.

      • Added a new optional request property settings/autoinstalledToolsVersion.

      • Added a new optional request property settings/toolbox.

      • Added a new optional request property settings/toolboxVersion.

      • Added the optional property applications/content/items/autoinstalled to the response with the 200 status.

      • Added the optional property settings/autoinstalledTools to the response with the 200 status.

      • Added the optional property settings/autoinstalledToolsVersion to the response with the 200 status.

      • Added the optional property settings/toolbox to the response with the 200 status.

      • Added the optional property settings/toolboxVersion to the response with the 200 status.

    • GET /api/profiles/{id}:

      • Added the optional property applications/content/items/autoinstalled to the response with the 200 status.

      • Added the optional property settings/autoinstalledTools to the response with the 200 status.

      • Added the optional property settings/autoinstalledToolsVersion to the response with the 200 status.

      • Added the optional property settings/toolbox to the response with the 200 status.

      • Added the optional property settings/toolboxVersion to the response with the 200 status.

    • PUT /api/profiles/{id}:

      • Added a new optional request property applications/content/items/autoinstalled.

      • Added a new optional request property settings/autoinstalledTools.

      • Added a new optional request property settings/autoinstalledToolsVersion.

      • Added a new optional request property settings/toolbox.

      • Added a new optional request property settings/toolboxVersion.

      • Added the optional property applications/content/items/autoinstalled to the response with the 200 status.

      • Added the optional property settings/autoinstalledTools to the response with the 200 status.

      • Added the optional property settings/autoinstalledToolsVersion to the response with the 200 status.

      • Added the optional property settings/toolbox to the response with the 200 status.

      • Added the optional property settings/toolboxVersion to the response with the 200 status.

    • GET /api/profiles/{id}/users:

      • Breaking change! Changed the format/type of the users/items/id response property from string/uuid to string for status 200.

      • Added a new optional query request parameter limit.

      • Added a new optional query request parameter offset.

      • Added a new optional query request parameter order.

      • Added a new optional query request parameter page.

      • Added a new optional query request parameter sort.

      • Added the optional property total to the response with the 200 status.

    • GET /api/profiles/{profileId}/audit-logs:

      • Breaking change! Changed the format/type of the users/items/id response property from string/uuid to string for status 200.

      • Breaking change! Deleted the query request parameter actionType.

      • Added a new optional query request parameter type.

      • Added the optional property applications/content/items/autoinstalled to the response with the 200 status.

      • Added the optional property items/autoinstalledTools to the response with the 200 status.

      • Added the optional property items/autoinstalledToolsVersion to the response with the 200 status.

      • Added the optional property items/toolbox to the response with the 200 status.

      • Added the optional property items/toolboxVersion to the response with the 200 status.

      • Added the optional property items/type to the response with the 200 status.

    • POST /api/schedule/reorder-plugins: added an endpoint.

    • POST /api/schedule/{pluginId}/reorder-plugin: added an endpoint.

    • GET /api/toolbox/version: reactivated an endpoint.

    • GET /api/tools:

      • Breaking change! Removed the required property feeds from the response with the 200 status.

      • Breaking change! Removed the required property tools from the response with the 200 status.

      • Added a new optional query request parameter challenge.

      • Added the optional property challenge to the response with the 200 status.

      • Added the optional property extraClaims to the response with the 200 status.

      • Added the optional property headers to the response with the 200 status.

      • Added the optional property payload to the response with the 200 status.

    • Breaking change! POST /api/tools: removed the api path without deprecation.

    • Breaking change! GET /api/usage-data-transfers: removed the API path without deprecation.

    • Breaking change! POST /api/usage-data-transfers: removed the API path without deprecation.

    • Breaking change! GET /api/usage-data-transfers/active: removed the API path without deprecation.

    • Breaking change! POST /api/usage-data-transfers/{id}/cancel: removed the API path without deprecation.

Preview 9.1

  • UI changes

  • Code With Me Enterprise

    • Improved the UX of joining a Code With Me session for IDE Services users.

    • Introduced the Code With Me session log in the Web UI.

    • Improved the Code With Me session page UI.

  • IDE Services Demo

    • Migrated the demo to HTTP.

  • API changes

    • GET /api/cwm-tbe/events: added an endpoint.

    • GET /api/cwm-tbe/events-stats: added an endpoint.

    • POST /api/tools: added the required property feeds/items/relativeUrl to the response with the 200 status.

    • Breaking change! POST /api/tools/settings/ide-configuration: removed the required property analyticsMode from the response with the 200 status.

Preview 9

  • User management

    • Introduced an API for bulk creation of users and their permissions.

  • IDE Provisioner

    • Added the possibility to configure Bazel settings via profiles.

    • Implemented a possibility to install, update, downgrade, disable plugins, and send corresponding notifications to developers.

  • Offline mode

    • Added the possibility to use Nexus/Artifactory as a plugin storage.

    • Implemented prefix mapping and authentication for requests in the application.yaml file.

    • Unified the filter logic in TBE CLI and profiles.

  • Code With Me Enterprise

    • Implemented a verification process for each join request. Before granting access, the lobby server will check the policy stored on a TBE profile. This ensures that only authorized users are allowed to join the lobby.

  • JetBrains IDE Services plugin

    • Added an action to collect diagnostics data in IDEs.

    • Added IDE notifications on plugin updates.

    • Implemented the possibility to collect non-anonymous analytics.

  • UI changes

    • Redesigned the Plugins page.

    • Added notifications helping to fast-track profile changes.

    • Improved table elements.

    • Improved forms for user management inside profiles.

Preview.8.1

  • General

    • Changed the minimum required Toolbox App version to 2.3.

  • Profiles

    • Introduced update channels for IDEs. Now you can select the minimum quality of IDEs available to developers.

  • Offline mode

    • Introduced expiration dates for the Toolbox App feed mappings in offline.json.

    • Supported offline mode for Code With Me.

  • Users

    • Added the possibility to check the latest date when the user was online.

  • UI changes

    • Redesigned the Users page.

    • Redesigned the list of profiles on the Profiles page.

    • Redesigned the Plugins page.

    • Supported the Markdown format for data collection agreement files on the Configuration page.

    • Added the Offline mode widget.

    • Supported profile deletion from the profile details page.

Preview.8

  • Offline Mode

    • Now you can run IDE Services in a network-isolated environment by enabling offline mode and bootstrapping the service with the new IDE Services CLI tool. For more details, see Offline mode.

  • Plugin Retention Policy

    • It is now possible to specify an expiration date when uploading a plugin. After this date, IDE Services will no longer publish the plugin and will remove it after the specified date. This is an opt-in feature, so unless specified explicitly, IDE Services will serve all plugins forever.

  • Beta Plugin Channels

    • It is now possible to specify channels for plugins distributed by IDE Services, so developers can receive beta or nightly builds. These channels exist on a per-plugin basis.

  • IDE Services-managed settings in IDEs

    • In the IDE settings, you can now find settings managed by your organization.

    • Now you can see notifications related to plugins and vm options in the IDE.

  • Bulk operations with plugins

    • On the Plugins page, you can quickly add and remove several plugin versions at once.

  • Support for Azure Blob Storage

    • You can configure your server to use Azure Blob Storage as an object storage. For more details, see Azure Blob Storage.

  • The local plugin repository uses the upload date and time to order plugins.

    • IDE Services now promotes only the latest plugin for a given plugin ID. To define which plugin is considered the latest, IDE Services uses its upload date.

  • Organization logo

    • On the IDE Services Server side, you can configure your organization's logo to be displayed in the IDEs.

  • New setting template to disable installing plugins from the disk.

  • UI changes

    • Added the list of profile users to profile details.

    • Added filters to the Plugins page, enabling you to search for plugins by name, vendor, and visibility status.

    • Redesigned the welcome screen.

    • Redesigned the Users page.

    • Enhanced the Available applications section in the profile editor.

Preview.7

  • Profiles

    • Implemented the new logic for application filters. The list of applications available for a particular profile influences the application filters that you configure when adding a new setting or plugin.

    • Redesigned the Profiles UI.

  • Plugins

    • Improved the API for working with plugins.

    • Added validation for plugin IDs and versions. Now, IDE Services will show an error if these values contain the .., /, or \ symbols.

  • Analytics

    • Reduced the number of analytics logs delivered to the IDE Services Server for safety and better data compliance. This update improves the consistency of data delivery, making the process more transparent.

Preview.6

  • Notification mechanism for restricting and updating IDEs

    • Added a possibility to schedule a force update in the Web UI

    • Added force update notifications to JetBrains IDEs

  • UI improvements in the Web UI

    • Cleaned up the Home page

    • Redesigned the Configuration page

    • Added a link to the IDE Services help to the main menu

    • Cleaned up the Users page

  • Fixed a bunch of issues related to the analytics collection

Preview.5

More than 97 issues were resolved in this release, here are the most notable changes:

  • Propagate IDE Settings

    • Supported IDE settings configuration in the Web UI

    • Provided predefined templates for common scenarios. Would you like to see more templates? Let us know

  • Plugin Repository

    • Added plugin download events

    • Introduced the plugin repository audit log

  • Supported aarch64 platform for docker images, IDE Services Preview now runs on Apple Silicon computers

  • The license agreement is shown when you launch the server for the first time. It will ask you to add a configuration parameter to mark your agreement and to let the server start

  • The Toolbox App (1.26+) shows restart notifications in IDEs when new settings or plugins are applied

Preview.4

  • Plugin repository:

    • Configured the internal plugin repository to use the database. The IDE Services Server converts the current storage on the first start. It might take several minutes before you’ll be able to see all your plugins again. Furthermore, it is possible to trigger this synchronisation manually should you see any inconsistencies.

    • Introduced stability channels for plugins

  • UI improvements:

    • Added a dark theme

    • Added a new filter to sort out users by their roles

    • Implemented a UI for editing available IDE plugins in profiles

    • Added the consent link to the Toolbox App

    • Fixed the way the data collection agreements are displayed

    • Added highlighting of unsupported VM options

  • Analytics:

    • Improved the collection of freeze analytics and introduced the possibility to view details of freeze reports

    • Introduced the ability to download collected exception reports from the UI

  • IDE Plugin:

    • Retired the support for 2020.3 IDEs

    • Fixed login flow and authentication for plugin repository in Android Studio

  • Notable improvements:

    • Added an ability to infer object storage credentials implicitly when IDE Services is deployed using the AWS stack

    • Updated the available filters for searching IDEs

    • IDE Services can now work in specific network setups where authentication is provided by a forward proxy

Preview.3

  • Added support for IntelliJ-based IDEs from the 2022.1 release

  • Improved Docker Image, JAR package, and docker-compose demo

  • Implemented analytics dashboard for:

    • IDE and plugin versions, OS, and options

    • Top exceptions dashboard

    • APDEX code completion performance

  • Updated profiles:

    • Management of VM Options

    • Management of disabled plugins

    • Automatic configuration of plugin force-installation

  • Plugin Repository:

    • Plugin dedicated page

    • Support for plugin channels

    • Authorization for plugin downloads

    • Plugin uploading from Gradle SDK

  • Notable improvements:

    • Default profile is correctly added to all new users

    • Fixed too frequent login notifications from Toolbox App

    • Implemented better handling of OAuth 2.0 server error responses

    • Added the possibility to show profiles on the Users page

    • Added an option to disable selected bundled plugins from an IDE

    • Added instructions on how to list current HTTPS certificates

    • Improved how we collect exceptions and freezes from an IDE

    • Warn HTTPS has to be used

    • Show plugin download link, size, and compatible IDEs

Last modified: 15 July 2024