kubeshop / botkube Goto Github PK
View Code? Open in Web Editor NEWAn app that helps you monitor your Kubernetes cluster, debug critical deployments & gives recommendations for standard practices
Home Page: https://botkube.io
License: MIT License
An app that helps you monitor your Kubernetes cluster, debug critical deployments & gives recommendations for standard practices
Home Page: https://botkube.io
License: MIT License
Describe the bug
Version mentioned in https://github.com/infracloudio/botkube/blob/master/helm/botkube/Chart.yaml does not match with BotKube version.
Helm Operates a "stable" and "incubator" repository of charts that are included without any additional configuration to the helm command. It appears that all that would be required to have the helm chart in this repo included in the default repository would be to open a pull request to helm/charts (assuming there were no objections to the chart). If the chart was in the stable or incubator repositories it would eliminate the git checkout step from the installation process.
I'd be happy to make a copy of the current state of the chart in this repo and make a PR from my fork of helm/charts but I thought I'd ask permission / guidance first.
Describe the bug
Currently we just respond with cluster name in response to ping command. We should also report Kubernetes version and BotKube version
Hi - I am currently testing and playing around with this. Everytime I run "@botkube get pods" on slack, it does not give any response. I looked at the logs and I get below error:
INFO[2019-06-13T18:46:11Z] Invalid request. Dumping the response
INFO[2019-06-13T18:51:43Z] Invalid request. Dumping the response
INFO[2019-06-13T18:51:52Z] Invalid request. Dumping the response
INFO[2019-06-13T18:53:53Z] Invalid request. Dumping the response
INFO[2019-06-13T18:55:20Z] Invalid request. Dumping the response
INFO[2019-06-13T18:55:31Z] Invalid request. Dumping the response
I ran both helm and deploy all yaml file kubernetes manifests and both gave the same error. Am I missing anything? I setup the slack channel, the token, cluster name, and "allowkubectl: true" so I assume everything is setup?
If I enable events, I can see it populating in slack but slack can't seem to communicate correctly to the kubernetes cluster. Am I missing something?
Is your feature request related to a problem? Please describe.
Hi, I am trying BotKube but I am not sure if this is already possible. I would like to receive notifications when jobs are completed, including the status, so that I know whether the job failed or succeeded. This is particularly useful for scheduled backups.
Describe the solution you'd like
From what I can see, at the moment I receive a notification when a job is created, but I don't receive a notification when the job is completed that includes the status, so I would have to manually check if the job failed with kubectl. Also if I enable kubectl support for BotKube, commands like describing a pod or job don't seem to work. I get back Command not supported. Please run /botkubehelp to see supported commands.
Describe alternatives you've considered
The only alternative I know about is Kubewatch, but that also doesn't report the status of a completed job.
Thanks in advance!
Is your feature request related to a problem? Please describe.
Use Github releases for distributing BotKube artifacts and notifying community for new releases.
Describe the solution you'd like
Use Github releases for distributing new artifacts.
Currently, we are considering using either of tools,
https://github.com/itchio/gothub
https://goreleaser.com/
BotKube should be able to send events to Elastic search
As of now, we have only Slack as a medium to send events. Since we already have sender interface implemented, it should be very straight forward to add new channels.
Describe the solution you'd like
After multicluster support, we are getting multiple responses for single "@botkube help" request. To handle this, we are planning to use Slash Commands in slack for BotKube help (/botkubehelp
).
The following changes are needed in backend controller as well as docs side:
@BotKube help
to /botkubehelp
@BotKube help
command from controllerShould add a rule Makefile for this? As of now,
make build
builds docker image for Botkube. Instead of that we can havemake build
- to build binary andmake image
- to build docker image.
We can have something like make container-image
as target to build container image
Describe the bug
I am unable to use botkube with mattermost, am facing the following error
To Reproduce
i have tried deploying from the helm chart and via the yaml file. all needed config for mattermost is configured correctly
INFO[2019-05-09T08:37:29Z] Allowed Events - map[{Resource:clusterrole Namespace:all}:true {Resource:configmap Namespace:all}:true {Resource:daemonset Namespace:all}:true {Resource:deployment Namespace:all}:true {Resource:ingress Namespace:all}:true {Resource:job Namespace:all}:true {Resource:namespace Namespace:all}:true {Resource:node Namespace:all}:true {Resource:persistentvolume Namespace:all}:true {Resource:persistentvolumeclaim Namespace:all}:true {Resource:pod Namespace:all}:true {Resource:role Namespace:all}:true {Resource:rolebinding Namespace:all}:true {Resource:secret Namespace:all}:true {Resource:service Namespace:all}:true]
INFO[2019-05-09T08:37:29Z] Starting controller
INFO[2019-05-09T08:37:29Z] Starting mattermost bot
panic: runtime error: invalid memory address or nil pointer dereference
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0x115de22]
goroutine 52 [running]:
github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model.(*WebSocketClient).Listen.func1.1(0x0)
/go/src/github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model/websocket_client.go:101 +0x22
panic(0x1314c20, 0x2322130)
/usr/local/go/src/runtime/panic.go:522 +0x1b5
github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model.(*WebSocketClient).Listen.func1(0x0)
/go/src/github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model/websocket_client.go:109 +0x64
created by github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model.(*WebSocketClient).Listen
/go/src/github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model/websocket_client.go:99 +0x3f
We should notify on communication channel for following scenarios
Any kubernetes actions which result in starting or stopping of bot should be considered.
Describe the bug
The test cases for the code are missing which makes it harder to verify any change(s) made to the code making testing a slow and manual process.
To Reproduce
N/A
Expected behavior
There should be unit cases with at most coverage possible.
Screenshots
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
It would be nice if we can get support for discordapp.com
There is no software like this out there that has support for discord.
There are plenty of API Wrappers for discord out there
(Link to a wrapper for golang:) https://github.com/bwmarrin/discordgo
Describe the solution you'd like
Discord has a rich API and Role based secrurity (Eg limiting who can send/read/see channels etc.)
Additional context
discordapp.com
https://discordapp.com/developers/applications/
It would be a good addition if we can have RocketChat support as well.
https://rocket.chat/docs/bots/
Describe the solution you'd like
The Go SDK is still in very early stage. Once it has some releases we can try to use that to implement support for RocketChat.
https://github.com/RocketChat/Rocket.Chat.Go.SDK
About Rocket.Chat https://rocket.chat
Open Source Team Communication
Rocket.Chat is free, unlimited and open source. Replace email, HipChat & Slack with the ultimate team chat software solution.
Describe the solution you'd like
We got a couple of requests for Microsoft Teams support at Kubernetes Days India. Need to explore possible integration.
https://products.office.com/en-US/microsoft-teams/group-chat-software
This is very useful bot to operate kubernetes cluster.
Thanks for making it.
I suggest an improvement to make this bot better.
This is suggestions:
Running the botkube command on the slack channel, only the information of the corresponding cluster is displayed.
Describe the bug
I have private mattermost server with self-signed certificate. I'm tried to add custom CA to docker container.
INFO[2019-04-16T06:44:07Z] Allowed Events - map[{Resource:clusterrole Namespace:all}:true {Resource:configmap Namespace:all}:true {Resource:daemonset Namespace:all}:true {Resource:deployment Namespace:all}:true {Resource:ingress Namespace:all}:true {Resource:job Namespace:all}:true {Resource:namespace Namespace:all}:true {Resource:node Namespace:all}:true {Resource:persistentvolume Namespace:all}:true {Resource:persistentvolumeclaim Namespace:all}:true {Resource:pod Namespace:all}:true {Resource:role Namespace:all}:true {Resource:rolebinding Namespace:all}:true {Resource:secret Namespace:all}:true {Resource:service Namespace:all}:true]
DEBU[2019-04-16T06:44:07Z] Registering the filter&{}
DEBU[2019-04-16T06:44:07Z] Registering the filter&{}
DEBU[2019-04-16T06:44:07Z] Registering the filter&{}
INFO[2019-04-16T06:44:07Z] Starting controller
INFO[2019-04-16T06:44:07Z] Starting mattermost bot
panic: runtime error: invalid memory address or nil pointer dereference
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0x115de22]
goroutine 53 [running]:
github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model.(*WebSocketClient).Listen.func1.1(0x0)
/go/src/github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model/websocket_client.go:101 +0x22
panic(0x1314c20, 0x2322130)
/usr/local/go/src/runtime/panic.go:522 +0x1b5
github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model.(*WebSocketClient).Listen.func1(0x0)
/go/src/github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model/websocket_client.go:109 +0x64
created by github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model.(*WebSocketClient).Listen
/go/src/github.com/infracloudio/botkube/vendor/github.com/mattermost/mattermost-server/model/websocket_client.go:99 +0x3f
To Reproduce
Steps to reproduce the behavior:
/bin/sh -c "apk add --update --no-cache ca-certificates && update-ca-certificates --fresh && /go/bin/botkube"
Additional context
Run with defaults:
/bin/sh -c "/go/bin/botkube"
INFO[2019-04-16T06:57:01Z] Allowed Events - map[{Resource:clusterrole Namespace:all}:true {Resource:configmap Namespace:all}:true {Resource:daemonset Namespace:all}:true {Resource:deployment Namespace:all}:true {Resource:ingress Namespace:all}:true {Resource:job Namespace:all}:true {Resource:namespace Namespace:all}:true {Resource:node Namespace:all}:true {Resource:persistentvolume Namespace:all}:true {Resource:persistentvolumeclaim Namespace:all}:true {Resource:pod Namespace:all}:true {Resource:role Namespace:all}:true {Resource:rolebinding Namespace:all}:true {Resource:secret Namespace:all}:true {Resource:service Namespace:all}:true]
DEBU[2019-04-16T06:57:01Z] Registering the filter&{}
DEBU[2019-04-16T06:57:01Z] Registering the filter&{}
DEBU[2019-04-16T06:57:01Z] Registering the filter&{}
INFO[2019-04-16T06:57:01Z] Starting controller
INFO[2019-04-16T06:57:01Z] Starting mattermost bot
ERRO[2019-04-16T06:57:06Z] There was a problem pinging the Mattermost server URL: https://private.server
Error: https://private.server/api/v4/config/client?format=old: model.client.connecting.app_error, Get https://private.server/api/v4/config/client?format=old: x509: certificate signed by unknown authority
ERRO[2019-04-16T06:57:06Z] Error in connecting to Mattermost team TEAM
Error: https://private.server/api/v4/teams/name/TEAM: model.client.connecting.app_error, Get https://private.server/api/v4/teams/name/TEAM: x509: certificate signed by unknown authority
Describe the bug
We need to add Skip field in BotKube struct so that if any of filters ask to skip the reporting of the event to slack, we should be able to that.
Filter Engine should not pass event further if it observes Skip fieldset.
Expected behaviour
Filter sets Skip field in BotKube Struct, FilterEngine should stop processing event.
Additional context
We had a use case where a BotKube user reported a lot of pods where getting created through CronJob and he was not interested in Create/Delete events for them. The filter could not allow skipping of events currently.
There should be a way to enable/disable kubectl command execution on botkube.
We can have a flag like disablekubectl: true
in the config file
Is your feature request related to a problem? Please describe.
Telegram support is missing from botkube
Describe the solution you'd like
Telegram support for Botkube
https://telegram.org/
Is your feature request related to a problem? Please describe.
We should make develop as a default branch.
There should be a CI job which builds :latest
image once any PR gets merged into develop
Is your feature request related to a problem? Please describe.
BotKube pod should be automatically restarted if someone edits the botkube-configmap in runtime so that BotKube controller starts using with the updated config. This will reduce effort of redeploying complete BotKube stack just for minor configuration changes
Describe the solution you'd like
We already have informers registered to watch lifecycle events of resources, we can catch changes in botkube-configmap and exit if is is updated. Deployment controller will automatically create a new BotKube pod.
Currently, we have two types of commands,
We have a single parser code which is executing botkube commands. We can breakdown this code into processors so that we can easily add new commands in botkube commands set.
Basically something similar to filter engine for recommendations.
Describe the bug
A clear and concise description of what the bug is.
When BotKube is configured to watch update events of the resource. Each time when BotKube restarts, we are getting older update event for that pod
To Reproduce
Steps to reproduce the behavior:
- name: jobs
namespaces:
- all
events:
- create
- delete
- error
- update
Expected behavior
BotKube should skip older update events on a resource
BotKube should include cluster name in start/stop messages so that we would know BotKube started watching which cluster
Is your feature request related to a problem? Please describe.
Currently we are not tracking changelog across releases.
Describe the solution you'd like
Auto-generate changelog for through GitHub commits and PRs.
Consider using https://github.com/github-changelog-generator/github-changelog-generator
Currently, we can execute BotKube notifier
commands to start/stop notification from outside the channel (like DM) also. We should restrict these command execution to happen only from the configured channel.
Is your feature request related to a problem? Please describe.
BotKube user should be notified to upgrade BotKube backend if newer version released.
Describe the solution you'd like
As of now, we have decided to check and notify on the following events:
I installed botkube manifests using kubectl, all the resources created in default namespace. In clusterrolebinding serviceaccount namespace is botkube
that's why it is unable to get that service account and I am getting this error.
apiVersion: v1
kind: ServiceAccount
metadata:
name: botkube-sa
labels:
app: botkube
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: botkube-clusterrolebinding
labels:
app: botkube
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: botkube-clusterrole
subjects:
- kind: ServiceAccount
name: botkube-sa
namespace: botkube
Log of botkube pod
INFO[2019-06-10T11:17:27Z] Allowed Events - map[{Resource:clusterrole Namespace:all}:true {Resource:configmap Namespace:all}:true {Resource:daemonset Namespace:all}:true {Resource:deployment Namespace:all}:true {Resource:ingress Namespace:all}:true {Resource:job Namespace:all}:true {Resource:namespace Namespace:all}:true {Resource:node Namespace:all}:true {Resource:persistentvolume Namespace:all}:true {Resource:persistentvolumeclaim Namespace:all}:true {Resource:pod Namespace:all}:true {Resource:role Namespace:all}:true {Resource:rolebinding Namespace:all}:true {Resource:secret Namespace:all}:true {Resource:service Namespace:all}:true]
INFO[2019-06-10T11:17:27Z] Starting controller
INFO[2019-06-10T11:17:27Z] Starting slack bot
INFO[2019-06-10T11:17:27Z] Registering resource lifecycle informer
INFO[2019-06-10T11:17:27Z] Adding informer for resource:pods namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:services namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:deployments namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:ingresses namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:nodes namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:namespaces namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:persistentvolumes namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:secrets namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:configmaps namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:daemonsets namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:jobs namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:roles namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:rolebindings namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:clusterroles namespace:all
INFO[2019-06-10T11:17:27Z] Adding informer for resource:nodes namespace:all
INFO[2019-06-10T11:17:27Z] Registering kubernetes events informer for types: [warning]
INFO[2019-06-10T11:17:27Z] Registering watcher on configfile /config/config.yaml
E0610 11:17:27.170659 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.ConfigMap: configmaps is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "configmaps" in API group "" at the cluster scope
E0610 11:17:27.174755 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.Role: roles.rbac.authorization.k8s.io is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "roles" in API group "rbac.authorization.k8s.io" at the cluster scope
E0610 11:17:27.174849 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1beta1.Ingress: ingresses.extensions is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "ingresses" in API group "extensions" at the cluster scope
E0610 11:17:27.174992 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.Node: nodes is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "nodes" in API group "" at the cluster scope
E0610 11:17:27.176454 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.Job: jobs.batch is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "jobs" in API group "batch" at the cluster scope
E0610 11:17:27.176821 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.PersistentVolume: persistentvolumes is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "persistentvolumes" in API group "" at the cluster scope
E0610 11:17:27.177342 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.Secret: secrets is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "secrets" in API group "" at the cluster scope
E0610 11:17:27.177663 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.RoleBinding: rolebindings.rbac.authorization.k8s.io is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "rolebindings" in API group "rbac.authorization.k8s.io" at the cluster scope
E0610 11:17:27.177689 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:130: Failed to list *v1.Event: events is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "events" in API group "" at the cluster scope
E0610 11:17:27.177730 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.Node: nodes is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "nodes" in API group "" at the cluster scope
E0610 11:17:27.177777 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.ClusterRole: clusterroles.rbac.authorization.k8s.io is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "clusterroles" in API group "rbac.authorization.k8s.io" at the cluster scope
E0610 11:17:27.177883 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1.Service: services is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "services" in API group "" at the cluster scope
E0610 11:17:27.177955 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1beta1.DaemonSet: daemonsets.extensions is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "daemonsets" in API group "extensions" at the cluster scope
E0610 11:17:27.178183 9 reflector.go:134] github.com/infracloudio/botkube/pkg/controller/controller.go:89: Failed to list *v1beta1.Deployment: deployments.extensions is forbidden: User "system:serviceaccount:default:botkube-sa" cannot list resource "deployments" in API group "extensions" at the cluster scope
To Reproduce
Steps to reproduce the behavior:
kubectl apply -f https://raw.githubusercontent.com/infracloudio/botkube/master/deploy-all-in-one.yaml
Is your feature request related to a problem? Please describe.
As of now, if someone is interested in getting only error/failure events for particular resources, he/she has to add following configuration in BotKube:
## Resources you want to watch
resources:
- name: NAME_OF_THE_RESOURCE
namespaces:
- all
# K8S error/warning events you want to receive for the configured resources
events:
types:
- warning
This is quite difficult to read and understand. There should be an easier way to configure this.
Describe the solution you'd like
Instead of having events
as a separate field in the BotKube configuration, we should have error
as a additional field at resource level configuration
## Resources you want to watch
resources:
- name: NAME_OF_THE_RESOURCE
namespaces:
- all
events:
- create
- update
- delete
- error
Describe the bug
Currently, there is no way to change logging level. We should be able to set logging level by setting LOG_LEVEL
env var
botkube should read clustername provided in config file and send that name along with the events to slack so events from the multiple clusters can be differentiated
Currently, docker image size is around 572 MB. The major reason behind that is, we are coping source code into the docker base image and building the binary there (https://github.com/infracloudio/botkube/blob/develop/build/Dockerfile). Instead we should be generating binary on local env and copy that binary into the docker image.
So we should have architecture specific build scripts (atleast linux/amd64 for now) which will generate binary and we should modify Dockerfile to just copy generated binary to docker image.
Something like this: https://github.com/fission/fission-workflows/tree/master/build
Change name from kubeops
to botkube
and all references in docs etc.
Describe the bug
As of now, @BotKube notifier showconfig
command responds with BotKube config containing BotKube auth Token. We should hide the token in config body
To Reproduce
@BotKube notifier showconfig
Expected behavior
BotKube auth token should not be accessible via command responses as will as logs of the BotKube backend
Is your feature request related to a problem? Please describe.
Just a nitpick, but the notifications for events such as "deployment created" are pretty large in size.
Describe the solution you'd like
You could probably easily fit all the info on one (Kind/Name/Namespace/Message/Cluster) into a single line, e.g., "${cluster}/${namespace} - ${kind} ${name}: ${message}". If there are additional fields you could probably let the user customize this in the ConfigMap.
Describe alternatives you've considered
Additional context
Describe the bug
Installed Slack App in a channel, ran the kubernetes deploy both via kubectl apply and helm (same issue), the bot is in the channel, it sends notifications, it responds to ping but does not respond to any other command.
A look at the logs from the backend pod shows:
INFO[2019-04-30T18:49:54Z] Invalid request. Dumping the response
To Reproduce
Steps to reproduce the behavior:
@BotKube get pods
Expected behavior
Expected the bot respond with something.
Additional context
Kubernetes 1.14.1 cluster running in bare metal. Private Slack team
Is your feature request related to a problem? Please describe.
If we build BotKube image for some bug fix or want to use image with a tag like latest
then one should be able to set that image tag while installing BotKube with Helm chart.
Describe the solution you'd like
Changing the version from Chart.yaml
is not a clean solution, also it won't allow to set it to tag values which are not according to sem ver 2. We should have .Values.image.tag
https://helm.sh/docs/developing_charts/#charts-and-versioning
Is your feature request related to a problem? Please describe.
There should be a way to enable/disable running of particular filters.
Describe the solution you'd like
I configuration file, we should be able specify the list of filters we want to run
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.