Giter Club home page Giter Club logo

esplora's Introduction

Esplora Block Explorer

build status docker release MIT license Pull Requests Welcome IRC

Block explorer web interface based on the esplora-electrs HTTP API.

Written as a single-page app in a reactive and functional style using rxjs and cycle.js.

See live at Blockstream.info.

API documentation is available here.

Join the translation efforts on Transifex.

Esplora

Features

  • Explore blocks, transactions and addresses

  • Support for Segwit and Bech32 addresses

  • Shows previous output and spending transaction details

  • Quick-search for txid, address, block hash or height by navigating to /<query>

  • Advanced view with script hex/assembly, witness data, outpoints and more

  • Mobile-ready responsive design

  • Translated to 17 languages

  • Light and dark themes

  • Noscript support

  • For Liquid and other Elements-based chains: support for CT, peg-in/out transactions and multi-asset

  • Mainnet, Testnet and Elements high performance electrum server

Developing

To start a development server with live babel/browserify transpilation, run:

$ git clone https://github.com/Blockstream/esplora && cd esplora
$ npm install
$ export API_URL=http://localhost:3000/ # or https://blockstream.info/api/ if you don't have a local API server
# (see more config options below)
$ npm run dev-server

The server will be available at http://localhost:5000/

To display debugging information for the Rx streams in the web developer console, set localStorage.debug = '*' and refresh.

Building

To build the static assets directory for production deployment, set config options (see below) and run $ npm run dist. The files will be created under dist/.

Because Esplora is a single-page app, the HTTP server needs to be configured to serve the index.html file in reply to missing pages. See contrib/nginx.conf.in for example nginx configuration (TL;DR: try_files $uri /index.html).

Pre-rendering server (noscript)

To start a pre-rendering server that generates static HTML replies suitable for noscript users, run:

# (clone, cd, "npm install" and configure as above)

$ export STATIC_ROOT=http://localhost:5000/ # for loading CSS, images and fonts
$ npm run prerender-server

The server will be available at http://localhost:5001/

Configuration options

All options are optional.

GUI options

  • NODE_ENV - set to production to enable js minification, or to development to disable (defaults to production)
  • BASE_HREF - base href for user interface (defaults to /, change if not served from the root directory)
  • STATIC_ROOT - root for static assets (defaults to BASE_HREF, change to load static assets from a different server)
  • API_URL - URL for HTTP REST API (defaults to /api, change if the API is available elsewhere)
  • CANONICAL_URL - absolute base url for user interface (optional, only required for opensearch and canonical link tags)
  • NATIVE_ASSET_LABEL - the name of the network native asset (defaults to BTC)
  • SITE_TITLE - website title for <title> (defaults to Block Explorer)
  • SITE_DESC - meta description (defaults to Esplora Block Explorer)
  • HOME_TITLE - text for homepage title (defaults to SITE_TITLE)
  • SITE_FOOTER - text for page footer (defaults to Powered by esplora)
  • HEAD_HTML - custom html to inject at the end of <head>
  • FOOT_HTML - custom html to inject at the end of <body>
  • CUSTOM_ASSETS - space separated list of static assets to add to the build
  • CUSTOM_CSS - space separated list of css files to append into style.css
  • NOSCRIPT_REDIR - redirect noscript users to {request_path}?nojs (should be captured server-side and redirected to the prerender server, also see NOSCRIPT_REDIR_BASE in dev server options)

Note that API_URL should be set to the publicly-reachable URL where the user's browser can issue requests at. (that is, not via localhost, unless you're setting up a dev environment where the browser is running on the same machine as the API server.)

Elements-only configuration:

  • IS_ELEMENTS - set to 1 to indicate this is an Elements-based chain (enables asset issuance and peg features)
  • NATIVE_ASSET_ID - the ID of the native asset used to pay fees (defaults to 6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d, the asset id for BTC)
  • BLIND_PREFIX - the base58 address prefix byte used for confidential addresses (defaults to 12)
  • PARENT_CHAIN_EXPLORER_TXOUT - URL format for linking to transaction outputs on the parent chain, with {txid} and {vout} as placeholders. Example: https://blockstream.info/tx/{txid}#output:{vout}
  • PARENT_CHAIN_EXPLORER_ADDRESS - URL format for linking to addresses on parent chain, with {addr} replaced by the address. Example: https://blockstream.info/address/{addr}
  • ASSET_MAP_URL - url to load json asset map (in the "minimal" format)

Menu configuration (useful for inter-linking multiple instances on different networks):

  • MENU_ITEMS - json map of menu items, where the key is the label and the value is the url
  • MENU_ACTIVE - the active menu item identified by its label

Development server options

All GUI options, plus:

  • PORT - port to bind http development server (defaults to 5000)
  • CORS_ALLOW - value to set for Access-Control-Allow-Origin header (optional)
  • NOSCRIPT_REDIR_BASE - base url for prerender server, for redirecting ?nojs requests (should be set alongside NOSCRIPT_REDIR)

Pre-rendering server options

All GUI options, plus:

  • PORT - port to bind pre-rendering server (defaults to 5001)

Note that unlike the regular JavaScript-based app that sends API requests from the client-side, the pre-rendering server sends API requests from the server-side. This means that API_URL should be configured to the URL reachable by the server, typically http://localhost:3000/.

How to build the Docker image

docker build -t esplora .

Alternatively, you may use the pre-built blockstream/esplora image from Docker Hub.

How to run the explorer for Bitcoin mainnet

docker run -p 50001:50001 -p 8080:80 \
           --volume $PWD/data_bitcoin_mainnet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh bitcoin-mainnet explorer"

How to run the explorer for Liquid mainnet

docker run -p 50001:50001 -p 8082:80 \
           --volume $PWD/data_liquid_mainnet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh liquid-mainnet explorer"

How to run the explorer for Bitcoin testnet3

docker run -p 50001:50001 -p 8084:80 \
           --volume $PWD/data_bitcoin_testnet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh bitcoin-testnet explorer"

How to run the explorer for Bitcoin signet

docker run -p 50001:50001 -p 8084:80 \
           --volume $PWD/data_bitcoin_signet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh bitcoin-signet explorer"

How to run the explorer for Liquid testnet

docker run -p 50001:50001 -p 8096:80 \
           --volume $PWD/data_liquid_testnet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh liquid-testnet explorer"

How to run the explorer for Liquid regtest

docker run -p 50001:50001 -p 8092:80 \
           --volume $PWD/data_liquid_regtest:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh liquid-regtest explorer"

How to run the explorer for Bitcoin regtest

docker run -p 50001:50001 -p 8094:80 \
           --volume $PWD/data_bitcoin_regtest:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh bitcoin-regtest explorer"

Regtest options

When run for Bitcoin regtest or Liquid regtest, the esplora container will create a default wallet and mine 100 blocks internally. You can disable this behavior by setting NO_REGTEST_MINING=1.

Docker config options

Set -e DEBUG=verbose to enable more verbose logging.

Set -e NO_PRECACHE=1 to disable pre-caching of statistics for "popular addresses", which may take a long time and is not necessary for personal use.

Set -e NO_ADDRESS_SEARCH=1 to disable the by-prefix address search index.

Set -e ENABLE_LIGHTMODE=1 to enable esplora-electrs's light mode.

Set -e ONION_URL=http://xyz.onion to enable the Onion-Location header.

Build new esplora-base

docker build -t blockstream/esplora-base:latest -f Dockerfile.deps .
docker push blockstream/esplora-base:latest
docker inspect --format='{{index .RepoDigests 0}}' blockstream/esplora-base

Build new tor (or you can pull directly from Docker Hub - blockstream/tor:latest)

docker build --squash -t blockstream/tor:latest -f Dockerfile.tor .
docker push blockstream/tor:latest
docker inspect --format='{{index .RepoDigests 0}}' blockstream/tor

Run: docker -d --name hidden_service blockstream/tor:latest tor -f /home/tor/torrc (could add a -v /extra/torrc:/home/tor/torrc, if you have a custom torrc)

Example torrc:

DataDirectory /home/tor/tor
PidFile /var/run/tor/tor.pid

ControlSocket /var/run/tor/control GroupWritable RelaxDirModeCheck
ControlSocketsGroupWritable 1
SocksPort unix:/var/run/tor/socks WorldWritable
SocksPort 9050

CookieAuthentication 1
CookieAuthFileGroupReadable 1
CookieAuthFile /var/run/tor/control.authcookie

Log [handshake]debug [*]notice stderr

HiddenServiceDir /home/tor/tor/hidden_service_v3/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:80

License

MIT

esplora's People

Contributors

adebayooriyomi avatar al-x avatar andreabonel avatar bavarianledger avatar benthecarman avatar chrischo-h avatar delta1 avatar deviavir avatar dimitris-t avatar dpet avatar ethicnology avatar greenaddress avatar marnixcroes avatar matthi01 avatar maxhillebrand avatar nitramiz avatar philippem avatar rcasatta avatar romanz avatar shesek avatar siddheshkukade avatar sprihozhiy avatar tudorpintea999 avatar valerio-vaccaro avatar wakiyamap avatar wintercooled 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

esplora's Issues

coinjoin and change outputs

from Reddit: https://www.reddit.com/r/bitcoin/comments/ay1b0e/_/ehyfoll

Just a suggestion for the "possibliy coinjoin transactions". Their detection seems to deactivate others privacy notes like the detection of change outputs which are deterministically linked with some inputs. IMHO, it would be a good idea to display this note when such change outputs exist (in addition to the coinjoin detection).

E.g.: https://blockstream.info/tx/8e56317360a548e8ef28ec475878ef70d1371bee3526c017ac22ad61ae5740b8

esplora next release checklist

  • Separate mempool and fee estimation with a horizontal spacer

  • Add mempool to home page after Broadcast tx

  • Have 502 bad gateway similarly rendered as 404 and with a message like "Esplora is currently not available, perhaps it is still loading, please retry again later." - or maybe we could even have some kind of IDB/indexing progress?

  • Recent transactions remains populated even mempool is empty, which may be ok but depth wouldn't be applicable anymore?

  • Seeing things like "0.00 vMB from tip" is not nice, should we move to vKB or switch to "< 0.01 vMB from tip" ?

  • When we suggest about overpaying - should we link to the estimation being used? Same about calculation for segwit/bech32

  • Refresh latest transifex languages update (Italian, etc)

Explorer says "We encountered an error. Please try again later."

Environment:
Ubuntu 18.04.1 LTS

Steps to reproduce:
Followed README...

$ git clone https://github.com/Blockstream/esplora && cd esplora
$ npm install
$ export API_URL=http://localhost:3000/ # or https://blockstream.info/api/ if you don't have a local API server
# (see more config options below)
$ npm start

Also running from the docker command at the same time:

docker run -p 8080:80 \
           --volume $PWD/data_bitcoin_mainnet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh bitcoin-mainnet explorer"

The line export API_URL=http://localhost:3000/ is confusing because I'm not sure what is supposed to be running on port 3000. netstat -plunt only shows SSH, the explorer front-end running on port 5000, and the explorer API(?) running on port 8080.

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 :::5000                 :::*                    LISTEN      28567/node          
tcp6       0      0 :::8080                 :::*                    LISTEN      - 

Even with export API_URL=http://localhost:8080/ I am getting the same results.

What is supposed to be running on port 3000?

Attached is a screenshot of the error page, which is what I see when I navigate to port 5000,
screenshot from 2018-12-29 13-04-03

endpoint does not exist "/mempool/recent"

Hi, I just upgraded esplora to the latest version. When clicking on the "Transactions" tab, I am getting this message.

blockstream.info works as expected though. I just rebuilt the esplora container as documented.

Thanks!

LN

Since we have a really nice block explorer we might want to cross-link with some information about the Lightning network (which points to Bitcoin on-chain information anyway). I've been collecting some stats over the last months about channel lifetime and node lifetime, and I think it'd be an interesting facette to add to the explorer. We'd only be indexing and displaying publicly available information, and cross-link public channel-events with the matching transactions.

Information

Channel lifetime information

  • General channel stats (capacity, % of time enabled, lifetime)
  • Cross-link with on-chain events (funding TX, close/sweep transactions, splices)
  • Availability plot (disabled vs. enabled)

Node lifetime information

  • Node stability metrics
  • Channels for a node
  • Evolution of various metrics over time (capacity, disabled vs. enabled channels, channel duration)

Please add date to transactions

Currently there is no date field when viewing a transaction, please add that so it's easy to see when the transaction was sent.

Add link to show only Unspent Outputs

I'd like a way to show only unspent outputs for a specified address. Same format as /address/:address but only unspents.

This is already available in the API (GET /address/:address/utxo) but GUI accessibility would be nice.

Motivation

The Glacier Protocol requires users to manually select UTXOs for withdrawal, printing a QR code with the raw transaction data for each one. Today the process uses blockchain.info, but a few months ago that site removed their "Unspent Outputs" link from the GUI, so Glacier withdrawals are currently somewhat broken.

I can't find an alternative block explorer with similar functionality, but it seems like it would be easy to add to Blockstream.info.

Chain logo not shown in TOR Browser

With high security settings the TOR Browser blocks SVG images. That leads to the bitcoin/liquid logo not being shown:

2019-03-06-144123_9600x2160_scrot

Maybe use a png image for the nojs version?

x pub / y pub

ability to explore an x-pub and y-pub (segwit version of x-pub)

ability to unblind Liquid outputs (on client)

It would be cool to be able to present blinding key for specific output and look at unblinded values.

Should be possible (although would require porting rangeproof rewind code to js), and would work only with js enabled, will need to load additional js with implementation, etc..

But it could be useful for educational purposes (tutorials linking to real confidential transactions that you can examine with blinding key from tutorial), or for trivial audit, for example.

That would be quite a lot of work, of course, so I am just leaving this idea here, maybe someone somewhen will have time to implement this :-)

Running Docker results in 502 Bad Gateway

Running the docker command per the README.md. The result is a page with a 502 Bad Gateway error due to a missing endpoint in /api/blocks/:1 when going to the :8080 web page.

"Transaction not found"

https://wasabiwallet.io/

I recently pointed Wasabi's website to Blockstream.info and it seems like it says "transaction not found" when the coinjoin is unconfirmed. Currently these three are not found:

c394361f5dbfb01f2a69a2111c36dfb5fe8c8dde0f57a0a5a856a959b2d6ad65
94537ef9853c0641e5220e6f4ffd0b39ba63d847e70175b6c923434a076f2c4c
b293c0e2d4b24bde3ae952fb0f24f9d8af05d9710a61dfb87a82700c2ce6187f

Blockchain.info shows it properly. What can be the issue? Some bitcoind configuration makes you not to show large unconfirmed transactions?

image

Upstream on port 3000 not listening

Hi, I've been running Esplora for 2 weeks with Docker. Bitcoin Core sync'ed quickly since I already had the data. Electrs then started working hard but has been using only around 1% of the CPU for several days.

I'm having a look at nginx logs in the container and I can see it's trying to connect to the upstream but the connection is refused when I hit the server. Port 3000 is indeed not a listening port in the container, nor is it on the host.

2019/03/02 03:55:18 [error] 199#199: *224 connect() failed (111: Connection refused) while connecting to upstream, client: 139.28.218.30, server: , request: "GET /api/blocks/tip/height HTTP/1.1", upstream: "http://127.0.0.1:3000/blocks/tip/height", host: "esplora-mainnet:8080", referrer: "http://esplora-mainnet:8080/"

Around 750GB of disk space is used on a total of 1TB.

I haven't changed anything to the configs, except adding -vvv to the supervisord config to know what was going on.

...
2019-03-01T21:42:12.850+00:00 - DEBUG - Starting pre-cache for scripthash 26/10692
2019-03-01T22:48:43.007+00:00 - DEBUG - writing 1 rows to RocksDB { path: "/data/electrs_bitcoin_db/mainnet/mainnet/newindex/cache" }, flush=Enable
2019-03-02T00:39:57.217+00:00 - DEBUG - writing 1 rows to RocksDB { path: "/data/electrs_bitcoin_db/mainnet/mainnet/newindex/cache" }, flush=Enable
2019-03-02T02:15:11.364+00:00 - DEBUG - writing 1 rows to RocksDB { path: "/data/electrs_bitcoin_db/mainnet/mainnet/newindex/cache" }, flush=Enable
2019-03-02T02:15:11.373+00:00 - DEBUG - Starting pre-cache for scripthash 31/10692
2019-03-02T03:25:11.233+00:00 - DEBUG - writing 1 rows to RocksDB { path: "/data/electrs_bitcoin_db/mainnet/mainnet/newindex/cache" }, flush=Enable

It looks fine, I don't see errors anywhere. When is electrs going to listen to port 3000?

Thanks.

preview improvements

Preview for social share that contain information related: for a tx can show input, output, fee, for a specific output it may show the amount, for blocks we can show total fee + reward, size, etc

Unable to build electrs on Odroid HC2

This issue is a problem I encountered with your electrs fork -- but that repo doesn't accept issues so I'm posting here.

I get an error when I run the build command described in the directions:

$  cargo run --release --bin electrs -- -vvvv --daemon-dir ~/.bitcoin
  Downloaded cc v1.0.25
    ...
   Compiling crossbeam-utils v0.6.1
   Compiling rayon-core v1.4.1
error: failed to run custom build command for `rayon-core v1.4.1`
could not execute process `/mnt/hdd2/electrs/target/release/build/rayon-core-ce94679caf3f5155/build-script-build` (never executed)
warning: build failed, waiting for other jobs to finish...
error: build failed

I can run the same command from the base romanz/electrs project and it builds successfully.

So I don't believe it's an upstream problem. But I lack the rust chops to debug exactly what is failing ...

P2PK is not currently supported, leading to inaccurate address balance

Example: https://blockstream.info/address/17iyRRXBHJKbv5DKPPkttWewm3CHdNPGQd

scantxoutset "start" "[\"combo(041ada81ea00c11098d2f52c20d5aa9f5ba13f9b583fda66f2a478dd7d95a7ab615159d98b63df2e6f3ecb3ef9eda138e4587e7afd31e7f434cbb6837e17feb0c5)\"]"
{
  "success": true,
  "searched_items": 50244201,
  "unspents": [
    {
      "txid": "540a7e54fd64478554519f1b2d643ecc888c5030631487f9cfc530b71d281309",
      "vout": 0,
      "scriptPubKey": "41041ada81ea00c11098d2f52c20d5aa9f5ba13f9b583fda66f2a478dd7d95a7ab615159d98b63df2e6f3ecb3ef9eda138e4587e7afd31e7f434cbb6837e17feb0c5ac",
      "amount": 50.00000000,
      "height": 50
    },
    {
      "txid": "8efb0be559ea251459184beca257fb36746a6c7464098b1bed2d12bb1383713b",
      "vout": 0,
      "scriptPubKey": "76a91449c0e836a0bb1e176097e6408efe6cb4c11a98f588ac",
      "amount": 0.00100000,
      "height": 410333
    }
  ],
  "total_amount": 50.00100000
}

Tone down the privacy analysis

While I like the idea of privacy analysis, but done badly it's pretty counter productive. Let's take this:

screen shot 2019-03-06 at 4 09 37 pm

The alarming "Round payment amount" red warning is dubious at best (we're talking about the difference of 1 significant figure). And the orange "Unnecessary input heuristic" tooltip incorrectly claims that an input is there that is not typically added by wallets (but in reality almost all wallets actually do).

Also not to mention, several of the heuristics are counter-productive. Obviously context-sensitive, but in general it's better for several reasons that wallets are oblivious to creating UIH or not. And likewise creating transactions without change is a good thing (for both fees and privacy).

But probably worst of all, the analysis is missing some of the most important privacy leaking checks.

I think the responsible thing to do would be move "Privacy Analysis" into it's own page that disclaims the limitations of it. Or at least only have prominent warnings for things that are definitely a problem (e.g. address reuse)

Feature request: output index in details

I was looking for output index 16, and was a bit annoying to count with the details expanded. Just leaving the number in the box somewhere would make this a piece of cake.

Nice to have: link for specific input/output

Similar to sites like stackoverflow where you can link a specific answer in a page, could be nice to link directly an input or an output of a tx, the specific input become highlighted.
I imagine this could be done client side, with a link like:
https://blockstream.info/tx/66df7564d51f4ca57c045562fe858e7bfb63a5abe83dfd9c03c7b493531edbb1#i0
which will bring to the transaction page, open details, scroll the page to the input 0, and highlight the input 0

Docker build fails: error parsing reference

$ lsb_release -a
Description:	Ubuntu 17.10
Codename:	artful
$ git log
commit 6bec816552ca637992a41ace00348d5360ba9087 (HEAD -> master, origin/master, origin/HEAD)
Date:   Fri Dec 7 13:28:54 2018 +0100
$ docker --version
Docker version 1.13.1, build 092cba3
$ docker build -t esplora .    
Sending build context to Docker daemon 96.44 MB
Step 1/14 : FROM blockstream/esplora-base:latest AS build
Error parsing reference: "blockstream/esplora-base:latest AS build" is not a valid repository/tag: invalid reference format

auto expand url

would be cool if you could link to addr/tx pages with the Details box(es) already expanded, maybe with a #details bit in the URL”

Where is the blockchain processed?

Hi.
I cannot find the file(s) that process the blockchain and save it to the database.

Could you please tell me where the processing is done?

Thanks.

Block Timestamp Language Doesn't Change

It seems that the timestamp for blocks is always displayed in OS language. It's always English for me, even when I select a different language, and our translator noticed that it's always Korean for him, even when he selects Japanese.

image

More Reliable Tor Hidden Service Config Suggestion

You are a public company, so you don't need to hide your location, thus you are in a position to provide a faster, more stable and more reliable Tor hidden service than other services with the following configuration options:

# ---MAKE TOR FASTER---

# Need to disable for HiddenServiceNonAnonymousMode
SOCKSPort 0
# Need to enable for HiddenServiceSingleHopMode
HiddenServiceNonAnonymousMode 1
# This option makes every hidden service instance hosted by a tor
# instance a Single Onion Service. One-hop circuits make Single Onion
# servers easily locatable, but clients remain location-anonymous.
HiddenServiceSingleHopMode 1

Broadcast endpoint

Do you think there will be a possibility to add such feature with current live infrastructure? Both for Bitcoin and in particular Liquid

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.