Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improving developer and extension story in Keycloak #13

Open
stianst opened this issue Jun 4, 2024 · 2 comments
Open

Improving developer and extension story in Keycloak #13

stianst opened this issue Jun 4, 2024 · 2 comments

Comments

@stianst
Copy link
Contributor

stianst commented Jun 4, 2024

Description

Improving our developer and extension story

  • Open up to modularise the Keycloak code base into a suite of extensions
  • Make it easier to build custom extensions, including enabling community maintained extensions available in a “marketplace”

What is an extension?

  • One or more providers
  • A custom theme
  • Custom theme resources
  • Configuration
    ** Server-level configuration
    *** CLI options / environment variables
    ** Realm-level configuration
    *** Component model
  • Third-party dependencies
  • Enabling/requiring additional Quarkus extensions
  • A GitHub repository, with GitHub Actions for testing, and GitHub releases for release artifacts to make it easy to install
  • Compatibility Matrix (works with Keycloak Version X, X+1)

What can be improved

  • New SPIs or improved APIs for existing SPIs to make it easier to develop extensions for specific use-cases
  • Testing
  • Packaging, including third-party dependencies
  • Consistent and simplified installation of extensions
  • Marketplace/visibility of extensions

What could a marketplace do?

  • Not really a marketplace as it’s for free and open source extensions ;)
  • Easy way to discover extensions, and provide consistent approach to testing, verifying with KC releases, showing what versions of an extension is compatible with a given KC release, how to install it, etc.
  • Theme preview PoC (Stian) - PoC to demonstrate a easy way to preview custom themes

Discussion

None

Issues

No response

Motivation

No response

@thomasdarimont
Copy link
Collaborator

Adding to "What is an extension?":

  • Could also provide new SPIs and referernce implementations
  • Support Information (Vendor metadata, Vendor Link, Link to external documentation)
  • Requirements: (Min Keycloak version, Feature state (enabled, disabled))

@thomasdarimont
Copy link
Collaborator

thomasdarimont commented Nov 11, 2024

We should also provide something like a keycloak-platform-bom or an keycloak-extension-bom that references all libraries available within the Keycloak distribution for a particular version.

Developers who want to write an extension should only need two (currently fictional dependencies):

<dependencyManagement>
	<dependencies>
        <dependency>
<!-- provides the keycloak libraries for the given keycloak base -->
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-platform-bom</artifactId>
            <version>${keycloak.version}</version>
			<scope>import</scope>
        </dependency>
	</dependencies>
</dependencyManagement>

<dependencies>
        <dependency>
<!-- all APIs available for extension development -->
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-platform</artifactId>
            <version>${keycloak.version}</version>
            <scope>provided</scope>
        </dependency>

<!-- if we had dedicated modules, users could declare a dependency to a specific module instead of refering to the keycloak-platform, e.g. oidc extensions -->
        <dependency>
<!-- all APIs within the oidc protocol context -->
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-oidc</artifactId>
            <version>${keycloak.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
<!-- testing integration -> new test framework? -->
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-platform-test</artifactId>
            <version>${keycloak.version}</version>
            <scope>test</scope>
        </dependency>
</dependencies>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants