Git Product home page Git Product logo

dots's Introduction

dots

digital ocean api wrapper

actions quality coverage security npm

installing

    npm install --save dots-wrapper@latest

using

typescript

  import { createApiClient } from 'dots-wrapper';
  const myApiToken = 'my-long-token';
  const dots = createApiClient({token: myApiToken});

  const main = async () => {
    const {data:{account}} = await dots.account.getAccount();
    console.log(account);
  };

  main();

javascript/nodejs

  const {createApiClient} = require('dots-wrapper');
  const myApiToken = 'my-long-token';
  const dots = createApiClient({token: myApiToken});

  const main = async () => {
    const {data:{account}} = await dots.account.getAccount();
    console.log(account);
  };

  main();

browser

index.html

  <script src='https://unpkg.com/dots-wrapper@latest/dist/index-browser.min.js'></script>

js.js

  const {createApiClient} = window.dots;
  const myApiToken = 'my-long-token';
  const dots = createApiClient({token: myApiToken});

  const main = async () => {
    const {data:{account}} = await dots.account.getAccount();
    console.log(account);
  };

  main();

docs

  1. account
    1. get-account
  2. action
    1. get-action
    2. list-actions
  3. app
    1. cancel-app-deployment
    2. create-app-deployment
    3. create-app
    4. delete-app
    5. get-active-deployment-logs
    6. get-aggregated-app-deployment-logs
    7. get-app-deployment-logs
    8. get-app-deployment
    9. get-app
    10. list-app-deployments
    11. list-apps
    12. run-app-detection
    13. update-app
  4. cdn-endpoint
    1. create-cdn-endpoint
    2. delete-cdn-endpoint
    3. get-cdn-endpoint
    4. list-cdn-endpoints
    5. purge-cache
    6. update-cdn-endpoint
  5. certificate
    1. create-certificate
    2. delete-certificate
    3. get-certificate
    4. list-certificates
  6. container-registry
    1. configure-registry
    2. delete-registry
    3. get-docker-credentials
    4. get-registry
  7. customer
    1. download-invoice
    2. get-balance
    3. get-invoice-summary
    4. list-billing-history
    5. list-invoice-items
    6. list-invoices
  8. database
    1. configure-database-cluster-eviction-policy
    2. configure-database-cluster-maintenance-window
    3. configure-database-cluster-sql-modes
    4. create-connection-pool
    5. create-database-cluster-db
    6. create-database-cluster-user
    7. create-database-cluster
    8. create-read-only-replica
    9. delete-connection-pool
    10. delete-database-cluster-db
    11. destroy-database-cluster
    12. destroy-read-only-replica
    13. get-connection-pool
    14. get-database-cluster-db
    15. get-database-cluster-eviction-policy
    16. get-database-cluster-sql-mode
    17. get-database-cluster-user
    18. get-database-cluster
    19. get-read-only-replica
    20. list-connection-pools
    21. list-database-cluster-backups
    22. list-database-cluster-dbs
    23. list-database-cluster-firewall-rules
    24. list-database-cluster-users
    25. list-database-clusters
    26. list-database-options
    27. list-read-only-replicas
    28. migrate-database-cluster
    29. remove-database-cluster-user
    30. resize-database-cluster
    31. restore-database-cluster-backup
    32. update-database-cluster-firewall-rules
  9. domain
    1. create-domain
    2. create-domain-record
    3. delete-domain
    4. delete-domain-record
    5. get-domain
    6. get-domain-record
    7. list-domain-records
    8. list-domains
    9. update-domain-record
  10. droplet
    1. change-droplet-kernel
    2. create-droplet
    3. create-droplets
    4. delete-droplet
    5. delete-droplets-by-tag
    6. destroy-droplet-and-all-associated-resources
    7. destroy-droplet-and-associated-resources
    8. disable-droplet-backups
    9. do-action-by-droplet-tag
    10. enable-droplet-backups
    11. enable-droplet-ipv6
    12. enable-droplet-private-networking
    13. get-droplet-action
    14. get-droplet-destroy-status
    15. get-droplet
    16. list-droplet-actions
    17. list-droplet-associated-resources
    18. list-droplet-backups
    19. list-droplet-kernels
    20. list-droplet-neighborhoods
    21. list-droplet-neighbors
    22. list-droplet-snapshots
    23. list-droplets
    24. power-cycle-droplet
    25. power-off-droplet
    26. power-on-droplet
    27. reboot-droplet
    28. rebuild-droplet
    29. rename-droplet
    30. reset-droplet-password
    31. resize-droplet
    32. restore-droplet
    33. retry-droplet-destroy
    34. shutdown-droplet
    35. snapshot-droplet
  11. firewall
    1. add-droplets-to-firewall
    2. add-rules-to-firewall
    3. add-tags-to-firewall
    4. create-firewall
    5. delete-firewall
    6. get-firewall
    7. list-firewalls
    8. remove-droplets-from-firewall
    9. remove-rules-from-firewall
    10. remove-tags-from-firewall
    11. update-firewall
  12. floating-ip
    1. assign-ip-to-droplet
    2. create-floating-ip
    3. delete-floating-ip
    4. get-floating-ip
    5. get-floating-ip-action
    6. list-floating-ip-actions
    7. list-floating-ips
    8. unassign-ip-from-droplet
  13. image
    1. convert-image-to-snapshot
    2. create-custom-image
    3. delete-image
    4. get-image
    5. get-image-action
    6. list-image-actions
    7. list-images
    8. transfer-image
    9. update-image
  14. kubernetes
    1. add-container-registry
    2. create-kubernetes-cluster
    3. create-node-pool
    4. delete-kubernetes-cluster
    5. delete-node-pool
    6. delete-node
    7. get-clusterlint-diagnostics
    8. get-kubernetes-cluster-credentials
    9. get-kubernetes-cluster-kubeconfig
    10. get-kubernetes-cluster
    11. get-node-pool
    12. list-available-options-of-kubernetes
    13. list-kubernetes-cluster-available-upgrades
    14. list-kubernetes-clusters
    15. list-node-pools
    16. remove-container-registry
    17. run-clusterlint-on-kubernetes-cluster
    18. update-kubernetes-cluster
    19. update-node-pool
    20. upgrade-kubernetes-cluster
  15. load-balancer
    1. add-droplets-to-load-balancer
    2. add-rules-to-load-balancer
    3. create-load-balancer
    4. delete-load-balancer
    5. get-load-balancer
    6. list-load-balancers
    7. remove-droplets-from-load-balancer
    8. remove-rules-from-load-balancer
    9. update-load-balancer
  16. monitoring
    1. get-droplet-available-memory-metrics
    2. get-droplet-bandwidth-metrics
    3. get-droplet-cpu-metrics
    4. get-droplet-free-memory-metrics
    5. get-droplet-total-memory-metrics
  17. project
    1. assign-resources-to-default-project
    2. assign-resources-to-project
    3. create-project
    4. delete-project
    5. get-default-project
    6. get-project
    7. list-default-project-resources
    8. list-project-resources
    9. list-projects
    10. patch-default-project
    11. patch-project
    12. update-default-project
    13. update-project
  18. region
    1. list-regions
  19. size
    1. list-sizes
  20. snapshot
    1. delete-snapshot
    2. get-snapshot
    3. list-snapshots
  21. ssh-key
    1. create-ssh-key
    2. destroy-ssh-key
    3. get-ssh-key
    4. list-ssh-keys
    5. update-ssh-key
  22. tag
    1. create-tag
    2. delete-tag
    3. get-tag
    4. list-tags
    5. tag-resources
    6. untag-resources
  23. volume
    1. attach-volume-to-droplet
    2. create-volume
    3. create-volume-snapshot
    4. delete-volume-by-name
    5. delete-volume
    6. detach-volume-from-droplet
    7. get-volume
    8. get-volume-action
    9. list-volume-actions
    10. list-volumes
    11. list-volume-snapshots
    12. resize-volume
  24. vpc
    1. create-vpc
    2. get-vpc
    3. list-vpcs
    4. update-vpc
    5. list-vpc-resources
    6. delete-vpc

contributors

license: mit

dots's People

Contributors

aarchangel64 avatar aitthi avatar carlosbaraza avatar codyogden avatar dependabot[bot] avatar freakyturtle avatar kkhanhluu avatar pjpimentel avatar rijkvanzanten 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

Watchers

 avatar  avatar  avatar  avatar  avatar

dots's Issues

Add missing invoices API endpoint

Is your feature request related to a problem? Please describe.
I want to provide downloadable invoices in PDF or CSV format which can be downloaded via API instead of providing download links from https://cloud.digitalocean.com.

Describe the solution you'd like
Add missing invoices API endpoint.

Describe alternatives you've considered
Currently I provide a link to downloadable invoices from https://cloud.digitalocean.com, but here you have to be logged-in to access invoices as PDF or CSV.

Is your request a new API endpoint?
https://developers.digitalocean.com/documentation/v2/#invoices

TypeError: Cannot destructure property 'backups' of 'undefined' as it is undefined.

When creating droplet with values from example getting next error (version 3.5.7):
TypeError: Cannot destructure property 'backups' of 'undefined' as it is undefined.
[dev] [2021-07-05 17:19:15] at Object.createDroplet (/workspace/node_modules/dots-wrapper/dist/modules/droplet/create-droplet/create-droplet.js:4:47)
attributes to req:
image

databases

  • create-database-cluster (Create a new Database cluster)
  • get-database-cluster (Retrieve an existing Database cluster)
  • list-database-clusters (List all Database clusters)
  • resize-database-cluster (Resize a Database cluster)
  • migrate-database-cluster-to-new-region (Migrate a Database cluster to a new region)
  • update-database-cluster-firewall-rules (Update firewall rules for a Database cluster)
  • list-database-cluster-firewall-rules (List firewall rules for a Database cluster)
  • configure-database-cluster-maintenance-window (Configure a Database cluster's maintenance window)
  • list-database-cluster-backups (List backups for a Database cluster)
  • restore-database-cluster-backup (Restore from a database cluster backup)
  • destroy-database-cluster (Destroy a Database cluster)
  • create-read-only-replica (Create a read-only replica)
  • get-read-only-replica (Retrieve an existing read-only replica)
  • list-read-only-replicas (List all read-only replicas)
  • destroy-read-only-replica (Destroy a read-only replica)
  • add-database-user (Add a database user)
  • get-database-user (Retrieve an existing database user)
  • list-database-users (List all database users)
  • remove-database-user (Remove a database user)
  • create-database (Add a new database)
  • get-database (Retrieve an existing database)
  • list-databases (List all databases)
  • delete-database (Delete a database)
  • create-connection-pool (Add a new connection pool (PostgreSQL))
  • list-connection-pools (List all connection pools (PostgreSQL))
  • get-connection-pool (Retrieve an existing connection pool (PostgreSQL))
  • delete-connection-pool (Delete a connection pool (PostgreSQL))
  • get-eviction-policy (Retrieve the eviction policy (Redis))
  • configure-eviction-policy (Configure the eviction policy (Redis))
  • get-sql-modes (Retrieve SQL modes (MySQL))
  • configure-sql-modes (Configure SQL modes (MySQL))

TypeError: undefined is not a function on 'Droplet.list'

digitalOcean.Droplet.list(1).subscribe(
      droplets => console.log(droplets),
      err => console.log(err)
    );
TypeError: undefined is not a function
    at Array.every (<anonymous>)
    at Object.isCollection (type.guards.js:453)
    at TapSubscriber._tapNext (endpoint.js:54)
    at TapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/tap.js.TapSubscriber._next (tap.js:45)
    at TapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next (map.js:41)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next (map.js:41)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at subscribeToPromise.js:7```

ILoadBalancer missing fields

Describe the bug
The ILoadBalancer should have a tag field (string).

To Reproduce
Steps to reproduce the behavior:

  1. Run loadBalancer.listLoadBalancers
  2. Check the list of load balancers, they have a tag field. See here as well: https://developers.digitalocean.com/documentation/v2/#load-balancers
  3. However, the ILoadBalancer interface has no tag field.

Expected behavior
I do not want TS errors for the tag field in ILoadBalancer.

Screenshots

Desktop (please complete the following information):

Smartphone (please complete the following information):

Additional context
Add any other context about the problem here.

kubernetes

  • create-kubernetes-cluster (Create a new Kubernetes cluster)
  • get-kubernetes-cluster (Retrieve an existing Kubernetes cluster)
  • list-kubernetes-clusters (List all Kubernetes clusters)
  • update-kubernetes-cluster (Update a Kubernetes cluster)
  • list-available-upgrades (Retrieve available upgrades for an existing Kubernetes cluster)
  • upgrade-kubernetes-cluster (Upgrade a Kubernetes cluster)
  • delete-kubernetes-cluster (Delete a Kubernetes cluster)
  • get-kubeconfig (Retrieve the kubeconfig for a Kubernetes cluster)
  • list-credentials (Retrieve credentials for a Kubernetes cluster)
  • get-node-pool (Retrieve a node pool for a Kubernetes cluster)
  • list-node-pools (List all node pools in a Kubernetes clusters)
  • create-node-pool (Add a node pool to a Kubernetes cluster)
  • update-node-pool (Update a node pool in a Kubernetes cluster)
  • delete-node-pool (Delete a node pool in a Kubernetes cluster)
  • delete-node (Delete a node in a Kubernetes cluster)
  • run-clusterlint (Run clusterlint checks on a Kubernetes cluster)
  • fetch-clusterlint-diagnostics (Fetch clusterlint diagnostics for a Kubernetes cluster)
  • list-available-settings (List available regions, node sizes, and versions of Kubernetes)

[v3] tag

  • create-tag
  • get-tag
  • list-tags
  • tag-resource
  • untag-resource
  • delete-tag

[v3] droplet

  • create-droplet
  • create-multiple-droplet
  • get-droplet-by-id
  • list-droplets
  • list-droplets-by-tag
  • list-droplet-available-kernels
  • list-droplet-snapshots
  • list-droplet-backups
  • list-droplet-actions
  • list-droplet-neighbors
  • list-neighborhoods
  • delete-droplet
  • delete-droplet-by-tag
  • enable-droplet-backup
  • disable-droplet-backup
  • reboot-droplet
  • power-cycle-droplet
  • shutdown-droplet
  • power-off-droplet
  • power-on-droplet
  • restore-droplet
  • reset-droplet-password
  • resize-droplet
  • rebuild-droplet
  • rename-droplet
  • change-droplet-kernel
  • enable-droplet-ipv6
  • enable-droplet-private-networking
  • snapshot-droplet
  • do-action-by-droplet-tag
  • get-droplet-action

Add `force_rebuild` option to app.createAppDeployment

Hi, Pedro. This is a great project. Really impressed with how easy it is to integrate into some webhooks I'm building. This feature request is small, but important for getting static site content updated through a rebuild via the DO API.

Is your feature request related to a problem? Please describe.
For some static site build processes, the API request must have a body of {force_rebuild: true}, otherwise the static site will not be rebuilt with new content.

Describe the solution you'd like
The DigitalOcean API Documentation allows a force_rebuild to be passed in the body of the Create App Deployment endpoint. The solution would be to allow this as an option in the dots.app.createAppDeployment method, and pass it as a body in the POST request.

Describe alternatives you've considered
Forcing a rebuild from the source doesn't seem available unless I use the API directly.

Is your request a new API endpoint?
No. This modifies an already existing method.

Additional context
In the Apps Platform UI, this option is available by clicking the Actions > Force Rebuild and Deploy > (Check the box) > Click Deploy
Screen Shot 2021-10-04 at 12 13 27 PM
Screen Shot 2021-10-04 at 12 13 33 PM

projects

  • create-project (Create a Project)
  • list-projects (List All Projects)
  • update-project (Update a Project)
  • patch-project (Patch a Project)
  • get-project (Retrieve an Existing Project)
  • get-default-project (Retrieve the Default Project)
  • update-default-project (Update the Default Project)
  • patch-default-project (Patch the Default Project)
  • delete-project (Delete an Existing Project)
  • list-resources (List All Resources)
  • assign-resource-to-project (Assign Resources)
  • list-default-project-resources (List Default Project Resources)
  • assign-resource-to-default-project (Assign Default Project Resources)

[v3] firewall

  • create-firewall
  • get-firewall
  • list-firewalls
  • update-firewall
  • delete-firewall
  • add-droplets-to-firewall
  • remove-droplets-from-firewall
  • tag-firewall
  • untag-firewall
  • add-rules-to-firewall
  • remove-rules-from-firewall

unittest to docs

implement unit test to docs files.

ensure:

  • each module should have yours.
  • each module read should have the ref to all fns in readme
  • the main readme should have a valid link to each module

[v3] image

  • list-images
  • list-distribution-images
  • list-application-images
  • list-users-images
  • list-images-by-tag
  • create-custom-image
  • get-image-by-id
  • get-image-by-slug
  • update-image
  • list-image-actions
  • delete-image
    -- Image Actions
  • transfer-image
  • convert-image-to-snapshot
  • get-image-action

[v3] load balancer

  • create-load-balancer
  • create-load-balancer-with-droplet-tag
  • get-load-balancer
  • list-load-balancers
  • update-load-balancer
  • delete-load-balancer
  • add-droplets-to-load-balancer
  • remove-droplets-from-load-balancer
  • add-rules-to-load-balancer
  • remove-rules-from-load-balancer

[v3] sshkey

  • list-sshkeys
  • create-sshkey
  • get-sshkey
  • update-sshkey
  • destroy-sshkey

container-registry

  • configure-container-registry (Configure Container Registry)
  • get-container-registry-information (Get Container Registry Information)
  • get-container-registry-docker-credentials (Get Docker Credentials for Container Registry)
  • delete-container-registry (Delete Container Registry)

"undefined is not a function" when subscribing to a list of droplets

Hi,

I'm suddenly getting an error with the latest version 2.2.0 on a code that was running in production normally. It is a simplified version.

dots.Droplet
        .list(0, 5)
        .subscribe(
            (response : any) => {},
            (err: Error) => {
                console.log('ERROR', err.message)
            }
        );

ERROR undefined is not a function

Any ideas?

[v3] certificate

  • create-custom-certificate
  • create-lets-encrypt-certificate
  • get-certificate
  • list-certificates
  • delete-certificate

droplet create not accepts ssh fingerprint

I'm creating a droplet and passing

ssh_keys: [
                '51:0b:f8:a7:5c:74:b4:e3:c3:7e:bd:42:10:01:2c:x8'
            ],

actually i'm proving fingerprint of sshkey instead of id
and error i'm getting while compiling is -

 error TS2345: Argument of type '{ name: string; region: string; size: string; image: string; ssh_keys: string[]; backups: boolean; ipv6: boolean; user_data: string; tags: string[]; }' is not assignable to parameter of type 'ICreateDropletApiRequest'.        
  Types of property 'ssh_keys' are incompatible.
    Type 'string[]' is not assignable to type 'number[]'.
      Type 'string' is not assignable to type 'number'.

29         const { data: { droplet } } = await dots.droplet.createDroplet(input);
   

it should allow string type as well

Quick fix - modules/droplet/create-droplet/create-droplet.d.ts line 15
suggested change - ssh_keys?: number | string[];

refactor ids

where id is used, should be: <entitiy>_id.
the type should be update and the ID should be retrocompatible

  • load-balancer
  • snapshot
  • ssh-key
  • volume

[v3] floating ip

  • list-floating-ips
  • create-floating-ip-assigned-to-droplet
  • create-floating-ip-reserved-to-region
  • get-floating-ip
  • delete-floating-ip
  • assign-floating-ip-to-droplet
  • unassign-floating-ip-from-droplet
  • list-floating-ip-actions
  • get-floating-ip-action

[v3] domain

  • list-domains
  • create-domain
  • get-domain
  • delete-domain
  • list-domain-records
  • create-domain-record
  • get-domain-record
  • update-domain-record
  • delete-domain-record

cdn-endpoints

  • create-cdn-endpoint (Create a new CDN endpoint)
  • get-cdn-endpoint (Retrieve an existing CDN endpoint)
  • list-cdn-endpoints (List all CDN endpoints)
  • update-cdn-endpoint (Update an existing CDN endpoint)
  • delete-cdn-endpoint (Delete a CDN endpoint)
  • purge-cache (Purge the cache for an existing CDN endpoint)

Creating droplet gives undefined as a response

   doc.Droplet.create(specs).subscribe(
		obs => {
			console.log("obs", obs);
		},
		err => {
			console.log("err", err);
		}
	);

logs nothing and let droplet = await doc.Droplet.create(specs).toPromise(); returns undefined.

The droplet is successfully created though and the response contains the correct data:

data: 
   { droplet: 
      { id: ...,
        name: ...,
        memory: 1024,
        vcpus: 1,
        disk: 25,
        locked: true,
        status: 'new',
        kernel: null,
        created_at: '2018-02-27T20:12:59Z',
...

[v3] snapshot

  • list-snapshots
  • list-droplets-snapshots
  • list-volumes-snapshots
  • get-snapshot-by-id
  • delete-snapshot

Delete volume by name

The DigitalOcean API supports deleting a droplet by its name. This seems to not be supported by this library however.

For droplets, the following exists:

droplet.deleteDropletsByTag({ tag_name: "my tag" })

A similar method should exist, but for volumes and the volume name.

volume.deleteVolumeByName({ name: "my name", region: "fra1" })

List Droplet By Tag

Is your feature request related to a problem? Please describe.
I need the droplet ID, and the only way to query is by tag.

Describe the solution you'd like
try {
const input = {
per_page=2,
page=1,
tag_name: 'tagname',
};
const {
data: { dropletId },
} = await dots.droplet.listDroplets(input);
console.log(dropletId);
} catch (error) {
console.log(error);
}

Describe alternatives you've considered
Nothing yet. I would hate to have to shell out to use doctl.

Is your request a new API endpoint?
https://docs.digitalocean.com/reference/api/api-reference/#operation/list_all_droplets

Additional context
Nope I think that gets it. My understanding there is no way to get a specific droplet ID without query the tag.

Brad

how to specify the domain name to add the record to?

try {
const input = {
type: "A", // string
name: "www", // string
data: "162.10.66.0", // string
priority: null, // number
port: null, // number
ttl: 1800, // number
weight: null, // number
flags: null, // number
tag: null // string
};
const {data:{domain_record}} = await dots.domain.createDomainRecord(input);
console.log(domain_record);
} catch (error) {
console.log(error);
}

in the api docs it is part of the url
https://api.digitalocean.com/v2/domains/{domain_name}/records

Brad

[v3] volume

  • list-volumes
  • list-volumes-by-name
  • create-volume
  • get-volume
  • get-volume-by-name
  • list-volume-snapshots
  • create-volume-snapshot
  • delete-volume
  • delete-volume-by-name
  • delete-volume-snapshot
  • attach-volume-to-droplet
  • attach-volume-to-droplet-by-name
  • detach-volume-to-droplet
  • detach-volume-to-droplet-by-name
  • resize-volume
  • list-volume-actions
  • get-volume-action

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.