GithubHelp home page GithubHelp logo

meshery / meshery-istio Goto Github PK

View Code? Open in Web Editor NEW
127.0 18.0 104.0 5.24 MB

Meshery adapter for Istio

Home Page: https://docs.meshery.io

License: Apache License 2.0

Dockerfile 0.98% Makefile 5.46% Go 93.56%
service-mesh istio meshery management-plane service-mesh-interface service-mesh-performance hacktoberfest meshery-adapter meshery-istio golang

meshery-istio's Introduction

readme/community.svg Shows an illustrated light mode meshery logo in light color mode and a dark mode meshery logo dark color mode.

Meshery Adapter for Istio

Docker Pulls Go Report Card Build Status GitHub GitHub issues by-label Website Twitter Follow Discuss Users Slack CII Best Practices

Meshery - the Cloud Native Management Plane As a self-service engineering platform, Meshery enables collaborative design and operation of cloud native infrastructure. Through it's extension points, Meshery offers the ability to optionally plugin adapters in order to more deeply integrate with specific systems like Istio.

If you’re using Meshery or if you like the project, please star this repository to show your support! 🤩

Our projects are community-built and welcome collaboration. 👍 Be sure to see the Contributor Journey Map for a tour of resources available to you and jump into our Slack! Contributors are expected to adhere to the CNCF Code of Conduct.

Layer5 Slack

Layer5 Community

✔️ Join any or all of the weekly meetings on the community calendar.
✔️ Watch community meeting recordings.
✔️ To access the Community Drive, fill Community Member Form.
✔️ Discuss in the Community Forum.

Not sure where to start? Grab an open issue with the help-wanted label.

License

This repository and site are available as open source under the terms of the Apache 2.0 License.

meshery-istio's People

Contributors

acald-creator avatar aeswibon avatar aisuko avatar allcontributors[bot] avatar alphax86 avatar ayushthe1 avatar delusionaloptimist avatar dependabot-preview[bot] avatar dependabot[bot] avatar dhruv0000 avatar duckling69 avatar girishranganathan avatar gopivaibhav avatar gr455 avatar gunjanmimo avatar kamalbuilds avatar kanurag94 avatar kumarabd avatar kushthedude avatar leecalcote avatar lolverae avatar muzairs15 avatar nveenjain avatar pranav-bhatt avatar revolyssup avatar sayantan1413 avatar shreyas220 avatar subhamkrai avatar tangledbytes avatar thebeginner86 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

meshery-istio's Issues

Dependabot can't resolve your Go dependency files

Dependabot can't resolve your Go dependency files.

As a result, Dependabot couldn't update your dependencies.

The error Dependabot encountered was:

gomodules.xyz/jsonpatch/[email protected]: unrecognized import path "gomodules.xyz/jsonpatch/v2" (parse https://gomodules.xyz/jsonpatch/v2?go-get=1: no go-import meta tags ())

If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.

View the update logs.

Failed to provision Grafana

Description
Failed to provision grafana addon from meshery dashboard

Expected Behavior
On toggling on the "grafana" addon, a grafana instance should be provisioned without any errors

Enviroment:

  • OS: Darwin
  • Browser: Safari

To Reproduce
Steps to reproduce the behavior:

  1. Go to meshery dashboard
  2. Click on Istio
  3. Toggle Grafana Addon
  4. See error in notifications - No such file as templates/patches/service-loadbalancer.json

Additional Context
Meshery is running via Docker Compose

Remove istioctl support

Description
docker run doesn't work for istioctl, istioctl is itself dependent on kubectl and assumes kubernetes to be set in . If you run it locally, it works as intended.
Expected Behavior
Docker dun should work

Enviroment:

  • OS: any
  • Browser: NA
  • Version: latesr
  • Device: any

[Optional] To Reproduce
Steps to reproduce the behavior:

  1. Run make docker
  2. Run make docker-run
  3. Install istio using meshery UI
  4. See error

[Optional] Additional Context
Reverting to manifests file would work for now. For future, we can explore go client for kubernetes

[README] Update README Community Section

Description
The Community section in the README says "Access the Community Drive". There is a new procedure of having this automated based on the individual filling in a community member form

Expected Behavior
Update "Access Community Drive" to "To Access Community Drive, fill Community Member Form"

Screenshots
img

Resources
Refer to the Contributing guide

Enviroment:

  • OS: [e.g. Ubuntu]
  • Browser: [e.g. Chrome, Safari]
  • Version: [e.g. 22]
  • Device: [e.g. laptop, iPhone 8]

Fix SMI adapter user-defined namespace install

Description
The SMI adapter installation uses the namespace chosen in Meshery UI. So the servicaccount and deployment are created in whatever namespace is chosen. But - it leaves the clusterrolebinding unchanged - like this:

     - kind: ServiceAccount
           name: smi-adapter-istio
           namespace: istio-system

this causes the SMI adapter pod to fail because it has no permissions.

Expected Behavior

The 'clusterrolebinding' should grant the permissions to serviceaccount in the chosen namespace.


[Optional] To Reproduce
Steps to reproduce the behavior:

  1. Get Meshery connected to a K8s cluster
  2. Install Istio
  3. Without changing namespace - install SMI adapter
  4. See that SMI adapter deployment is created in 'default' namespace and the pod enters CrashLoopBackoff

Create generic configurations

Currently, YAML configurations assume that the canonical Bookinfo app is installed and is used for testing performance. It would be beneficial to have generic configurations to allow for testing performance with non-standard workloads.

Add support to perform make test

Current Behavior
There is no command such as make test

Desired Behavior
make test should exist and all tests as performed in workflow should be executed.

Make proto & protoc command are ambiguous

Description
Make Proto command is not working. Also make protoc-setup command fetches the protobuf file at wrond directory location.
Expected Behavior

Protobug command should work

Screenshots

protoc -I meshes/ meshes/meshops.proto --go_out=plugins=grpc:./meshes/
2020/05/29 01:57:46 WARNING: Missing 'go_package' option in "meshops.proto", please specify:
	option go_package = ".;meshes";
A future release of protoc-gen-go will require this be specified.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.

--go_out: protoc-gen-go: plugins are not supported; use 'protoc --go-grpc_out=...' to generate gRPC
make: *** [proto] Error 1

image-hub sample app web page not reachable

Description
The image-hub sample app web page isn't reachable due to paths not being configured.

Expected Behavior
Once image-hub is setup, the webpage should be accessible through the ingress IP.

Enviroment:

  • OS: e.g. Ubuntu 20.0.4
  • Browser: Chrome, Firefox

[Optional] To Reproduce
Steps to reproduce the behavior:

  1. Deploy the image-hub app
  2. Try accessing http://<istio-ingress_ip>/
  3. See 404 not found

Provision: Expose and connect to Grafana

Current Behavior
When Istio is deployed with Meshery, users must manually expose the control plane's Grafana service.

Desired Behavior
When Istio is deployed with Meshery, the Grafana service in Istio's control plane should be exposed as a NodePort by default, but configurable to be exposed as a ClusterIP, LoadBalancer or NodePort. As Istio is deployed and Grafana service exposed, Meshery should automatically register the Grafana service's endpoint.

Acceptance Criteria
This enhancement is complete when:

  • The Grafana service in Istio's control plane is configurable to be exposed as a NodePort, ClusterIP, or LoadBalancer.
  • NodePort is the default configuration setting.
  • Meshery automatically registers the Grafana service's endpoint.

Existing behavior should also be true:

  • Users are able to invoke an ad-hoc connectivity test with Grafana.
  • Connectivity test retrieves Grafana version for display in a tooltip when the user hovers the mouse over the chip.
  • Connectivity tests display either a success message: "Grafana successfully pinged!" or a failure message: "Could not connect to Grafana."

Istio 1.6 release URLs and files have changed

Description
https://api.github.com/repos/istio/istio/releases/latest
Here URL suffix are now according to architecture of laptop one wants to install... there is no URL with suffix -linux.tar.gz instead there are URL with linux-armv7.tar.gz where armv7 is architecture. Hence latest istio isn't installed...

Expected Behavior
Istio 1.6 should install (or should we also default to 1.5 in the code as we do in the docker file?)

Screenshots
Add screenshots, if applicable, to help explain your problem.


[Optional] To Reproduce
Install Latest istio with mTLS from meshery dashboard (only on local run)

Allow installing Istio into a user-defined namespace

Enhancement Description
Istio helm chart allows installing Istio into a user-defined namespace. Meshery should support this.
Right now the default 'istio-system' is used non-regarding whatever namespace is specified in Meshery UI.
Instead - installation should account for user's choice.

Related Challenges
I need to be able to specify an existing or new namespace name in Meshery UI when requesting Istio install.
A working installation of Istio should be created in the namespace I've specified.

Additional context
This is a part of a wider change that would allow to install Istio while choosing the following installation options as checkboxes:

  • with mTLS
  • with SMI adapter
  • with Istio CNI
  • ...

README: Add hyperlinks to badges

Description
Some of the badges in this repos readme are missing informative hyperlinks.

Desired Behavior
The badges (and their links) that are used in the Meshery repo's README are a great example of how the badges in this repo can be improved.

[Apply Service Mesh Configuration] Failure to remove Grafana

Description
Cluster status:

k get pods -A
NAMESPACE      NAME                                     READY   STATUS    RESTARTS   AGE
default        details-v1-558b8b4b76-6m75c              2/2     Running   0          25h
default        grafana-75b5cddb4d-x2k2q                 2/2     Running   0          6h44m
default        productpage-v1-6987489c74-cg44t          2/2     Running   0          25h
default        ratings-v1-7dc98c7588-gxtdg              2/2     Running   0          25h
default        reviews-v1-7f99cc4496-gn68w              2/2     Running   0          25h
default        reviews-v2-7d79d5bd5d-v98cg              2/2     Running   0          25h
default        reviews-v3-7dbcdcbc56-tl5sv              2/2     Running   0          25h
istio-system   grafana-75b5cddb4d-lxdcr                 2/2     Running   0          6h42m
istio-system   istio-egressgateway-66f8f6d69c-46k9f     1/1     Running   0          25h
istio-system   istio-ingressgateway-758d8b79bd-54d5c    1/1     Running   0          25h
istio-system   istiod-7556f7fddf-4ccbt                  1/1     Running   0          25h
kube-system    coredns-864fccfb95-hrkg6                 1/1     Running   1          6d10h
kube-system    coredns-864fccfb95-sfktv                 1/1     Running   1          6d10h
kube-system    etcd-docker-desktop                      1/1     Running   1          6d10h
kube-system    kube-apiserver-docker-desktop            1/1     Running   1          6d10h
kube-system    kube-controller-manager-docker-desktop   1/1     Running   1          6d10h
kube-system    kube-proxy-mb9xt                         1/1     Running   1          6d10h
kube-system    kube-scheduler-docker-desktop            1/1     Running   1          6d10h
kube-system    storage-provisioner                      1/1     Running   1          6d10h
kube-system    vpnkit-controller                        1/1     Running   1          6d10h

Trying to delete Grafana in default and istio-system namespace produces this error:

meshery_1           | time="2020-10-21T01:36:34Z" level=info msg="retrieved user: {lcalcote   http://pbs.twimg.com/profile_images/880205475643441152/V_vhfnzb_normal.jpg}"
meshery-istio_1     | time="2020-10-21T01:36:34Z" level=error msg="unable to delete the requested resource, attempting operation without namespace: serviceaccounts \"grafana\" not found"
meshery-istio_1     | time="2020-10-21T01:36:34Z" level=error msg="unable to delete the requested resource: the server could not find the requested resource"
meshery-istio_1     | time="2020-10-21T01:36:34Z" level=error msg="error while applying rule payload yaml: unable to delete the requested resource: the server could not find the requested resource"

Both of these instances were previously installed by the meshery-istio adapter.

Enviroment:

  • Version: Meshery v0.4.14

Support Service Mesh Patterns

Current Behavior
Adapter invokes predefined operations.

Desired Behavior
In support of service mesh patterns, and now that the open application model types are in meshkit, istio adapter should be modified to use these.

Istio: Installation with mTLS is not working

Description

Istio: Installation with mTLS is not working

Expected Behavior

Isitio should get installed

Error Logs

DEBU[0065] API info url: https://api.github.com/repos/istio/istio/releases/latest
DEBU[0066] retrieved api info: &istio.apiInfo{TagName:"1.6.0", PreRelease:false, Assets:[]*istio.asset{(*istio.asset)(0xc000381f20), (*istio.asset)(0xc000381f50), (*istio.asset)(0xc000381fb0), (*istio.asset)(0xc00041c000), (*istio.asset)(0xc00041c060), (*istio.asset)(0xc00041c090), (*istio.asset)(0xc00041c0f0), (*istio.asset)(0xc00041c120), (*istio.asset)(0xc00041c150), (*istio.asset)(0xc00041c180), (*istio.asset)(0xc00041c1b0), (*istio.asset)(0xc00041c210), (*istio.asset)(0xc00041c330), (*istio.asset)(0xc00041c360), (*istio.asset)(0xc00041c390), (*istio.asset)(0xc00041c3c0), (*istio.asset)(0xc00041c5a0), (*istio.asset)(0xc00041c5d0), (*istio.asset)(0xc00041c720), (*istio.asset)(0xc00041c750)}}
ERRO[0066] unable to extract the download URL
DEBU[0066] sending event: &meshes.EventsResponse{EventType:2, Summary:"Error while deploying Istio", Details:"unable to extract the download URL", OperationId:"fe07c213-2587-4d1e-b533-e7656154318d", XXX_NoUnkeyedLiteral:struct {}{}, XXX_unrecognized:[]uint8(nil), XXX_sizecache:0}

Enviroment:

  • OS: MacOS
  • K8s client: Docker Desktop
  • Version: [e.g. 22]
  • Device: [e.g. laptop, iPhone 8]

To Reproduce
Steps to reproduce the behavior:

  1. Setup up kubernetes with docker-desktop.
  2. Fire up the meshery-istio adapter & meshery server.
  3. Go to http://127.0.0.1:9081/management?adapter=mesherylocal.layer5.io:10000 & try to download istio with mTLS.
  4. See error

[UI] validate "service mesh configuration" in infinite loop

Description

In Meshery UI on selecting "istio" from the management section, if user tries to validate "service mesh configuration" without installing any service mesh(istio),meshery-istio checking validating same resources in infinite loop.

not find the requested resource (get virtualservices.networking.istio.io)
meshery-istio_1     | E0516 04:57:18.021369       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha1.MeshPolicy: the server could not find the requested resource (get meshpolicies.authentication.istio.io)
meshery-istio_1     | E0516 04:57:18.022358       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha1.Policy: the server could not find the requested resource (get policies.authentication.istio.io)
meshery-istio_1     | E0516 04:57:18.023288       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha3.VirtualService: the server could not find the requested resource (get virtualservices.networking.istio.io)
meshery-istio_1     | E0516 04:57:19.023206       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha1.MeshPolicy: the server could not find the requested resource (get meshpolicies.authentication.istio.io)
meshery-istio_1     | E0516 04:57:19.023967       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha1.Policy: the server could not find the requested resource (get policies.authentication.istio.io)
meshery-istio_1     | E0516 04:57:19.024954       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha3.VirtualService: the server could not find the requested resource (get virtualservices.networking.istio.io)
meshery-istio_1     | E0516 04:57:20.024891       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha1.MeshPolicy: the server could not find the requested resource (get meshpolicies.authentication.istio.io)
meshery-istio_1     | E0516 04:57:20.025881       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha1.Policy: the server could not find the requested resource (get policies.authentication.istio.io)
meshery-istio_1     | E0516 04:57:20.026514       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha3.VirtualService: the server could not find the requested resource (get virtualservices.networking.istio.io)
meshery-istio_1     | E0516 04:57:21.026493       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha1.MeshPolicy: the server could not find the requested resource (get meshpolicies.authentication.istio.io)
meshery-istio_1     | E0516 04:57:21.027448       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha1.Policy: the server could not find the requested resource (get policies.authentication.istio.io)
meshery-istio_1     | E0516 04:57:21.028379       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1alpha3.VirtualService: the server could not find the requested resource (get virtualservices.networking.istio.io)

Expected Behavior

I think we should show no valid configuration found popup message.

Screenshots

Environment:

  • OS: [e.g. Ubuntu]
  • Browser: [e.g. Chrome, Safari]
  • Version: [e.g. 22]
  • Device: [e.g. laptop, iPhone 8]

[Optional] To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

[Optional] Additional Context

Fail to provision Istio Service Mesh when meshery is deployed in the cluster

Description
Fail to provision Istio Service Mesh when meshery is deployed in the cluster. The provision fails with the error:

Error with istio operation: Error running istioctl command: Error: failed to install manifests: errors occurred during operation: failed to check if namespace istio-system exists: namespaces "istio-system" is forbidden: User "system:serviceaccount:meshery:meshery" cannot get resource "namespaces" in API group "" in the namespace "istio-system"

Expected Behavior
Latest version of Istio service mesh should be provisioned without any errors

Screenshots
Screenshot_20210505_194139

Enviroment:

  • OS: Manjaro (Linux)

To Reproduce
Steps to reproduce the behavior:

  1. Run mesheryclt system start (meshery in k8s)
  2. Go to meshery UI
  3. Click on Istio
  4. Provision Istio
  5. See the error

Create contributing.md in meshery-istio repo

Issue Description
Create contributing.md that points to the central contributing.md in the Meshery repo.

Create a stub CONTRIBUTING.md in each of the repos that essentially say:
“You want to contribute to the project? Yay! We want you to! Visit our centralized instructions for contributing.", where the “contributing” is a hyperlink to the CONTRIBUTING.md in the main meshery repo.

Future Effort
In time, as more contributors join the project, we may need a meshery-community repo that has all this and much more info or to have a community / contributing section in the meshery docs.

[Image Hub] generate rate limit filter's EnvoyFilter yaml with added json config

The Image Hub spec and some rough meeting notes at bottom of it describe the need for this.

Current Behavior
Image Hub's rate limit filter can be configured by adding a JSON object to its EnvoyFilter configuration. Right now it has to be done manually.

Desired Behavior
Based on the current rate_limit_filter template, generate a new template with an added JSON object when the "Envoy Filter for Image Hub" operation is called. The JSON object will contain the configuration for Image Hub's endpoints and it will be used to configure the rate limit filter.

This will be used for providing further dynamicity of wasm filters.

Operation: "Check configuration" failing in v0.4.10

Description
When Istio is not deployed, running "check configuration" fails with the error below.

The user receives no feedback in Meshery UI.

Logs

meshery-istio_1     | E1205 00:02:54.003782       1 reflector.go:178] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:125: Failed to list *v1beta1.VirtualService: the server could not find the requested resource (get virtualservices.networking.istio.io)

Enviroment:

  • Version: v0.4.10

[SMI] Support SMI Conformance - refactor for new meshes.proto

Current Behavior
Meshes.proto (defined in meshery repo) has been updated to account for SMI Conformance use cases.

Desired Behavior
The Meshery adapter for Istio needs to be updated to be compatible with these changes and support the new "SMI Conformance Tests" VALIDATION operation.

[Build] Local builds failing with undefined: unix.SYS_IOCTL

Description
Using make run to build from master produces the following error:

➜  meshery-istio git:(master) make run
DEBUG=true GOPROXY=direct GOSUMDB=off go run main.go
# github.com/docker/docker/pkg/term
../go/pkg/mod/github.com/docker/[email protected]/pkg/term/tc.go:13:28: undefined: unix.SYS_IOCTL
../go/pkg/mod/github.com/docker/[email protected]/pkg/term/tc.go:18:28: undefined: unix.SYS_IOCTL
../go/pkg/mod/github.com/docker/[email protected]/pkg/term/termios_bsd.go:24:31: undefined: unix.SYS_IOCTL
../go/pkg/mod/github.com/docker/[email protected]/pkg/term/termios_bsd.go:37:31: undefined: unix.SYS_IOCTL

Enable mesh installation

The Meshery UI should provide a way for users to install a particular mesh in their cluster. Some options for Istio are Helm, YAML (non/mTLS), etc.

Lifecycle: Istio v1.4 Compatibility

Description
Istio v1.4.x has moved around the installation package files, causing Istio installations to fail. See screenshot.

Expected Behavior
Meshery should be able to provision and deprovision Istio v1.4.

Screenshots
Screen Shot 2020-01-12 at 6 55 24 AM

Switch Istio installation be to helm based

Current Behavior
Istio is being installed using the demo yaml which is available as part of the Istio release package.
Istio has supported helm based installation for a while now which gives the power to configure the installation to the taste of the end user.

Desired Behavior

  • istio installation should use helm.
  • eventually we should accept a values.yml file from the user to tweak it to his/her taste.

Related info

  • adapter already has a decent way to apply yamls on the cluster
  • we just need to use helm template to generate the manifests and give it to the adapter code to do the installation
  • NSM adapter already is doing a helm template based installation of NSM

Update README with new Meshery logo

Description
A Meshery logo is available. The old version of the logo used in the README should be displaced.

Expected Behavior
New Meshery logo should displace old logo with:

<a href="https://layer5.io/meshery"><img align="left" src="https://raw.githubusercontent.com/layer5io/meshery/master/ui/static/img/meshery-logo/meshery-logo-light-text.png"  width="25%" /></a>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.