Comments (23)
I don't think this is stale
from charts.
I just reviewed the changes from 21.0.4 to 21.1.0 and saw that since then the env variables KC_HOSTNAME_URL
and KC_HOSTNAME_ADMIN_URL
are used instead of KC_HOSTNAME_ADMIN
in
If I'm not mistaken, it seems that the path defined in the ingress or in httpRelativePath is not used in this context. Is this an oversight, or am I misunderstanding the configuration of the environment variables?
from charts.
Hi, it is introduced by the commit: #25386. I'm impacted too.
My use case is to serve the admin ingress on the same host but with the adminIngress as a subPath to allow ip restriction on this path only.
from charts.
According to the v1 docs, the path should be added when paying the
KC_HOSTNAME_ADMIN_URL
.
Set the base URL for accessing the administration console, including scheme, host, port and path
This may also be the case in v2.
from charts.
Hi @jotamartos
The logs I commented previously were from a Kind Cluster running on Github Actions in a CI pipeline.
I've upgraded to 22.0.0
of the Keycloak helm chart and everything seems to be working now.
from charts.
Using 22.0.0
, the environment variables are being set correctly.
Example values.yaml
httpRelativePath: /auth/
production: true
proxy: edge
# https://github.com/bitnami/charts/issues/28154
proxyHeaders: xforwarded
ingress:
enabled: true
ingressClassName: nginx-external
hostname: keycloak.example.com
annotations:
# Deny access to the admin console and master realm
nginx.ingress.kubernetes.io/server-snippet: |
location /auth/admin {
deny all;
}
location /auth/realms/master {
deny all;
}
adminIngress:
enabled: true
ingressClassName: nginx-internal
hostname: keycloak.example.com
Resulting statefulset:
- name: KEYCLOAK_HTTP_RELATIVE_PATH
value: /auth/
- name: KC_HOSTNAME_ADMIN_URL
value: https://keycloak.example.com/auth/
- name: KC_HOSTNAME_URL
value: https://keycloak.example.com/auth/
from charts.
Hi,
we have observed a similar issue. With Helm Chart version 21.0.4, everything was functioning as expected. However, after updating to 21.1.0, the Admin WebApp can no longer be accessed because the "auth" part is being removed. When I try to access the URL https://mdomain.de/auth/, it redirects to https://mdomain.de/admin/ instead of https://mdomain.de/auth/admin/.
Here are the chart values used:
httpRelativePath: /auth/
ingress:
annotations:
kubernetes.io/ingress.class: nginx
nginx.org/location-snippets: |
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
nginx.org/proxy-buffer-size: 128k
nginx.org/proxy-buffers: 4 256k
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
cert-manager.io/issuer: cert-issuer
enabled: true
hostname: …
path: /
pathType: Prefix
tls:
- hosts:
- ...
secretName: cert-secret
adminIngress:
annotations:
kubernetes.io/ingress.class: nginx
enabled: true
hostname: …
path: /auth/admin
pathType: Prefix
tls:
- hosts:
- …
secretName: cert-secret
Thanks for your help.
from charts.
Any update ?
from charts.
Thanks for the investigation you did, @bjsee. I can see this in Keycloak's documentation:
hostname-admin-url
Set the base URL for accessing the administration console, including scheme, host, port and path
CLI: --hostname-admin-url
Env: KC_HOSTNAME_ADMIN_URL
Have you tried adding your httpRelativePath
to the KC_HOSTNAME_ADMIN_URL
environment variable? Perhaps its missing there.
from charts.
Hi @alemorcuq, I've been trying all morning to adjust the values but nothing works, even adjusting httpRelativePath to KC_HOSTNAME_ADMIN_URL...
I reiterate that everything was working on chart 21.0.2 and then only 404 errors.
Can you reproduce my environment?
from charts.
No updates?
from charts.
Waiting too. In the meantime, Keycloak updates are blocked...
from charts.
Can confirm, doing the following resolves the issue for us:
httpRelativePath: /auth/
adminIngress:
enabled: true
hostname: keycloak.example.com
extraEnvVars:
- name: KC_HOSTNAME_ADMIN_URL
value: 'https://{{ .Values.adminIngress.hostname }}{{ .Values.httpRelativePath }}'
$ curl -sI https://keycloak.example.com/auth/
HTTP/2 302
date: Thu, 13 Jun 2024 08:44:38 GMT
location: https://keycloak.example.com/auth/admin/
We're using Chart version 21.4.1
from charts.
Hello @singhbaljit, thank you for your fix, I'll take a look on it asap
from charts.
@CaptainKrby I don't think my fix will resolve your issue. I think we need to append the {{ .Values.httpRelativePath }}
for the full hostname URL.
from charts.
This Issue has been automatically marked as "stale" because it has not had recent activity (for 15 days). It will be closed if no further activity occurs. Thanks for the feedback.
from charts.
Due to the lack of activity in the last 5 days since it was marked as "stale", we proceed to close this Issue. Do not hesitate to reopen it later if necessary.
from charts.
Does this work?
As far as I know, this is still an issue
/reopen
from charts.
I confirm this issue is still there.
from charts.
On 21.7.1
I now have to do the following for everything to work
httpRelativePath: /auth/
proxy: edge
proxyHeaders: forwarded
extraEnvVars:
- name: KC_HOSTNAME_ADMIN_URL
value: "https://{{ .Values.adminIngress.hostname }}{{ .Values.httpRelativePath }}"
- name: KC_HOSTNAME_URL
value: "https://{{ .Values.ingress.hostname }}{{ .Values.httpRelativePath }}"
ingress:
enabled: true
ingressClassName: nginx-external
hostname: keycloak.example.com
adminIngress:
enabled: true
ingressClassName: nginx-internal
hostname: keycloak.example.com
from charts.
Hi, #28176 should fix this issue. Please, give it a try!
from charts.
Thank you @andresbono.
I tested by updating the chart to the latest release -21.7.4
- and ran a helm install
in a local kind cluster for testing.
It appears the Keycloak Config CLI was updated and is not compatible with Keycloak 24.0.5.
2024-07-24T17:58:20.548Z INFO 1 --- [ main] d.a.k.config.provider.KeycloakProvider : Wait 120 seconds until http://keycloak-headless:8080/auth/ is available ...
2024-07-24T17:58:22.694Z WARN 1 --- [ main] d.a.k.config.provider.KeycloakProvider : Local keycloak-config-cli (6.1.5-25.0.1) and remote Keycloak (24.0.5) may not compatible.
2024-07-24T17:58:23.620Z ERROR 1 --- [ main] d.a.k.config.KeycloakConfigRunner : Cannot update realm 'master': HTTP 400 Bad Request{"error":"Unrecognized field \"organizationsEnabled\" (class org.keycloak.representations.idm.RealmRepresentation), not marked as ignorable (141 known properties: \"userFederationMappers\", \"rememberMe\", \"duplicateEmailsAllowed\", \"adminEventsDetailsEnabled\", \"users\", \"clientOfflineSessionMaxLifespan\", \"webAuthnPolicyRequireResidentKey\", \"webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister\", \"components\", \"otpPolicyType\", \"accessCodeLifespanUserAction\", \"id\", \"webAuthnPolicyAttestationConveyancePreference\", \"enabledEventTypes\", \"applications\", \"webAuthnPolicyPasswordlessSignatureAlgorithms\", \"eventsListeners\", \"ssoSessionMaxLifespanRememberMe\", \"defaultDefaultClientScopes\", \"webAuthnPolicyPasswordlessCreateTimeout\", \"clientOfflineSessionIdleTimeout\", \"notBefore\", \"publicKey\", \"smtpServer\", \"clientPolicies\", \"res
2024-07-24T17:58:23.622Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigRunner : keycloak-config-cli ran in 00:05.235.
I'm not setting the version of Keycloak Config CLI or Keycloak anywhere in the Helm chart, relying fully on the default values set in the bitnami/keycloak
helm chart.
Edit to prevent spam
Same issue on 21.7.5
:
2024-07-25T08:18:59.953Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigApplication : Starting KeycloakConfigApplication v6.1.5 using Java 21.0.4 with PID 1 (/opt/bitnami/keycloak-config-cli/keycloak-config-cli-25.0.1.jar started by ? in /opt/bitnami/keycloak-config-cli)
2024-07-25T08:18:59.962Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigApplication : No active profile set, falling back to 1 default profile: "default"
2024-07-25T08:19:02.433Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigApplication : Started KeycloakConfigApplication in 4.628 seconds (process running for 6.88)
2024-07-25T08:19:05.639Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigRunner : Importing file 'file:/config/01-master-realm.yaml'
2024-07-25T08:19:06.559Z INFO 1 --- [ main] d.a.k.config.provider.KeycloakProvider : Wait 120 seconds until http://keycloak-headless:8080/auth/ is available ...
2024-07-25T08:19:07.623Z WARN 1 --- [ main] d.a.k.config.provider.KeycloakProvider : Local keycloak-config-cli (6.1.5-25.0.1) and remote Keycloak (24.0.5) may not compatible.
2024-07-25T08:19:08.430Z ERROR 1 --- [ main] d.a.k.config.KeycloakConfigRunner : Cannot update realm 'master': HTTP 400 Bad Request{"error":"Unrecognized field \"organizationsEnabled\" (class org.keycloak.representations.idm.RealmRepresentation), not marked as ignorable (141 known properties: \"userFederationMappers\", \"rememberMe\", \"duplicateEmailsAllowed\", \"adminEventsDetailsEnabled\", \"users\", \"clientOfflineSessionMaxLifespan\", \"webAuthnPolicyRequireResidentKey\", \"webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister\", \"components\", \"otpPolicyType\", \"accessCodeLifespanUserAction\", \"id\", \"webAuthnPolicyAttestationConveyancePreference\", \"enabledEventTypes\", \"applications\", \"webAuthnPolicyPasswordlessSignatureAlgorithms\", \"eventsListeners\", \"ssoSessionMaxLifespanRememberMe\", \"defaultDefaultClientScopes\", \"webAuthnPolicyPasswordlessCreateTimeout\", \"clientOfflineSessionIdleTimeout\", \"notBefore\", \"publicKey\", \"smtpServer\", \"clientPolicies\", \"resetPasswordAllowed\", \"webAuthnPolicyAvoidSameAuthenticatorRegister\", \"accessTokenLifespanForImplicitFlow\", \"webAuthnPolicyPasswordlessUserVerificationRequirement\", \"clientScopes\", \"internationalizationEnabled\", \"defaultRole\", \"accessTokenLifespan\", \"passwordCredentialGrantAllowed\", \"federatedUsers\", \"applicationScopeMappings\" [truncated]])\n at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 3952] (through reference chain: org.keycloak.representations.idm.RealmRepresentation[\"organizationsEnabled\"])","error_description":"For more on this error consult the server log at the debug level."}
2024-07-25T08:19:08.431Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigRunner : keycloak-config-cli ran in 00:04.062.
from charts.
That doesn't happen in a fresh installation, could you please let us know if you can reproduce it in a new deployment?
�[38;5;6mkeycloak �[38;5;5m10:26:20.10 �[0m�[38;5;2mINFO �[0m ==>
�[38;5;6mkeycloak �[38;5;5m10:26:20.10 �[0m�[38;5;2mINFO �[0m ==> �[1mWelcome to the Bitnami keycloak container�[0m
�[38;5;6mkeycloak �[38;5;5m10:26:20.10 �[0m�[38;5;2mINFO �[0m ==> Subscribe to project updates by watching �[1mhttps://github.com/bitnami/containers�[0m
�[38;5;6mkeycloak �[38;5;5m10:26:20.10 �[0m�[38;5;2mINFO �[0m ==> Submit issues and feature requests at �[1mhttps://github.com/bitnami/containers/issues�[0m
�[38;5;6mkeycloak �[38;5;5m10:26:20.10 �[0m�[38;5;2mINFO �[0m ==> Upgrade to Tanzu Application Catalog for production environments to access custom-configured and pre-packaged software components. Gain enhanced features, including Software Bill of Materials (SBOM), CVE scan result reports, and VEX documents. To learn more, visit �[1mhttps://bitnami.com/enterprise�[0m
�[38;5;6mkeycloak �[38;5;5m10:26:20.11 �[0m�[38;5;2mINFO �[0m ==>
�[38;5;6mkeycloak �[38;5;5m10:26:20.11 �[0m�[38;5;2mINFO �[0m ==> ** Starting keycloak setup **
�[38;5;6mkeycloak �[38;5;5m10:26:20.13 �[0m�[38;5;2mINFO �[0m ==> Validating settings in KEYCLOAK_* env vars...
�[38;5;6mkeycloak �[38;5;5m10:26:20.15 �[0m�[38;5;2mINFO �[0m ==> Trying to connect to PostgreSQL server keycloak-postgresql...
timeout reached before the port went into state "inuse"
�[38;5;6mkeycloak �[38;5;5m10:26:36.17 �[0m�[38;5;2mINFO �[0m ==> Found PostgreSQL server listening at keycloak-postgresql:5432
�[38;5;6mkeycloak �[38;5;5m10:26:36.18 �[0m�[38;5;2mINFO �[0m ==> Configuring database settings
�[38;5;6mkeycloak �[38;5;5m10:26:36.21 �[0m�[38;5;2mINFO �[0m ==> Enabling statistics
�[38;5;6mkeycloak �[38;5;5m10:26:36.22 �[0m�[38;5;2mINFO �[0m ==> Enabling health endpoints
�[38;5;6mkeycloak �[38;5;5m10:26:36.23 �[0m�[38;5;2mINFO �[0m ==> Configuring http settings
�[38;5;6mkeycloak �[38;5;5m10:26:36.25 �[0m�[38;5;2mINFO �[0m ==> Configuring hostname settings
�[38;5;6mkeycloak �[38;5;5m10:26:36.26 �[0m�[38;5;2mINFO �[0m ==> Configuring cache count
�[38;5;6mkeycloak �[38;5;5m10:26:36.27 �[0m�[38;5;2mINFO �[0m ==> Configuring log level
�[38;5;6mkeycloak �[38;5;5m10:26:36.28 �[0m�[38;5;2mINFO �[0m ==> ** keycloak setup finished! **
�[38;5;6mkeycloak �[38;5;5m10:26:36.33 �[0m�[38;5;2mINFO �[0m ==> ** Starting keycloak **
Appending additional Java properties to JAVA_OPTS: -Djgroups.dns.query=keycloak-headless.test.svc.cluster.local
Updating the configuration and installing your custom providers, if any. Please wait.
2024-07-30 10:26:57,441 WARN [org.key.services] (build-7) KC-SERVICES0047: metrics (org.jboss.aerogear.keycloak.metrics.MetricsEndpointFactory) is implementing the internal SPI realm-restapi-extension. This SPI is internal and may change without notice
2024-07-30 10:27:01,240 WARN [org.key.services] (build-7) KC-SERVICES0047: metrics-listener (org.jboss.aerogear.keycloak.metrics.MetricsEventListenerFactory) is implementing the internal SPI eventsListener. This SPI is internal and may change without notice
2024-07-30 10:27:12,865 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index org.apache.activemq.artemis.core.journal.RecordInfo: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:12,867 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index org.apache.activemq.artemis.core.journal.Journal: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:12,936 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index io.mashona.logwriting.ArrayStore: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:12,951 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index jakarta.jms.XAConnection: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:12,952 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index jakarta.jms.XASession: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:12,952 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index jakarta.jms.XAConnectionFactory: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:13,134 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index org.apache.tools.ant.Task: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:13,261 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index org.springframework.core.io.DefaultResourceLoader: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:13,263 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index org.springframework.core.io.ResourceLoader: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:13,266 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index org.springframework.core.io.Resource: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:13,363 WARN [io.qua.dep.ind.IndexWrapper] (build-45) Failed to index jakarta.jms.Connection: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@3b582111
2024-07-30 10:27:37,350 INFO [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 51007ms
2024-07-30 10:27:47,266 INFO [org.keycloak.quarkus.runtime.hostname.DefaultHostnameProvider] (main) Hostname settings: Base URL: <unset>, Hostname: <request>, Strict HTTPS: false, Path: <request>, Strict BackChannel: false, Admin URL: <unset>, Admin: <request>, Port: -1, Proxied: false
2024-07-30 10:27:56,469 WARN [io.quarkus.agroal.runtime.DataSources] (JPA Startup Thread) Datasource <default> enables XA but transaction recovery is not enabled. Please enable transaction recovery by setting quarkus.transaction-manager.enable-recovery=true, otherwise data may be lost if the application is terminated abruptly
2024-07-30 10:28:00,879 INFO [org.infinispan.CONTAINER] (keycloak-cache-init) ISPN000556: Starting user marshaller 'org.infinispan.jboss.marshalling.core.JBossUserMarshaller'
2024-07-30 10:28:03,248 INFO [org.infinispan.CLUSTER] (keycloak-cache-init) ISPN000078: Starting JGroups channel `ISPN` with stack `kubernetes`
2024-07-30 10:28:03,257 INFO [org.jgroups.JChannel] (keycloak-cache-init) local_addr: 1d7b36de-96f9-404c-9d3e-359e74a64602, name: keycloak-0-64657
2024-07-30 10:28:03,440 INFO [org.jgroups.protocols.FD_SOCK2] (keycloak-cache-init) server listening on *.57800
2024-07-30 10:28:04,044 INFO [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener
2024-07-30 10:28:05,463 INFO [org.jgroups.protocols.pbcast.GMS] (keycloak-cache-init) keycloak-0-64657: no members discovered after 2002 ms: creating cluster as coordinator
2024-07-30 10:28:05,543 INFO [org.infinispan.CLUSTER] (keycloak-cache-init) ISPN000094: Received new cluster view for channel ISPN: [keycloak-0-64657|0] (1) [keycloak-0-64657]
2024-07-30 10:28:06,268 INFO [org.infinispan.CLUSTER] (keycloak-cache-init) ISPN000079: Channel `ISPN` local address is `keycloak-0-64657`, physical addresses are `[10.92.2.7:7800]`
2024-07-30 10:28:06,433 WARN [org.infinispan.CONFIG] (keycloak-cache-init) ISPN000569: Unable to persist Infinispan internal caches as no global state enabled
2024-07-30 10:28:13,260 INFO [org.keycloak.quarkus.runtime.storage.legacy.liquibase.QuarkusJpaUpdaterProvider] (main) Initializing database schema. Using changelog META-INF/jpa-changelog-master.xml
UPDATE SUMMARY
Run: 124
Previously run: 0
Filtered out: 0
-------------------------------
Total change sets: 124
2024-07-30 10:28:26,637 INFO [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: keycloak-0-64657, Site name: null
2024-07-30 10:28:27,756 INFO [org.keycloak.services] (main) KC-SERVICES0050: Initializing master realm
2024-07-30 10:28:42,453 INFO [org.keycloak.services] (main) KC-SERVICES0009: Added user 'user' to realm 'master'
2024-07-30 10:28:42,948 INFO [io.quarkus] (main) Keycloak 24.0.5 on JVM (powered by Quarkus 3.8.4) started in 65.193s. Listening on: http://0.0.0.0:8080
2024-07-30 10:28:42,949 INFO [io.quarkus] (main) Profile dev activated.
2024-07-30 10:28:42,949 INFO [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-postgresql, keycloak, logging-gelf, narayana-jta, reactive-routes, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]
2024-07-30 10:28:42,959 WARN [org.keycloak.quarkus.runtime.KeycloakMain] (main) Running the server in development mode. DO NOT use this configuration in production.
Thanks
from charts.
Related Issues (20)
- [bitnami/redis] Automatic labelling to slave pod using redis sentinel @Kubernetes HOT 1
- [bitnami/keycloak] realms/master/metrics not found HOT 2
- [bitnami/grafana-mimir] Tempo Ingesters register to mimir ring and make the whole stack crash HOT 7
- helm install error HOT 4
- Mysql Error in SELECT 1, using Azure Mysql
- Keycloak returns 404 when configuring adminIngress HOT 3
- Redis: Data loss on helm chart update HOT 5
- [bitnami/etcd] enable tls, livenessProbe is Unhealthy: remote error: tls: certificate required HOT 4
- [bitnami/redis-sentinel] Redis Sentinel container liveness probe failures resulting in sentinel container restart HOT 4
- Elasticsearch TLS error HOT 3
- [bitnami/redis-cluster] Redis cluster mode throws error or timeout when executing the Write operations via redis-cli command HOT 14
- Keycloak - unable to connect externalDatabase HOT 4
- [bitnami/minio 14.5.0] Console cannot be accessed HOT 2
- [bitnami/airflow] Bitnami Airflow chart 19.0.3 (Airflow version 2.10) not creating pods with unique names HOT 3
- [mongodb-sharded] Disabling persistence is impossible HOT 1
- VOLSYNC HELM CHART HOT 1
- [bitnami/logstash] networkPolicies ingress not opened on UDP protocol HOT 1
- [bitnami/mariadb] MariaDB implement list of databases/usernames like in MongoDB chart HOT 1
- [mongodb-sharded] Increasing the usability of the overrideNamespace value HOT 1
- [bitnami/postgresql] data directory "/bitnami/postgresql/data" has wrong ownership HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from charts.