Skip to content

🛠️ Ready to Build?

Apply what you’ve learned and deploy Keycloak on Cloud-IAM.

Try Cloud-IAM

My Extensions

My Extensions is your organization's centralized library of custom extensions. It provides a single place to store, version, validate, and distribute all your custom Keycloak extensions across every deployment in your organization.

From My Extensions, you manage all your extensions and their versions in one place, across your different Keycloak environments (development, pre-production, staging, beta, and production). Track and test your extension compatibility with specific Keycloak versions to simplify and secure the upgrade process of your deployments. Each extension release goes through an automated technical validation process to verify its compatibility with the declared Keycloak versions. This validation covers technical aspects (correct loading, SPI registration, absence of conflicts) so you can focus your testing efforts on functional behavior, without worrying about startup failures.

Document your extensions for your internal teams so that no knowledge is lost, from one release to another or from one test to another. Want to share your extension with other Cloud-IAM users? You can publish it on the Cloud-IAM Marketplace directly from My Extensions.

Cloud-IAM Console - My Extensions
Cloud-IAM Console - My Extensions

What is a custom extension on Cloud-IAM

Keycloak is a powerful identity and access management solution designed to cover most common use cases right out of the box. However, there are situations where its default functionality may not fully address your unique business requirements. In these cases, custom extensions allow you to tailor and enhance Keycloak, bridging functionality gaps and adapting the platform precisely to your needs.

For a detailed overview of what custom extensions are, how they work, and best practices, please refer to our Custom Extensions Reference.

With Cloud-IAM managed Keycloak deployments, direct access to your Keycloak server for developing custom extensions is not available. Instead, all custom extension implementations must be processed through the Cloud-IAM Console or via the Cloud-IAM APIs on your organization.

What are the prerequisites to use My extensions feature on Cloud-IAM?

Before managing My extensions on Cloud-IAM, please ensure the following:

  • Dedicated Keycloak Deployment: Custom extension support is available only on dedicated Keycloak deployments managed by Cloud-IAM.
  • Support Plan: Your Cloud-IAM support plan must include the Custom Extension privilege, more details in Cloud-IAM pricing page.
  • User Role: You must have the Editor role within your organization to upload, update, or delete custom extensions. For more details, see Organization Roles.
  • Extension Packaging: Custom extensions must be packaged as Java .JAR files, compliant with Keycloak's Service Provider Interfaces (SPI).

How to access My Extensions?

To manage your organization's custom extensions, access the My Extensions library from the Cloud-IAM Console.

  1. Open Cloud-IAM console (directly from the home page with the list of your deployment(s))
  2. Navigate to the My Extensions tab

You will now see a list of all extensions created by your organization, along with their current status.

Cloud-IAM Console - Access My Extensions feature
Cloud-IAM Console - Access My Extensions feature

How to upload or create a custom extension on Cloud-IAM console?

You can upload your custom Keycloak extensions, packaged as Java .JAR files, directly through the Cloud-IAM Console. Once uploaded, your extension is stored in your organization's My Extensions library, where you can document it, validate it against specific Keycloak versions, and make it available for installation across all your deployments.

Follow these steps to create a new extension:

  1. Follow this tutorial to access My Extensions
  2. Click on the + New extension button
Extension creation — Add + New extension
Cloud-IAM Console - Add + New extension

Step 1 — General information

  • Register the extension name and summary
  • Upload a logo for your extension
  • Select one or more categories to which your extension belongs

These details help document your extension for yourself and other members of your organization.

Extension creation — Step 1 — General information
Extension creation — Step 1 — General information

Step 2 — Overview

  • Upload up to 5 screenshots to showcase your extension
  • Write a detailed description of your extension: what it does, what it enables, and its key features. This description is visible to your entire organization if the extension is set to private, or to all organizations if set to public.
Extension creation — Step 2 — Overview
Extension creation — Step 2 — Overview

Step 3 — Installation instructions

  • Provide a how-to-install guide to help your team or external users set up the extension after installation (for example, environment variables to configure or steps to follow in the Keycloak admin console)
Extension creation — Step 3 — Installation instructions
Extension creation — Step 3 — Installation instructions

Step 4 — Release notes & files

  • Set the version number
  • Upload your JAR file(s) (up to 5)
  • Select the Keycloak SPI(s) implemented by your extension
  • Define the Keycloak compatibility range (oldest to latest supported versions)
  • Add release notes to describe what changed in this version, such as new features, bug fixes, or breaking changes

Once submitted, your extension goes through an automated validation process before being available in your organization's library named My Extensions.

Extension creation — Step 4 — Release notes & files
Extension creation — Step 4 — Release notes & files

How to create or submit a new extension release on Cloud-IAM console?

When your extension is ready to move from development to production, or when you need to ship a bug fix, a new feature, or a compatibility update, you create a new release. Each release carries its own JAR files, Keycloak compatibility range, and release notes, giving your team full traceability across environments and versions.

Step 1 — Access release form

  1. Follow this tutorial to access My Extensions
  2. Select the extension to update
  3. Navigate to the Releases tab
  4. Click on + to open the release form
Extension release — Step 1 — Access release form
Cloud-IAM Console - Step 1 — Access release form

Step 2 — Complete and submit your release

  1. Fill in the release details:
    • Version number
    • JAR file(s) (up to 5)
    • Keycloak SPI(s) implemented by your extension
    • Keycloak compatibility range (oldest to latest supported versions)
    • Release notes to describe what changed in this version
  2. Click on Save to submit your release

After submission, your release goes through an automated technical validation.

Extension release — Step 2 — Complete and submit your release
Cloud-IAM Console - Step 2 — Complete and submit your release

What is the extension release validation process on Cloud-IAM?

After submission, each release goes through an automated technical validation to verify compatibility with the declared Keycloak versions. For each declared Keycloak version, Cloud-IAM runs the following validation pipeline:

  1. Downloads the extension JAR files
  2. Loads them into the target Keycloak version
  3. Verifies Keycloak starts successfully with the extension loaded
  4. Checks SPI registration and absence of conflicts
  5. Reports the result back to the release page

The release status transitions through the following states:

StatusDescription
CreatedRelease submitted, waiting for validation
ValidatingAutomated compatibility checks in progress
ValidatedRelease passed all checks and is ready to be installed
UnvalidatedRelease did not pass validation — review details on the release page

What does the validation cover?

The automated validation covers technical compatibility: correct loading, SPI registration, and absence of conflicts with the declared Keycloak versions. It does not cover functional behavior inside Keycloak, which remains the responsibility of the extension publisher.

How to publish or unpublish an extension on Cloud-IAM console?

Once your extension has at least one validated release, you can make it available for installation across all deployments within your organization.

  1. Follow this tutorial to access My Extensions
  2. Select the extension you want to publish or unpublish
  3. Click on Available to publish or Unavailable to unpublish
ActionStatusResult
AvailableLiveExtension is visible and installable on every deployment
UnavailableUnlistedExtension is no longer visible or installable on new deployments

Existing installations are not affected

Unpublishing an extension does not remove or uninstall it from deployments where it is already installed.

Extension — Availability status
Extension- Availability status

How to configure automatic compatibility checks?

Each time a new Keycloak version is released on Cloud-IAM, you would normally need to manually test and update the compatibility range of each extension. Automatic compatibility checks remove this burden: Cloud-IAM automatically tests your extension against each new Keycloak version and updates its compatibility range if the validation passes.

When enabled, if your extension already supports the previous Keycloak version, Cloud-IAM will automatically run the technical validation process against the new version within 24 hours of its release. If the validation passes, the new Keycloak version is added to the extension's compatibility range. If it fails, the compatibility range remains unchanged and you can review the validation details from the release page.

  1. Follow this tutorial to access My Extensions
  2. Select the extension to configure
  3. Toggle the Auto compatibility check option

When should you enable this?

This is especially useful if your organization manages multiple extensions or maintains long-lived deployments that follow Keycloak upgrades closely. It ensures your extensions stay up to date without requiring manual re-validation after each Cloud-IAM Keycloak release.

Auto compatibility check
Cloud-IAM Console - Extension Auto Compatibility Check

How to list extensions through Cloud-IAM API?

You can retrieve the list of all custom extensions belonging to your organization programmatically using the Cloud-IAM REST API.

  1. Obtain a Bearer token using a Service Account
  2. Obtain your Organization ID
  3. Execute this command while replacing by your Organization ID.
shell
curl -s \
  -H "Authorization: Bearer $TOKEN" \
  "https://api.cloud-iam.com/organizations/{organizationId}/marketplace/extensions"

Example response:

json
[
  {
    "extensionId": "550e8400-e29b-41d4-a716-446655440000",
    "name": "My Extension",
    "availability": "GA",
    "documentation": "# Documentation\nMarkdown content...",
    "summary": "Short description of the extension",
    "isMandatory": false,
    "isPublished": true,
    "howToInstall": "Installation instructions...",
    "logo": "https://storage.example.com/logo.png",
    "categories": [
      {
        "categoryId": "cat-001",
        "name": "Authentication"
      }
    ],
    "screenshots": [
      {
        "extensionId": "550e8400-e29b-41d4-a716-446655440000",
        "rank": 1,
        "filepath": "https://storage.example.com/screenshot-1.png",
        "extension": "png"
      }
    ],
    "latestRelease": {
      "releaseId": "rel-001",
      "version": "1.2.0",
      "status": "VALIDATED"
    },
    "organizationId": "org-001",
    "organizationName": "My Organization",
    "visibility": "PUBLIC"
  }
]

Key response fields:

  • extensionId — unique identifier of the extension
  • name — display name
  • availabilityGA (generally available)
  • isPublished — whether the extension is visible on my deployments
  • visibilityPRIVATE. In the initial phase, all extensions are set to PRIVATE and this value cannot be changed
  • categories — list of associated categories
  • latestRelease — the most recent release (or null if none)
  • organizationId / organizationName — owning organization

TIP

The endpoint always returns 200 OK, even when the list is empty.

How to list releases for an extension through Cloud-IAM API?

You can retrieve the list of all releases belonging to a specific extension using the Cloud-IAM REST API.

  1. Obtain a Bearer token using a Service Account
  2. Obtain your Extension ID
  3. Execute this command while replacing by your Extension ID.
shell
curl -s \
  -H "Authorization: Bearer $TOKEN" \
  "https://api.cloud-iam.com/marketplace/extensions/{extensionId}/releases?page=0&size=20"

Query parameters:

  • page — page number, 0-indexed (default: 0)
  • size — items per page (default: 20)
  • sort — sort field and direction (default: updated_at,DESC)

Example response:

json
{
  "content": [
    {
      "extensionId": "ext-001",
      "releaseId": "rel-001",
      "version": "1.2.0",
      "availability": "GA",
      "status": "VALIDATED",
      "jars": [
        {
          "jarId": "jar-001",
          "releaseId": "rel-001",
          "jar": "s3://bucket/path/to/extension.jar",
          "filename": "my-extension-1.2.0.jar"
        }
      ],
      "compatibility": ["25.0.0", "24.0.6"],
      "spis": ["org.keycloak.authentication.AuthenticatorFactory"],
      "releaseNote": "Bug fixes and performance improvements.",
      "updatedAt": "2026-03-20T14:30:00Z"
    }
  ],
  "page": {
    "size": 20,
    "totalElements": 5,
    "totalPages": 1,
    "number": 0
  }
}

Key response fields:

  • releaseId — unique identifier of the release
  • version — version number
  • status — current validation status (see Release validation process)
  • jars — list of JAR files associated with the release
  • compatibility — list of compatible Keycloak versions
  • spis — list of Keycloak SPIs implemented by the extension
  • releaseNote — release notes
  • updatedAt — last modification timestamp
  • page.totalElements / page.totalPages — pagination info

How to add a release for an extension through Cloud-IAM API?

Step 1 — Upload the release

  1. Obtain a Bearer token using a Service Account
  2. Obtain your Extension ID
  3. Prepare the releaseData fields:
FieldRequiredDescription
versionYesRelease version number (e.g. 1.3.0)
availabilityNoMaturity level (default: GA)
keycloakVersionsYesList of compatible Keycloak version IDs
keycloakSpiNoList of Keycloak SPIs implemented by the extension
releaseNoteNoDescription of changes in this version
  1. Execute this command while replacing by your Extension ID.
shell
curl -s -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -F 'releaseData={"version":"1.3.0","availability":"GA","keycloakVersions":["kc-25.0.0","kc-24.0.6"],"keycloakSpi":["org.keycloak.authentication.AuthenticatorFactory"],"releaseNote":"Added multi-realm support."};type=application/json' \
  -F "jars=@my-extension-1.3.0.jar" \
  "https://api.cloud-iam.com/marketplace/extensions/{extensionId}/releases"

TIP

Returns 204 No Content on success.

Step 2 — Automatic validation

Once the release is created, the system automatically triggers a compatibility check pipeline for each declared Keycloak version. The pipeline verifies that the extension JAR is compatible with the target Keycloak image.

You can monitor the release status by polling:

  1. Obtain a Bearer token using a Service Account
  2. Obtain your Extension ID
  3. Obtain your Release ID
  4. Execute this command while replacing by your Extension ID & Release ID.
shell
curl -s \
  -H "Authorization: Bearer $TOKEN" \
  "https://api.cloud-iam.com/marketplace/extensions/{extensionId}/releases/{releaseId}"

Step 3 — Force validation (optional)

If automatic validation fails or is not applicable, you can manually force-validate the release:

  1. Obtain a Bearer token using a Service Account
  2. Obtain your Extension ID
  3. Obtain your Release ID
  4. Execute this command while replacing by your Extension ID & Release ID.
shell
curl -s -X PATCH \
  -H "Authorization: Bearer $TOKEN" \
  "https://api.cloud-iam.com/marketplace/extensions/{extensionId}/releases/{releaseId}/force-validation"

TIP

Returns 204 No Content on success. This sets the release and all its associated Keycloak version statuses to VALIDATED.