Giter VIP home page Giter VIP logo

juice-shop / juice-shop Goto Github PK

View Code? Open in Web Editor NEW
9.6K 156.0 9.5K 233.27 MB

OWASP Juice Shop: Probably the most modern and sophisticated insecure web application

Home Page: https://owasp-juice.shop

License: MIT License

JavaScript 30.43% CSS 0.10% HTML 7.66% Shell 0.08% Dockerfile 0.07% TypeScript 58.06% Python 0.08% SCSS 2.18% Pug 0.42% Handlebars 0.11% Solidity 0.81%
owasp javascript vulnerable hacking application-security owasp-top-10 owasp-top-ten pentesting vulnapp appsec

juice-shop's Introduction

Juice Shop Logo OWASP Juice Shop

OWASP Flagship GitHub release Twitter Follow Subreddit subscribers

CI/CD Pipeline Test Coverage Maintainability Code Climate technical debt Cypress tests OpenSSF Best Practices GitHub stars Contributor Covenant

The most trustworthy online shop out there. (@dschadow) — The best juice shop on the whole internet! (@shehackspurple) — Actually the most bug-free vulnerable application in existence! (@vanderaj) — First you 😂😂then you 😢 (@kramse) — But this doesn't have anything to do with juice. (@coderPatros' wife)

OWASP Juice Shop is probably the most modern and sophisticated insecure web application! It can be used in security trainings, awareness demos, CTFs and as a guinea pig for security tools! Juice Shop encompasses vulnerabilities from the entire OWASP Top Ten along with many other security flaws found in real-world applications!

Juice Shop Screenshot Slideshow

For a detailed introduction, full list of features and architecture overview please visit the official project page: https://owasp-juice.shop

Table of contents

Setup

You can find some less common installation variations in the Running OWASP Juice Shop documentation.

From Sources

GitHub repo size

  1. Install node.js
  2. Run git clone https://github.com/juice-shop/juice-shop.git --depth 1 (or clone your own fork of the repository)
  3. Go into the cloned folder with cd juice-shop
  4. Run npm install (only has to be done before first start or when you change the source code)
  5. Run npm start
  6. Browse to http://localhost:3000

Packaged Distributions

GitHub release SourceForge SourceForge

  1. Install a 64bit node.js on your Windows, MacOS or Linux machine
  2. Download juice-shop-<version>_<node-version>_<os>_x64.zip (or .tgz) attached to latest release
  3. Unpack and cd into the unpacked folder
  4. Run npm start
  5. Browse to http://localhost:3000

Each packaged distribution includes some binaries for sqlite3 and libxmljs bound to the OS and node.js version which npm install was executed on.

Docker Container

Docker Pulls Docker Stars

  1. Install Docker
  2. Run docker pull bkimminich/juice-shop
  3. Run docker run --rm -p 3000:3000 bkimminich/juice-shop
  4. Browse to http://localhost:3000 (on macOS and Windows browse to http://192.168.99.100:3000 if you are using docker-machine instead of the native docker installation)

Vagrant

  1. Install Vagrant and Virtualbox
  2. Run git clone https://github.com/juice-shop/juice-shop.git (or clone your own fork of the repository)
  3. Run cd vagrant && vagrant up
  4. Browse to 192.168.56.110

Amazon EC2 Instance

  1. In the EC2 sidenav select Instances and click Launch Instance
  2. In Step 1: Choose an Amazon Machine Image (AMI) choose an Amazon Linux AMI or Amazon Linux 2 AMI
  3. In Step 3: Configure Instance Details unfold Advanced Details and copy the script below into User Data
  4. In Step 6: Configure Security Group add a Rule that opens port 80 for HTTP
  5. Launch your instance
  6. Browse to your instance's public DNS
#!/bin/bash
yum update -y
yum install -y docker
service docker start
docker pull bkimminich/juice-shop
docker run -d -p 80:3000 bkimminich/juice-shop

Azure Container Instance

  1. Open and login (via az login) to your Azure CLI or login to the Azure Portal, open the CloudShell and then choose Bash (not PowerShell).
  2. Create a resource group by running az group create --name <group name> --location <location name, e.g. "centralus">
  3. Create a new container by running az container create --resource-group <group name> --name <container name> --image bkimminich/juice-shop --dns-name-label <dns name label> --ports 3000 --ip-address public
  4. Your container will be available at http://<dns name label>.<location name>.azurecontainer.io:3000

Google Compute Engine Instance

  1. Login to the Google Cloud Console and open Cloud Shell.
  2. Launch a new GCE instance based on the juice-shop container. Take note of the EXTERNAL_IP provided in the output.
gcloud compute instances create-with-container owasp-juice-shop-app --container-image bkimminich/juice-shop
  1. Create a firewall rule that allows inbound traffic to port 3000
gcloud compute firewall-rules create juice-rule --allow tcp:3000
  1. Your container is now running and available at http://<EXTERNAL_IP>:3000/

Heroku

  1. Sign up to Heroku and log in to your account
  2. Click the button below and follow the instructions

Deploy

If you have forked the Juice Shop repository on GitHub, the Deploy to Heroku button will deploy your forked version of the application.

Demo

Feel free to have a look at the latest version of OWASP Juice Shop: http://demo.owasp-juice.shop

This is a deployment-test and sneak-peek instance only! You are not supposed to use this instance for your own hacking endeavours! No guaranteed uptime! Guaranteed stern looks if you break it!

Documentation

Node.js version compatibility

GitHub package.json dynamic GitHub package.json dynamic

OWASP Juice Shop officially supports the following versions of node.js in line with the official node.js LTS schedule as close as possible. Docker images and packaged distributions are offered accordingly.

node.js Supported Tested Packaged Distributions Docker images from master Docker images from develop
22.x
21.x ( ✔️ ) ✔️ Windows (x64), MacOS (x64), Linux (x64)
20.x ✔️ ✔️ Windows (x64), MacOS (x64), Linux (x64) latest (linux/amd64, linux/arm64) snapshot (linux/amd64, linux/arm64)
20.6.0 🐛 angular/angular-cli#25782
19.x ( ✔️ )
18.x ✔️ ✔️ Windows (x64), MacOS (x64), Linux (x64)
<18.x

Juice Shop is automatically tested only on the latest .x minor version of each node.js version mentioned above! There is no guarantee that older minor node.js releases will always work with Juice Shop! Please make sure you stay up to date with your chosen version.

Troubleshooting

Gitter

If you need help with the application setup please check our our existing Troubleshooting guide. If this does not solve your issue please post your specific problem or question in the Gitter Chat where community members can best try to help you.

🛑 Please avoid opening GitHub issues for support requests or questions!

Official companion guide

Write Goodreads Review

OWASP Juice Shop comes with an official companion guide eBook. It will give you a complete overview of all vulnerabilities found in the application including hints how to spot and exploit them. In the appendix you will even find complete step-by-step solutions to every challenge. Extensive documentation of custom re-branding, CTF-support, trainer's guide and much more is also included.

Pwning OWASP Juice Shop is published under CC BY-NC-ND 4.0 and is available for free in PDF, Kindle and ePub format on LeanPub. You can also browse the full content online!

Pwning OWASP Juice Shop cover Pwning OWASP Juice Shop back cover

Contributing

GitHub contributors JavaScript Style Guide Crowdin GitHub issues by-label GitHub issues by-label

We are always happy to get new contributors on board! Please check CONTRIBUTING.md to learn how to contribute to our codebase or the translation into different languages!

References

Did you write a blog post, magazine article or do a podcast about or mentioning OWASP Juice Shop? Or maybe you held or joined a conference talk or meetup session, a hacking workshop or public training where this project was mentioned?

Add it to our ever-growing list of REFERENCES.md by forking and opening a Pull Request!

Merchandise

  • On Spreadshirt.com and Spreadshirt.de you can get some swag (Shirts, Hoodies, Mugs) with the official OWASP Juice Shop logo
  • On StickerYou.com you can get variants of the OWASP Juice Shop logo as single stickers to decorate your laptop with. They can also print magnets, iron-ons, sticker sheets and temporary tattoos.

The most honorable way to get some stickers is to contribute to the project by fixing an issue, finding a serious bug or submitting a good idea for a new challenge!

We're also happy to supply you with stickers if you organize a meetup or conference talk where you use or talk about or hack the OWASP Juice Shop! Just contact the mailing list or the project leader to discuss your plans!

Donations

The OWASP Foundation gratefully accepts donations via Stripe. Projects such as Juice Shop can then request reimbursement for expenses from the Foundation. If you'd like to express your support of the Juice Shop project, please make sure to tick the "Publicly list me as a supporter of OWASP Juice Shop" checkbox on the donation form. You can find our more about donations and how they are used here:

https://pwning.owasp-juice.shop/part3/donations.html

Contributors

The OWASP Juice Shop core project team are:

For a list of all contributors to the OWASP Juice Shop please visit our HALL_OF_FAME.md.

Licensing

license

This program is free software: you can redistribute it and/or modify it under the terms of the MIT license. OWASP Juice Shop and any contributions are Copyright © by Bjoern Kimminich & the OWASP Juice Shop contributors 2014-2023.

Juice Shop Logo

juice-shop's People

Contributors

aaryan01 avatar aashish683 avatar agrawalarpit14 avatar alejandrosaenz117 avatar bkimminich avatar bogminic avatar captainfreak avatar chinggg avatar cigar-galaxy82 avatar cnotin avatar commjoen avatar eric-nieuwland avatar freedisch avatar greenkeeper[bot] avatar j12934 avatar jamescullum avatar juiceshopbot avatar justinsmid avatar m4l1c3 avatar marcrler avatar matteogheza avatar paseaf avatar rishabhkeshan avatar rockydevnet avatar scar26 avatar shubhampalriwala avatar supra08 avatar tghosth avatar the-pro avatar wurstbrot 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  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

juice-shop's Issues

Found a vulnerability not tracked on the Score Board? Please report it!

The juice-shop contains two dozen intended vulnerabilities. If there are more possible exploits, they sneaked in by accident. If you happen to find one of these, please report it in the comments of this issue or as a separate enhancement issue! Reasonable non-cheating challenges will receive tracking and be put on the Score Board.

Shopping functionality

From the "Best Deals" and "Search Results" it must be possible to put products into the current basket. If the product is already in the basket its quantity is increased by one.

For simlicity reasons users must be authenticated in order to shop products.

User is not associated with Feedback

Using "Contact Us" does not associate the Feedback with the logged-in user, as this is handled via generated restful API where UserId is not passed in.

Solution: Passing in UserId in hidden field for minimum security and even having another challenge.

Add SOAP webservice as forgotten legacy backend

[ ] Add a SOAP webservice that checks out the current basket using basic authentication with WS-Security. Simply calling the webservice has to be added as a challenge
[ ] Maybe add a correlated challenge for exploiting a "new customer"-flag that gives 10% discount when passed as true

Add coupon to checkout process

[x] Add a coupon field to the Basket screen
[x] Add a list of outdated coupon codes to the public/ftp directory
[x] Make sure that a valid coupon code can be crafted from knowing the old ones
[x] Add corresponding challenge

Create application logo [$5 awarded]

User Story

I as the juice-store owner
want a logo for the store
so that the brand more memorable

Design idea

  • Bottle or pack of juice which leaks juice to the floor (to better show how broken this shop is)

Required versions

  • 32x32 favicon.ico
  • 128x128 and/or 64x64 for logo inside webapp


The $5 bounty on this issue has been claimed at Bountysource.

First request to packaged application causes endless loop on server

When unzipping the packaged application and starting it from there with nm startor node app it looks fine. The first request from the Angular client will not show the "Best Deals" page and freeze the browser. On the server there is an endless loop happening of the checkDbRelatedChallenged method.

Add image to each default product

User Story

I as a juice-shop customer
want to have an image associated with each product
so that I can visualize what I buy.

Required images

  • Orange juice (bottle or pack)
  • Apple juice (bottle or pack)
  • T-Shirt with application logo on it (see #3)

Note: To avoid work some generic bottles filled with fluids of different color would be fine. Same goes for generic packs with different fruit symbols on it.

Split functional model and challenges

Introduce separate SQLite file for challenges to prevent an attacker from influencing the score via SQL Injection or other attacks on the RESTful server.

Fix Docker build for v1.4.1

Step 0 : FROM dockerfile/nodejs 
Pulling image (latest) from dockerfile/nodejs, endpoint: https://registry-1.docker.io/v1/ 9a76e1635147
Download complete 511136ea3c5a
Download complete d497ad3926c8
Download complete ccb62158e970
Download complete e791be0477f2
Download complete 3680052c0f5c
Download complete 22093c35d77b
Download complete 5506de2b643b
Download complete b08854b89605
Download complete d0ca2a3c0233
Download complete 1716e82f74f0
Download complete b41d25703535
Download complete e95dbc5735e1
Download complete 5992007b07de
Download complete b4e54ddfb2af
Download complete e05f47abd826
Download complete c368bf6a959f
Download complete 398ff1819212
Download complete 02ef3adc724b
Download complete 101496606a4a
Download complete 9a76e1635147
Download complete 9a76e1635147
Status: Downloaded newer image for dockerfile/nodejs:latest 
---> 9a76e1635147 
Step 1 : MAINTAINER Bjoern Kimminich <[email protected]> 
---> Running in 729b62b6dff1 
---> 43e3cc0fea0d 
Removing intermediate container 729b62b6dff1 
Step 2 : COPY . /juice-shop 
---> 784d90bdea32 
Removing intermediate container 9e2af6d23675 
Step 3 : RUN cd /juice-shop; npm install; node bower_install.js; node grunt_minify.js 
---> Running in b5edd2a9b5f6 
�[91mnpm�[0m 
�[91m �[0m 
�[91mERR! fetch failed�[0m 
�[91m https://registry.npmjs.org/express-jwt/-/express-jwt-0.5.0.tgz
�[0m 
�[91mnpm�[0m 
�[91m �[0m 
�[91mERR!�[0m 
�[91m Error: 400 Bad Request
�[0m 
�[91mnpm ERR!�[0m 
�[91m     at WriteStream.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/fetch.js:58:12)
�[0m 
�[91mnpm �[0m 
�[91mERR!�[0m 
�[91m     at WriteStream.emit (events.js:117:20)
�[0m 
�[91mnpm �[0m 
�[91mERR!�[0m 
�[91m     at evalmachine.<anonymous>:1609:14
npm�[0m 
�[91m ERR!     at /usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:102:5
�[0m 
�[91mnpm ERR!�[0m 
�[91m     at Object.oncomplete (evalmachine.<anonymous>:107:15)
�[0m 
�[91mnpm ERR!�[0m 
�[91m If you need help, you may report this *entire* log,
�[0m 
�[91mnpm ERR!�[0m 
�[91m including the npm and node versions, at:
npm �[0m 
�[91mERR!     <http://github.com/npm/npm/issues>
�[0m 
�[91m
�[0m 
�[91mnpm �[0m 
�[91mERR! �[0m 
�[91mSystem Linux 3.14.23
�[0m 
�[91mnpm�[0m 
�[91m ERR! �[0m 
�[91mcommand "/usr/local/bin/node" "/usr/local/bin/npm" "install"
�[0m 
�[91mnpm�[0m 
�[91m ERR!�[0m 
�[91m �[0m 
�[91mcwd /juice-shop
�[0m 
�[91mnpm�[0m 
�[91m �[0m 
�[91mERR! �[0m 
�[91mnode -v�[0m 
�[91m v0.10.33
�[0m 
�[91mnpm�[0m 
�[91m ERR!�[0m 
�[91m �[0m 
�[91mnpm -v 1.4.28
�[0m 
�[91mnpm�[0m 
�[91m ERR! 
�[0m 
�[91mnpm ERR! Additional logging details can be found in:
npm ERR!     /juice-shop/npm-debug.log
�[0m 
�[91mnpm ERR!�[0m 
�[91m not ok�[0m 
�[91m code 0
�[0m 
�[91m
�[0m 
�[91mmodule.js:340
�[0m 
�[91m    throw err;
    �[0m 
�[91m      ^
�[0m 
�[91mError: Cannot find module 'bower'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/juice-shop/bower_install.js:4:13)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
�[0m 
�[91m
�[0m 
�[91mmodule.js:340
�[0m 
�[91m    throw err;
    �[0m 
�[91m      ^
�[0m 
�[91mError: Cannot find module 'grunt'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/juice-shop/grunt_minify.js:2:13)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
�[0m 
The command [/bin/sh -c cd /juice-shop; npm install; node bower_install.js; node grunt_minify.js] returned a non-zero code: 8

Re-design github-page

The current generated page looks somewhat ok but could be improved a lot.

  • probably choose a bootstrap-theme?
  • add carousel with screenshots
  • inline video with e2e test run
  • social media links (but no tracking buttons!)

Running server tests fails via "npm test" but works standalone

Manually running istanbul cover ./test/serverTests.js works fine:

Finished in 3.068 seconds

7 tests, 45 assertions, 0 failures, 0 skipped



Jasmine-Node exited with code 0.
=============================================================================
Writing coverage object [D:\Development\GitHub\juice-shop\coverage\server-tests\coverage.json]
Writing coverage reports at [D:\Development\GitHub\juice-shop\coverage\server-tests]
=============================================================================

=============================== Coverage summary ===============================
Statements   : 94% ( 47/50 )
Branches     : 33.33% ( 2/6 )
Functions    : 87.5% ( 7/8 )
Lines        : 94% ( 47/50 )
================================================================================

Running the npm testcommand that actually triggers "test": "karma start karma.conf.js && istanbul cover ./test/serverTests.js" also runs through but the latter command is not correctly executed. Within the stacktrace there is a Exception loading: D:\Development\GitHub\juice-shop\test\server\apiSpec.jsand no log of the test result. The coverage calculation still is the same:

=============================== Coverage summary ===============================
Statements   : 94% ( 47/50 )
Branches     : 33.33% ( 2/6 )
Functions    : 87.5% ( 7/8 )
Lines        : 94% ( 47/50 )
================================================================================

Running on Travis-CI there is one additional information in the stacktrace that is not found on Windows:

[TypeError: Cannot read property 'prototype' of undefined]

Re-implement admin role

Users can have a role "admin" held by adding a boolean column to each user. Admins are the only ones allowed to

  • delete Feedback
  • view Users
    via the API. The admin page itself should remain unprotected as a A7-OWASP10 vulnerability example.

Scoreboard

Implement Scoreboard for overview which challenges have been done so far.

Server side vulnerabilities should be easy to track, Angular pure client side will be harder to track and prevent tampering with.

Use separate DB/schema to prevent cheating with SQLI?

Failures of XSS e2e-tests on Saucelabs

Challenge tests for XSS3 and XSS4 (which inject the alert script via REST API and then go to the attacked screen to verify success) are very brittle. They work fine locally but fail very often on SauceLabs.

Bad crypto example

In some of the hidden files put a badly encrypted link to a random server URL. decrypting and using this link will not have any functional effect but solve the associated crypto challenge. Maybe combine with some silly easteregg in Three.js or whatnot?

"Logged in as ..." message

When a user is logged in, his email address should be rendered in the Navbar.

[ ] Return email during login and put into session storage
[ ] Add "Logged in as ..." message to Navbar
[ ] Bind email without bind-html to keep XSS2 vulnerability limited to Admin section

Managed to crash the app? Please report how it happened!

The juice-shop app resets the database completely when it's started to make sure it always works as designed. This implicates that any application crash followed by a restart will reset all challenges into unsolved state as well. Of course this is an undesireable thing to happen, so the app must run as stable and resilient to crashes as possible.

If you forcefully manage to or accidentally crash the application please report it immediately as a comment to this issue or in a separate bug issue! Thank you!

Best Deals as carousel

Right now the Best Deals and Search Results screens are essentially identical. The Best Deals screen as an opening screen should look more appealing.

A Bootstrap carousel sliding through all products would probably work well.

Thia requires some high-res images to display, as 128px would look awful.

Add errorHandler() middleware

errorHandler() middleware of Connect is explicitly not meant for production, which is why is must be used on juice-shop.

Contact form invalidates after submitting feedback

After submitting feedback the Contact Us form is cleared but then immediately triggers validation. This leads to the impression that the feedback submission failed, which it actually didn't.

  • Stop initial validation from taking place
  • Add info message like "Thank you for your feedback." to confirm submission

User email XSS can be persisted but is never executed

User email is susceptible to persisted XSS but never executed anywhere. Reason: Missing $sce.trustAsHtml(...) conversion for user.email field in admin area.

Alternative: Find XSS masking that even tricks Angular JS' internal sanitization?

Integrate Twitter widget/link for coupons

Add link or widget with Twitter feed of @bkimminich for hashtag #juiceshop and #coupon so attackers can get some 10-20% codes to use for pattern analysis when trying to craft coupons with >80% discounts

Sidenote: Validity of tweeted coupons should always correlate with date of the tweet or be mentioned in it, e.g. "Get 10% off all products for whole November #juiceshop #coupon!"

Hash password when registering user

On user registration the data is now passed into the REST API directly with no password hashing happening. The effect is, that no registered user can log in, as his typed password during login is hashed and compared to the un-hashed password in the DB.

Order functionality

A user with a non-empty basket can place an order from the "Your Basket" screen by clicking a button. This creates a text (or PDF) file of the order an puts it into /public/ftp and directly displays it to the user.

Challenge: The server will check the total amount of each order while creating the confirmation and calls solve(negativeOrderChallenge) when the amount is negative.

Customer comment of the day

Implement closable alert box on bottom half of the start screen that displays a random ***** and **** rated comment. If the Feedback is associated with a user, display part of the email as well.

  • Open up GET /api/Feedbacks for public access
  • Implement alert with ng-bind-html for comment field
  • create weak anonymisation of email

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.