# *****************************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
# ******************************************************************************

apiVersion: v1
name: keycloak
version: 7.0.0
appVersion: 8.0.1
description: Open Source Identity and Access Management For Modern Applications and Services
keywords:
  - sso
  - idm
  - openid connect
  - saml
  - kerberos
  - ldap
home: https://www.keycloak.org/
icon: https://www.keycloak.org/resources/images/keycloak_logo_480x108.png
sources:
  - https://github.com/codecentric/helm-charts
  - https://github.com/jboss-dockerfiles/keycloak
maintainers:
  - name: unguiculus
    email: unguiculus@gmail.com
  - name: thomasdarimont
    email: thomas.darimont+github@gmail.com
