Giter VIP home page Giter VIP logo

pretty-swag's Introduction

pretty-swag

pretty-swag is a UI for Swagger Specification V2. It is inspired by Swagger Editor.

An example of the generated html from petstore spec can be found here

Bugs filing and suggestions are always welcome.

Changelog

See CHANGELOG

Requirement

Node js

Installation

npm install pretty-swag -g

Usage

pretty-swag -i input.json
pretty-swag -c config.json
pretty-swag -i input.json -o output.html
pretty-swag -i input.json -o output.html -f lite
pretty-swag -i input.json -o output.html -f offline -m true
pretty-swag -i input.json -o output.html -f offline -m true -th default

API Usage

Syntax prettySwag.run(input,output,config,callback);

API Example

const prettySwag = require('pretty-swag');

config = {};
config.format = "singleFile";
config.markdown = true;
config.fixedNav = true;
config.autoTags = true;
config.theme = {
    "default": "blue",
    "GET": "blue",
    "POST": "indigo",
    "DELETE": "red",
    "PUT": "amber"
};

input = "input.json";
output = "doc.html";

prettySwag.run(input,output,config,function(err){
    if(err){
        console.log(err);
    }
    else{
        console.log("success");
    }
});

When dst equals null, no file will be written and the html will be returned as second parameter.

...
prettySwag.run(input,null,config,function(err,data){
    if(err){
        console.log(err);
    }
    else{
        console.log(data); // Plain html
    }
});

Command switch

Switch Name Optional Description
-i input No Location of a Swagger spec file(can be JSON or YAML)
-o output Yes Location of generated document(s). Default to doc.html
-f format Yes Format of the output (singlefile, offline, lite, noicon). Default to singlefile
-m markdown Yes Render Summary & Description as markdown. true or false. Default to false
-th theme Yes One of the supported colors or pre-defined theme default
-c config Yes Location of a configuration file
-fixedNav fixedNav Yes Include this flag to fixed the navigation bar on screen
-autoTags autoTags Yes Include this flag to turn on/off automatically generate tags by path and method name
-noDate noDate Yes Include this flag to remove generated date
-noCredit noCredit Yes Include this flag to remove credit
-noNav noNav Yes Include this flag to remove navigation bar. Default to false
-noReq noRequest Yes Include this flag to remove request panel. Default to false
-noBaseURL noBaseURL Yes Include this flag to suppress baseURL. Default to false
-indent indent Yes Include this flag to specify space per indentation. Default to 3
-v version Yes To show pertty-swag current version
-collapsePath collapse.path Yes Collapse path by default. true or false. Default to false
-collapseMethod collapse.method Yes Collapse method by default. true or false. Default to false
-collapseTool collapse.tool Yes Collapse tool by default. true or false. Default to true
-home.url home.url Yes A home URL. Leave it blank to suppress the display
-home.location home.location Yes A location on navigation bar. Either L (Left) RL (Right before Expand) RR(Right most)
-home.text home.text Yes A text on navigation bar. Default to Home

Configuration File

Valid keys are:

  • input
  • output
  • format
  • markdown
  • theme
  • fixedNav
  • hideNav
  • autoTags
  • noDate
  • noCredit
  • noRequest
  • indent
  • collapse
  • customCSS
  • home

Example of Configuration file

{
  "input": "/tmp/petstore.json",
  "output": "/tmp/petstore.html",
  "format": "singlefile",
  "markdown": true,
  "theme": {
    "default": "blue",
    "GET": "blue",
    "POST": "indigo",
    "DELETE": "red",
    "PUT": "amber"
  },
  "fixedNav": true,
  "autoTags": true,
  "indent": 2,
  "collapse":{
    "path":true
    ,"method":true
    ,"tool":true
  }
  "home":{
      "URL": "https://github.com/twskj/pretty-swag/"
      ,"location": "RR"
      ,"text": "Home"
  }
}

Available Colors

  • red
  • pink
  • purple
  • deep-purple
  • indigo
  • blue
  • light-blue
  • cyan
  • teal
  • green
  • light-green
  • lime
  • yellow
  • amber
  • orange
  • deep-orange
  • brown
  • grey
  • blue-grey
  • black
  • white

Output format

  • SingleFile - A single html embedded all fonts and icon in one file. (Default).
  • Offline - A html file and a resource folder for css and js.
  • Lite - A single html but need the internet connection to obtain required resources.
  • NoIcon - Does not use Roboto font, and no icons (Useful when dealing with older IEs)

Features

  • Search / Filter by Tag

  • Collapsible Panel

  • Fold / Unfold Schema

  • Live Request / Response Feedback

  • Syntax Highlight code block

  • Download and Preview response data

Filtering

  • Use prefix - to exclude unwanted tags. For example -store will exclude api(s) that contain store tag.

Console

  • Press Ctrl + ` to bring up a console
  • Press tab to auto complete

Available Console Commands

Command Description
add header -g <key> <value> Adding the header to all paths/methods
remove header -g <key> <value> Remove a given header from all paths/methods

License

The contents of this repository are covered under the MIT License

Support on Beerpay

Like the project? buy me some ๐Ÿป!

Beerpay Beerpay

pretty-swag's People

Contributors

dependabot[bot] avatar gramstrong avatar ljipear avatar sabdullahpear avatar twskj 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

pretty-swag's Issues

Pre-generate html

It appears that the html output doesn't actually contain all of the information when it's generated, but rather it has insert points that a script injects into when the page is first loaded โ€“ is that correct?

Would it be possible to inject the information into the html output when it's first generated as opposed to when it's first viewed? It seems that this approach would be a bit cleaner. (It also would make it easier to embed these documents, which, admittedly, is my primary use case.)

File is not rendering properly

Hi there,

First of all thanks for this lib, it's amazing and waaaay better than everything in swagger-codegen.

However, the file type in multipart creates a text field...

Did I miss something?

See here:

image

Here is my endpoint:

paths:
  /pdf:
    post:
      summary: Converts a new document to PDF
      description: Max upload = 10 MB
      consumes:
        - multipart/form-data
      produces:
        - application/pdf
      parameters:
        - in: formData
          name: file
          type: file
          description: The file to upload.
      responses:
        '200':
          description: Conversion went successfully
          schema:
            type: file
        '400':
          description: Invalid input

Feature request: support object composition

Swagger/OpenAPI spec support composing/extending objects via allOf properties as recommended by JSON Schema. However simple proof-of-concept uses of this feature as tested against swagger-ui or swagger-editor instead produces no content in the html generated/presented by pretty-swag.

Not compatible with NPM 5

If you use NPM 5 you get:

npm ERR! code ENOLOCAL
npm ERR! Could not install from "../livedoc" as it does not contain a package.json file.

BUG: -m true === -m false

-m false should be the same as not writing it.

In the documentation:
Render Summary & Description as markdown. true or false. Default to false

File will not generate. Just hangs.

Input:
pretty-swag -i swagger.json

Output:
Source: swagger.json
Dest: doc.html
Format: singleFile
MarkDown: Disable
Nav Bar: Normal
Auto tags: Enable
Initial Collapse [Path: false, Method: false, Tool :true]
Theme: blue

It has been stuck at this for 5 minutes. No error message at all. It works with the petstore swagger file but not mine.
Any ideas on what the problem could be?

Not generating 'Try this operation'

I want to have the 'Try this operation' feature on the generated docs but it's not present in the resulting html file. What could be happening? Do I need to post my swagger.yaml file here in order for you to know?

HTML output does show nothing for map object types

When defining a property of a type as a map, the generated html code shows nothing (empty braces) for that property. However, in swagger editor it does show correctly as expected. I am using the version from the last commit in the master branch of the repository (commit 9ceda7).

At the end I include an example swagger definition that reproduces the error.

This is how it shows in the output of pretty-swag (empty-schema):

And this how it shows in the render of swagger-editor:

The example json is also rendered ok:

Example definition that reproduces the error:

{
  "swagger": "2.0",
  "info": {
    "title": "Example of map usage in Swagger\n",
    "description": "None\n",
    "version": ""
  },
  "host": "locahost",
  "schemes": [
    "https"
  ],
  "basePath": "/api",
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/books": {
      "get": {
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "description": "name of owner of the books",
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/book"
              }
            }
          }
        }
      }
    }
  },
  "definitions": {
    "book": {
      "type": "object",
      "properties": {
        "book_id": {
          "type": "integer"
        },
        "book_title": {
          "type": "string"
        }
      }
    }
  }
}

Hard to see markdown tags.

When using markdown and set bold the user see no difference.
Also the code block have only small changes so it is hard to see for the user if it is a code example.

Some tiny improvement proposals

  • The tags listed in the "Available Tags" section should be clickable. I guess, this could be the fastest way how to find an API.
  • The description, i.e., the part between the title and "Available Tags" (excluded), should be collapsible. In my case, it's a pretty long text which pushes the most read part ("Paths") down.

I guess, I could contribute it (the only obstacle is the beginning of livedoc.js, which kills my editor, probably due to a stupid highlighting regex).

MacOSX/Linux isn't support \r

Hi.

Linux and Mac OS don't use \r in file.

00000000 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 6e |#!/usr/bin/env n|
00000010 6f 64 65 0d 0a |ode..|
00000015

Crashes on improperly formatted YAML

When attempting to parse improperly formatted YAML, pretty-swag crashes instead of returning an error in the callback. This can be tested by attempting to generate output for this example:

paths:
  "/{test}/":
      parameters:
        - $ref: "#/parameters/test"
    post:
      summary: This is a test file

(Side note: I know I've created several issues already today... let me know if you'd like a hand with any of them!)

IE11 not able to display generated doc

Hi !

It seems IE11 is not able to display the generated document.

I have a Active X script warning asking me to actived blocked content, but even if I activate blocked script, the page is always white...

Active X warning is always a pain too :/

Prettify json schema

how can we achieve this?
like,
syntax highlighting or json viewer instead of plain text

Feature request: generate examples in output

Looks like example outputs are not generated, e.g.:

---
swagger: '2.0'
info:
  version: 1.0.0
  title: OpenSearch for EO search index access
  description: Allows to manipulate the OpenSearch for EO index
host: localhost:8080
basePath: /geoserver/rest/oseo/

paths:
  /collections:
    get:
      description: Retrieves a list of all available collections (nakes and links)
      parameters:
        - name: offset
          in: query
          description: First element for paged responses
          required: false
          type: integer
        - name: limit
          in: query
          description: Number of elements in page
          required: false
          type: integer
      produces:
        - application/json
        - application/xml
      responses:
        200:
          description: Success
          examples:
            application/json: |
              {
                "collections" : [
                      {
                        "name" : "SENTINEL1",
                        "href" : "http://host:port/geoserver/rest/oseo/collections/SENTINEL1.json"
                      },
                      {
                        "name" : "SENTINEL2",
                        "href" : "http://host:port/geoserver/rest/oseo/collections/SENTINEL2.json"
                      }
                  ]
              }

Does not contain the examples section for the 200 response.

Allowing input to be provided directly as Json

Hi There,

I wanted to embed pretty-swag in my frontend (react) which directly renders swagger spec on the browser.

To do that I need to be able to provide json object directly to your library.

At the moment there are references to "fs" that would break when the project is loaded in a browser.

Is there any plan to release a version that doesn't use "fs" and consumes json directly ?

Thanks

Bug: don't understand $ref in path.

{
    "swagger": "2.0",
     ...
    "paths": {
      	"/test": {
      	   "$ref": "./endpoints/test.json"
      	}
    }
}

this should give me a endpoint named /test and all information in test.json. but it give:
image

Walk around for more people having this problem is to use the cli tool json-refs before.

Resize-able column

Table columns doesn't look good and support only a long schema.
It would help to have a resize-able column to adjust to suit wider audience

Feature request: global header settings

While testing the API endpoints, would be great if we can define some global headers. This would be specially useful when you are setting some auth headers.

(sorry for all the tickets)

Feature request: Node API

Thanks for the awesome project! Would it be possible to create a Node API as well, so that we could integrate into other applications without needing to rely on the command line interface?

Consider `filterByTag` requiring all listed tags instead of any

filterByTag computes the union of all apis rather than an intersection. In my case, this is pretty useless, as each of my "apis" have quite a few tags and any union shows a lot entries.

An intersection would be much better as my "apis" are classified according to three criteria into disjoint groups and using two tags in conjunction would allow finding the wanted "api" rather immediately.

The implementation is not the problem, the questions are:

  • would the intersection behavior be useful for others?
  • should it be configurable or should there be a new syntax (e.g., +tag making the tag mandatory)?
  • in case of the new syntax, should clicking on a tag add it to input#search as it or with + prefixed?

-noReq doesn't do anything... I think.

v 0.1.102

I'm under the assumption that the -noReq true flag will remove the Request section under the endpoint that requires CORS to be enabled. I'm hoping to just skip over that section since we just want our endpoint documented nicely and simply created.

Here's the command I'm using:

pretty-swag -collapseMethod true -i swagger.yaml -o index.html -th blue-grey -noReq true

Thanks!

Response types

#As discussed in #37, it could be meaningful to offer a preview for the responses which are not human readable.

I see few use cases:

  • PDF could be displayed in Iframes
  • Images ๐Ÿ–ผ
  • XML (compressed, we could prettify)
  • JSON (compressed, we could prettify)
  • Office docs (.odt, .doc, .csv, .xls...) ๐Ÿ“– -> We could download them in the browser.
  • HTML Pages (I think it is relatively common ๐Ÿ˜‰).

I have no experience with Vue.js but I think it is doable :) (even if I think that we need to modulate the template in smaller independent components ๐Ÿ“ฆ๐Ÿ“ฆ).

Let's split that in smaller issues in the relevant repo: https://github.com/twskj/livedoc ๐Ÿ’ช

(Yeah I like smiley ๐Ÿ˜† )

Replace rem styles

Is it possible to replace the rem styles used in the generated output? I'm trying to embed the documents in a shadow dom, but all of the size and positioning is off in because of the reliance on rem styles

Feature Request: Config option to remove header

There are some situations where it's convenient to embed the documentation into another webpage rather than display the documentation on its own. In these situations, it would be helpful if there was a config option that allows the removal of the search header.

Feature Request: Optional Link to Home in navbar

It'd be great if we could get an optional link to "home" button in the upper left hand corner of the navbar that we can set with a command line option. ie: -home https://foo.bar.baz would enable your standard home icon in the upper left that linked to the input of the option.

$ in model description causes exception, html will not load

Run the command

pretty-swag -i openapi.yaml -o /tmp/openapi.html

on the below openapi.yaml ; when viewing in the browser (Chrome on Mac OS X), the JavaScript gets an exception

Uncaught SyntaxError: Invalid or unexpected token

and the document is not rendered.

It looks like something is truncated:

                     "schema": "{\n   \"value\": \"string\"     /* Strings which follow the regular expression pattern: `-?\\d{1,15}\\.\\d{1,9}<!DOCTYPE html>

Here is the openapi.yaml:

swagger: '2.0'
info:
  title: pretty-swag-bug
  description: parse error in schema/javascript
  version: '1'
  termsOfService: Pending.
consumes:
  - application/json
produces:
  - application/json
paths:
  /:
    get:
      responses:
        '200' : 
          description: OK
          schema:
            $ref: '#/definitions/model'
definitions:
  model:
    properties:
      value: 
        description: "Strings which follow the regular expression pattern:
          `-?\\d{1,15}\\.\\d{1,9}$`
          such as 325.50 or -200.75."
        type: string

Feature Request: Collapse by default

It could be useful to render the html in a state that's collapsed by default. Maybe there could be two levels of collapse, one where everything is collapsed, and another where specific methods are collapsed, but paths aren't?

Supporting to embeding pretty-swag within html

Hi @twskj

The produced html includes css, html header, html body tag, js, etc.

Would be nice if one could turn off these outputs essentially producing plain static html.

Then one can simple include the output into a div locally and style it as required.

I appreciate your advice,

Ali

PUT schemas violate the right hand border

If I have a complex schema in a GET, it renders inside some sort of container with a horizontal scrollbar. Good!

But the same schema as the input body of a PUT doesn't render with the horizontal scrollbar. The text is unbounded to the right, going beyond the (in this case blue) border for the whole transaction, and even beyond my browser window size.

This is both in Chrome and Edge.

Other than that, great tool!

ReferenceError: summary is not defined

After the html file has been generated and opened in a browser, nothing happens. In the console there's just a single error message which is : ReferenceError: summary is not defined

Insallation mode :

$ sudo npm install -g pretty-swag

Usage :

$ pretty-swag -i swagger.yaml -f lite
Source: swagger.yaml
Dest: doc.html
Format:  lite
MarkDown:  Disable
Nav Bar:  Normal
Theme: blue
DONE
$ firefox doc.html

Error :

ReferenceError: summary is not defined[Learn More]  vue.min.js%20line%207%20%3E%20Function:1:2356
	anonymous https://unpkg.com/[email protected]/dist/vue.min.js%20line%207%20%3E%20Function:1:2356
	de/n.prototype._render https://unpkg.com/[email protected]/dist/vue.min.js:6:10441
	$e/e.prototype._mount/n._watcher< https://unpkg.com/[email protected]/dist/vue.min.js:6:13606
	no.prototype.get https://unpkg.com/[email protected]/dist/vue.min.js:7:27663
	no https://unpkg.com/[email protected]/dist/vue.min.js:7:27609
	$e/e.prototype._mount https://unpkg.com/[email protected]/dist/vue.min.js:6:13576
	Ue.prototype.$mount https://unpkg.com/[email protected]/dist/vue.min.js:8:5637
	Ue.prototype.$mount https://unpkg.com/[email protected]/dist/vue.min.js:8:8522
	Re/e.prototype._init https://unpkg.com/[email protected]/dist/vue.min.js:6:17781
	Ue https://unpkg.com/[email protected]/dist/vue.min.js:6:18445

Line that generates the error :

var vm = new Vue(context);

Nearly at the end of doc.html

Feature request: Prefill parameters with default

Sorry that i bommbard you with new request, It is really nice that you fix them that fast. :)
If i have input:

"parameters": [
            {
                "name": "lang",
                "in": "query",
                "required": true,
                "type": "string",
                "default": "EN"
            }
        ]

I wan't in the gui that the prefilled value is EN.

Include 'Models'

It would be advantageous if the Models section could also be included, via a switch, for example.

Within a respective YAML file, this is the definitions section.

pretty-swag fails on call with exception

I wanted to try pretty-swap with our example over at https://github.com/arangodb/arangodb/blob/devel/js/apps/system/_admin/aardvark/APP/api-docs.json?raw=true

I tried it like this:

pretty-swag -i js/apps/system/_admin/aardvark/APP/api-docs.json

Source: js/apps/system/_admin/aardvark/APP/api-docs.json
Dest: doc.html
Format:  singleFile
MarkDown:  Disable
Nav Bar:  Normal
Theme: blue
/usr/lib/node_modules/pretty-swag/node_modules/esprima/dist/esprima.js:3391
                    throw error;
                    ^
Error: Line 12: Invalid regular expression: missing /
    at ErrorHandler.constructError (/usr/lib/node_modules/pretty-swag/node_modules/esprima/dist/esprima.js:3396:22)
    at ErrorHandler.createError (/usr/lib/node_modules/pretty-swag/node_modules/esprima/dist/esprima.js:3414:27)
    at ErrorHandler.throwError (/usr/lib/node_modules/pretty-swag/node_modules/esprima/dist/esprima.js:3422:21)
    at Scanner.throwUnexpectedToken (/usr/lib/node_modules/pretty-swag/node_modules/esprima/dist/esprima.js:3505:28)
    at Scanner.scanRegExpBody (/usr/lib/node_modules/pretty-swag/node_modules/esprima/dist/esprima.js:4510:19)
    at Scanner.scanRegExp (/usr/lib/node_modules/pretty-swag/node_modules/esprima/dist/esprima.js:4566:26)
    at Tokenizer.getNextToken (/usr/lib/node_modules/pretty-swag/node_modules/esprima/dist/esprima.js:6363:72)
    at Object.tokenize (/usr/lib/node_modules/pretty-swag/node_modules/esprima/dist/esprima.js:136:36)
    at computeSchema (/usr/lib/node_modules/pretty-swag/pretty-swag.js:133:26)
    at /usr/lib/node_modules/pretty-swag/pretty-swag.js:426:44

The installation looked like this:

#npm install pretty-swag -g
/usr/bin/pretty-swag -> /usr/lib/node_modules/pretty-swag/bin/run.js
/usr/lib
`-- [email protected] 
  +-- [email protected] 
  +-- [email protected] 
  | +-- [email protected] 
  | +-- [email protected] 
  | | `-- [email protected] 
  | +-- [email protected] 
  | +-- [email protected] 
  | | +-- [email protected] 
  | | | `-- [email protected] 
  | | `-- [email protected] 
  | +-- [email protected] 
  | `-- [email protected] 
  |   +-- [email protected] 
  |   | `-- [email protected] 
  |   +-- [email protected] 
  |   +-- [email protected] 
  |   `-- [email protected] 
  +-- [email protected] 
  +-- [email protected] 
  `-- [email protected] 

# node --version
v5.12.0

Issue with offline format

I keep getting below error when I use the format as "offline". Thanks for your help in advance.

Error:

ReferenceError: Path is not defined
    at mkdirpSync (C:\java_workspace\works\node_modules\livedoc\livedoc.js:1013:31)
    at makeOffline (C:\java_workspace\works\node_modules\livedoc\livedoc.js:1080:5)
    at Object.generateHTML (C:\java_workspace\works\node_modules\livedoc\livedoc.js:1287:9)
    at C:\HBC\java_workspace\works\node_modules\pretty-swag\pretty-swag.js:640:21
    at C:\HBC\java_workspace\works\node_modules\call-me-maybe\index.js:11:28
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9)

Thanks,

How to document parts of my single API parameter?

This may be a feature-request or just a blindness on my side.

All my POST request have a single JSON argument in the POST body. For example, for updates, it's the desired new state of the entity like

{
    "id": 76682889,
    "email": "...@...",
    "firstname": "Mad",
    "surname": "Max",
    "zipcode": "12345"
}

This argument is obviously required, but it consists of required and optional parts, which itself should be documented. I can't see how to express it in the input JSON.

"User_UPDATE": {
  "type": "object",
  "required": ["id", "email"],    // This seems to work with swagger-codegen, but not with pretty-swag
  "properties": {
    "id": {
      "type": "integer",
      "format": "int32"
                                  // This fields has documentation, how can I express it?
    }
    ...
}

option to remove "generated" date from output

Could you add an flag to prevent the date from displaying in the footer? For version control reasons, I would like to be able to run the generator repeatedly(like on each commit) and not have the output file update unless the corresponding yaml has changed. <footer class="container grey-text text-lighten-4 thin">Generated Monday, Mar 6, 2017, 12:15 PM by <a href="https://github.com/twskj/pretty-swag">pretty-swag</a></footer>

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.