Git Product home page Git Product logo

node's Introduction

Node.js

Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. For more information on using Node.js, see the Node.js Website.

Node in Electron

Overview

The Electron Project embeds Node, which allows developers to leverage all of Node's capabilities and access the filesystem on your desktop platform. Electron embeds different versions of Node in different release lines of Electron. These versions are chosen such that they depend on a version of V8 compatible with the version of V8 present in the Chromium version used for that release line.

Branching Strategy:

master in this fork is an unused branch; a version of Node present in a release line can be found in a branch with the naming scheme electron-node-vX.Y.Z.

6-0-x 5-0-x 4-0-x 3-0-x 2-0-x 1-8-x 1-7-x
Chromium v76.0.3809.60 v73.0.3683.121 v69.0.3497.106 v66.0.3359.181 v61.0.3163.100 v59.0.3071.115 v58.0.3029.110
Node v12.4.0 v12.0.0-unreleased v10.11.0 v10.2.0 v8.9.3 v8.2.1 v7.9.0
V8 7.6.303.19 7.2.502.19 v6.9.427.24 v6.6.346.23 v6.1.534.36 v5.8.283.38 v5.5.372.40

See our website for what versions of Node are present in which release lines.

Working on the fork

To make changes to Node for a specific version of Electron, see electron/vendor/node for the version of Node in that release line, and then open a Pull Request against the associated electron-node-vX.Y.Z branch.

node's People

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

node's Issues

Possible issues with on_watcher_queue_updated callback

When looking at this code with @codebytere for us to make a PR to propose upstream, we found a couple of things that we weren't sure about and would like another opinion on:

  1. Most of the 'queue updated' calls work like this:
void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
  ...
  else if (QUEUE_EMPTY(&w->watcher_queue)) {
    QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
    if (loop->on_watcher_queue_updated)
      loop->on_watcher_queue_updated(loop);
  }

But through the call chain of uv_loop_init() -> uv_async_init() -> uv__async_start() -> uv__io_start(), any loop already has an async watcher on it as soon as it's initialized. So if I'm reading this right, the callback will never be triggered for the async watcher because we'll never have an empty queue and a non-NULLon_queue_watcher_updated

  1. One of the callback triggers doesn't look like the others. uv__io_feed() pumps it unconditionally, regardless of whether the loop->watcher_queue changes:
void uv__io_feed(uv_loop_t* loop, uv__io_t* w) {
  if (QUEUE_EMPTY(&w->pending_queue))
    QUEUE_INSERT_TAIL(&loop->pending_queue, &w->pending_queue);
  if (loop->on_watcher_queue_updated)
    loop->on_watcher_queue_updated(loop);
}

Are these intentional? If so, could you walk us through it so that we can better understand this code?

Reduce our patches for node

Currently we have about 20 commits based on upstream node's head, we should keep our patches as minimum as possible and try to get some of them into upstream.

Windows runtime: process.binding('contextify') Error: No such module

I tried to build this embedded node with vcbuild nosign
All build ok, node --version shows v0.11.13
But when run node alone or with js file it returns follow error:

d:\toollib\atom-editor\atom-shell\vendor\node\Release>node server.js
node.js:738
  var ContextifyScript = process.binding('contextify').ContextifyScript;
                                 ^
Error: No such module
    at Error (native)
    at node.js:738:34

d:\toollib\atom-editor\atom-shell\vendor\node\Release>

I have google but seem no clear clues.
Still investigating...

Contexts: supporting new Node's ESM Loader (without hacking)

  • Version: Electron 2.0.0-beta.x
  • Platform: macOS 10.13
  • Subsystem: electron/node

After over a month of testing all aspects of Node's new loader infrastructure in electron, only one issue in my opinion remains to be resolved and in my best estimation it needs to be in electron/node.

Setup: (steps to use Node's loader)

// Construct
const Loader = process.NativeModule.require('internal/loader/Loader');
const loader = new Loader(`file://${__dirname}`);

// Configure (abstract)
loader.hook({
  resolve(specifier, referrer, resolve) {
    // Custom resolution logic …
    // return {url: ..., format: ... }

    // Or defer to default resolver
    return resolve(specifier, referrer);
  }
});

// Import a module
loader.import('./module.js', `file://${__filename}`);

Problem

// Import a module (works the first time)
loader.import('./module.js', `file://${__filename}`);

// Re-Importing a module fails *** throws ***
loader.import('./module.js', `file://${__filename}`);

The loader's internals are not designed to work in multi-context environments. Both Electron and NW.js present the same issue where the loader associates the "evaluated" namespace of the module to the current node context which seems to not behave the same here as it does in node.

The end result is that a module will load fine on first import where the loader holds a direct reference to it, but as soon as it is imported again (if even on the next line) then the loader uses the stored reference in the module map expecting it to point to the context-bound instance of the module.

Unlike Node, in both Electron & NW.js, this instance would be undefined.

Workaround

It takes two ugly but effective steps (all kosher and pure JS). 1. Override the loader's import method so that it keeps a reference of the first instance of the module on the actual JS instance of the module wrap (ie moduleWrap[Symbol.for('module')]). 2. At the same time, make sure to always create a separate loader instance per context (in Electron, I create one for main, and one in preload which is reliable both in preload as well as the associated window).

Recommendation

How Electron or NW.js can best go about resolving this depends on their multi-context architectures, and best left to those more knowledgeable. However, from all my research and testing, I am almost certain that correctly associating contexts with modules is somewhere in src/module_wrap.cc.

I believe that Node's loader will take little effort to make it ideal for mainstream use in Electron. If you are looking into it, I am very interested and would be happy to exchange recipes regarding other related obstacles. As it stands, the loader is very stable if you know what to expect, and it takes a lot of patching. I managed to do it all in JS and without any custom rebuilds. If this will eventually become mainstream, I honestly think some effort will be needed to properly support it by the platform.

crypto.createPublicKey Error: ERR_OSSL_BN_NEGATIVE_NUMBER

I am attempting to use the package openid-client within an Electron app to authenticate the current user. When this library attempts to download the key store from Azure Active Directory, the following error is thrown:

{ Error: error:0300006d:bignum routines:OPENSSL_internal:NEGATIVE_NUMBER
    at createPublicKey (internal/crypto/keys.js:315:10)
    at asKey (C:\Users\...\node_modules\@panva\jose\lib\jwk\import.js:73:19)
    at C:\Users\...\node_modules\@panva\jose\lib\jwks\keystore.js:162:39
    at Array.map (<anonymous>)
    at Object.asKeyStore (C:\Users\...\node_modules\@panva\jose\lib\jwks\keystore.js:162:26)
    at Issuer.keystore (C:\Users\...\node_modules\openid-client\lib\issuer.js:87:38)
    at processTicksAndRejections (internal/process/task_queues.js:86:5)
    at async run (C:\Users\...\test-aad-keyset\index.js:5:19)
  opensslErrorStack:
   [ 'error:04000064:RSA routines:OPENSSL_internal:BAD_ENCODING' ],
  library: 'bignum routines',
  function: 'OPENSSL_internal',
  reason: 'NEGATIVE_NUMBER',
  code: 'ERR_OSSL_BN_NEGATIVE_NUMBER' }

The maintainer of openid-client suggested that this is a bug in Electron's implementation of the crypto package. With his help, I have published a minimal test project that produces repeatable results. This project works under Node 12.0.0, but fails under Electron 6.0.0-beta.13. When successful, this program will print the JWK store to the console.

Node Module version out of synch with official Node.JS distribution

The current node module version used in this repo is 49 (as of commit 3ce8afa), however the current module version of the latest Node.JS package is 48 (https://nodejs.org/en/download/releases/), which makes it impossible to build native modules for use in applications that check for the node module version (e.g. Visual Studio Code).

Please reconsider your decision to allow deviating from the version of the official Node.JS distribution.

Calculation of poll phase timeout ignores setTimeout() if it is set after promise resolving inside another setTimeout()

If I run the script below, timeouts after Promise.resolve() are ignored while calculation timeout for the poll phase if the queue is empty.
The timeout callbacks declared inside then body of Promise.resolve() will be called if anything else will stop poll waiting (for example, another setTimeout).
However, their timeout values will have no impact on the poll phase timeout.

const getCurrentTime = function () {
    const today = new Date();
    return `${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}:${today.getMilliseconds()}`;
}

console.info(`${getCurrentTime()}|Start`);

// global timeout
setTimeout(() => {
    console.info(`${getCurrentTime()}|5s-timeout ended`);
}, 5000);

setTimeout(() => {
    Promise.resolve().then(() => {
        console.info(`${getCurrentTime()}|Promise has been resolved`);
        const timerStartTime = process.hrtime();

        // The callback will be run after the global timeout
        setTimeout(() => {
            const timeoutActualStart = process.hrtime(timerStartTime);
            console.info(`${getCurrentTime()}|0ms-timeout started after ${timeoutActualStart}s`);
        });
        
        // The callback will be run after the global timeout
        setTimeout(() => {
            const timeoutActualStart = process.hrtime(timerStartTime);
            console.info(`${getCurrentTime()}|1s-timeout started after ${timeoutActualStart}s`);
        }, 1000);
    });
});

The issue can be only reproduced while using electron with ELECTRON_RUN_AS_NODE activated. The issue cannot be reproduced if I run the same script using nodejs v12.13.0.
Electron version on my PC is v8.0.0 (originally the issue was reproduced on v7.1.11).

Electron/node output (incorrect execution) Node output (correct execution)
Start Start
Promise has been resolved Promise has been resolved
0ms-timeout started after 4,999303964s 0ms-timeout started after 0,1527468s
1s-timeout started after 5,254293s 1s-timeout started after 1,990436s
5s-timeout ended 5s-timeout ended

Configure - "if options.run_gyp:" should be "if not options.run_gyp"

I am using Windows on my PC and I have an unrelated issue with the bundled Node so I have to patch one of the Node's internal JS modules (and hence must recompile node.dll)

When I tried to build electron-node-10.2.0 I got the error Failed to create vc project files.

After some primitive debugging I think that the reason for this error lies on the last line in configure. Instead of

if options.run_gyp:
  run_gyp(gyp_args)

it should be

if not options.run_gyp:
  run_gyp(gyp_args)

Merge with upstream v0.11.13

Hi,
many people who developing Node addons using a NAN library. But the authors removed support for Node 0.11 versions prior to 0.11.13.

So, how about to merge to v0.11.13 ?

ELECTRON_RUN_AS_NODE is not correctly set for forked child process

The Electron version of Node includes code to set ELECTRON_RUN_AS_NODE=1 in the environment of child process. This is the relevant commit:

f263751

The problem comes if the caller passes in process.env as an option to child_process.fork(), this seems to be quite a common thing to do (worker-farm does this for instance). As an example, something like this:

child_process.fork("myscript.js", [], { env: process.env });

In this case, this line tries to change the actual process.env, not a copy:

f263751#diff-1dea15b19e826b37828eef6c41166ffeR57

The result is that ELECTRON_RUN_AS_NODE is set to "1" rather than 1 as process.env will implicitly convert all values to strings (see https://nodejs.org/dist/latest-v8.x/docs/api/process.html#process_process_env). This stops the child process running as node, and weird things can happen. In particular, the debug tools may stop working. More descriptions of these symptoms are available here:

electron/electron#18412

I suspect the solution will be to ensure we modify a copy of the environment we have been passed, for instance changing:

  // When forking a child script, we setup a special environment to make
  // the atom-shell binary run like the upstream node.
  if (!options.env) {
    options.env = Object.create(process.env);
  }
  options.env.ELECTRON_RUN_AS_NODE = 1;

to something like:

  // When forking a child script, we setup a special environment to make
  // the atom-shell binary run like the upstream node.
  if (options.env) {
    options.env = Object.create(options.env);
  } else {
    options.env = Object.create(process.env);
  }
  options.env.ELECTRON_RUN_AS_NODE = 1;

As a workaround, callers can explicitly pass a copy of process.env (worker-farm supports this for instance).

Errors attempting to build node by itself; cannot find v8.h on Arch Linux

Hi,

I am operating on Arch Linux (version info is irrelevant as it follows a rolling release model), and trying to build this package by itself. That is, this is without Electron (i.e., I am not building this package in the vendor/node subfolder of the Electron source tree), as I just need some of its files for a custom Electron package, the rest of the files in this Electron package will be provided by the binary archive (i.e., .zip files for Linux) releases of Electron. As I am working on Arch Linux I have to use a little trick I found in an issue on the official nodejs/node repository (URL: nodejs/node#2735) in order to get the build to use Python 2 instead of the default, Python 3. Namely I run (where $srcdir is /home/fusion809/GitHub/mine/packaging/electron/src):

if ! [[ -d $srcdir/bin ]]; then
  mkdir $srcdir/bin  
  ln -sf /usr/bin/python2 $srcdir/bin/python
fi
export PATH=$srcdir/bin:$PATH
./configure --prefix=/usr
make

and I get the error:

  LD_LIBRARY_PATH=/home/fusion809/GitHub/mine/packaging/electron/src/node/out/Release/lib.host:/home/fusion809/GitHub/mine/packaging/electron/src/node/out/Release/lib.target:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../.; mkdir -p /home/fusion809/GitHub/mine/packaging/electron/src/node/out/Release/obj/gen; python tools/js2c.py "/home/fusion809/GitHub/mine/packaging/electron/src/node/out/Release/obj/gen/node_natives.h" lib/internal/bootstrap_node.js lib/_debug_agent.js lib/_debugger.js lib/assert.js lib/buffer.js lib/child_process.js lib/console.js lib/constants.js lib/crypto.js lib/cluster.js lib/dgram.js lib/dns.js lib/domain.js lib/events.js lib/fs.js lib/http.js lib/_http_agent.js lib/_http_client.js lib/_http_common.js lib/_http_incoming.js lib/_http_outgoing.js lib/_http_server.js lib/https.js lib/_linklist.js lib/module.js lib/net.js lib/os.js lib/path.js lib/process.js lib/punycode.js lib/querystring.js lib/readline.js lib/repl.js lib/stream.js lib/_stream_readable.js lib/_stream_writable.js lib/_stream_duplex.js lib/_stream_transform.js lib/_stream_passthrough.js lib/_stream_wrap.js lib/string_decoder.js lib/sys.js lib/timers.js lib/tls.js lib/_tls_common.js lib/_tls_legacy.js lib/_tls_wrap.js lib/tty.js lib/url.js lib/util.js lib/v8.js lib/vm.js lib/zlib.js lib/internal/child_process.js lib/internal/cluster.js lib/internal/freelist.js lib/internal/linkedlist.js lib/internal/net.js lib/internal/module.js lib/internal/process/next_tick.js lib/internal/process/promises.js lib/internal/process/stdio.js lib/internal/process/warning.js lib/internal/process.js lib/internal/readline.js lib/internal/repl.js lib/internal/socket_list.js lib/internal/util.js lib/internal/v8_prof_polyfill.js lib/internal/v8_prof_processor.js lib/internal/streams/lazy_transform.js deps/v8/tools/splaytree.js deps/v8/tools/codemap.js deps/v8/tools/consarray.js deps/v8/tools/csvparser.js deps/v8/tools/profile.js deps/v8/tools/profile_view.js deps/v8/tools/logreader.js deps/v8/tools/tickprocessor.js deps/v8/tools/SourceMap.js deps/v8/tools/tickprocessor-driver.js ./config.gypi src/notrace_macros.py src/nolttng_macros.py src/perfctr_macros.py
  g++ '-DNODE_ARCH="x64"' '-DNODE_PLATFORM="linux"' '-DNODE_WANT_INTERNALS=1' '-DV8_DEPRECATION_WARNINGS=1' '-DHAVE_OPENSSL=1' '-D__POSIX__' '-DHTTP_PARSER_STRICT=0' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D_POSIX_C_SOURCE=200112' -I../src -I../tools/msvs/genfiles -I../deps/uv/src/ares -I/home/fusion809/GitHub/mine/packaging/electron/src/node/out/Release/obj/gen -I../deps/openssl/openssl/include -I../deps/zlib -I../deps/http_parser -I../deps/cares/include -I../deps/uv/include  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /home/fusion809/GitHub/mine/packaging/electron/src/node/out/Release/.deps//home/fusion809/GitHub/mine/packaging/electron/src/node/out/Release/obj.target/node/src/debug-agent.o.d.raw -D_FORTIFY_SOURCE=2 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -c -o /home/fusion809/GitHub/mine/packaging/electron/src/node/out/Release/obj.target/node/src/debug-agent.o ../src/debug-agent.cc
In file included from ../src/debug-agent.h:26:0,
                 from ../src/debug-agent.cc:22:
../src/util.h:4:16: fatal error: v8.h: No such file or directory
 #include "v8.h"
                ^
compilation terminated.
make[1]: *** [node.target.mk:150: /home/fusion809/GitHub/mine/packaging/electron/src/node/out/Release/obj.target/node/src/debug-agent.o] Error 1
make[1]: Leaving directory '/home/fusion809/GitHub/mine/packaging/electron/src/node/out'
make: *** [Makefile:66: node] Error 2

I am quite stuck as to how to fix this error. I am building from the master branch of this repo.

Thanks for your time,
Brenton

git clone fails because very long file name on windows

  • Version: v9.8.0
  • Platform: Micrsosoft Windows 10 Pro, 10.0.16299 Build 16299, 64 Bit
  • Subsystem:

When cloning this project the following checkout does fail on windows if the current directory is a bit too far away from the root directory.

git clone https://github.com/electron/node.git
Cloning into 'node'...
remote: Counting objects: 365486, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 365486 (delta 372), reused 371 (delta 358), pack-reused 365096
Receiving objects: 100% (365486/365486), 243.00 MiB | 8.73 MiB/s, done.
Resolving deltas: 100% (282495/282495), done.
fatal: cannot create directory at 'deps/npm/node_modules/libnpx/node_modules/yargs/node_modules/read-pkg-up/node_modules/read-pkg/node_modules/load-json-file/node_modules/parse-json/node_modules/error-ex/node_modules': Filename too long
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry the checkout with 'git checkout -f HEAD'

There seems to be a quite long file name which is an issue:

fatal: cannot create directory at 'deps/npm/node_modules/libnpx/node_modules/yargs/node_modules/read-pkg-up/node_modules/read-pkg/node_modules/load-json-file/node_modules/parse-json/node_modules/error-ex/node_modules': Filename too long

Unable to build node

Hi,
I'm trying to use electron and I would like to prebuilt some of my libraries which have native C++ code, so I can commit them in my repositories. I have custom prebuilt tool, that checks the bin folder for binary with specific name, based on the process.version.v8 value. For example if you are using v8 version 4.2, we are looking for binary with name <module_name>-4.2. I've checked electron and in the release notes, I've found some mentions that io.js had been updated to version 2.3.1 (we are using one of electron's older versions). So I installed io.js 2.3.1 and prebuilt my binaries. When I tried to integrate my modules, I've found an issue - electron is using this fork, not real io.js. Based on the release notes, it was really confusing. Anyway, it turned out I have to use this fork to rebuild my native libraries, so I cloned the repo and executed all steps from the README. But many errors occured. I've tried on Windows and on Linux, I've triple checked my configurations and I'm also able to build latest io.js (currently known as node) master branch.
So can you tell me how can I build this repo and use it to prebuild my libraries. Do you have any additional steps for building the source code?
I can send you logs with the failures, but I believe you'll be able to reproduce the issue by following the README.
Any help is highly appreciated!
Thanks in advance!

GN: Build targets node_lib and inspector have inconsistent defines

The build target node_lib in BUILD.gn uses defines that are defined in the target itself and in the config node_lib_config. The target inspector in src/inspector/BUILD.gn shares some of these defines, but not all.

That can cause the node::Environment object as defined in env.h to have different layout in src/inspector/tracing_agent.cc than in the rest of Node.js. This could cause worker tests to fail.

See https://gist.github.com/hashseed/8ee8fe7a5c491cff13c62292ae298fcc and https://github.com/hashseed/gn-node

The right way would be to move all defines into node_lib_config and use that both in the node_lib and the inspector targets.

Here is the example fix in my fork of the GN files: hashseed/gn-node@d4cf240

Upgrade

It would be great if the atom IO js fork could be updated as in the latest version of IO an issue with TLS has been addressed nodejs/node#923

Access violation using V8

I am trying to use this library to embed node inside of my process.

I am using @a507a3c (electron v0.36.9)
Windows 10, VS 2013, x86, Debug build.

I was having trouble with even a simple node::Start, so I traced it down to V8 throwing an exception.

#include "stdafx.h"
#include "node.h"
#include "include/v8.h"
#include <cstdlib>

class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
public:
    virtual void* Allocate(size_t length) {
        void* data = AllocateUninitialized(length);
        return data == NULL ? data : memset(data, 0, length);
    }
    virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
    virtual void Free(void* data, size_t) { free(data); }
};

extern "C"
{
    __declspec(dllexport) void __stdcall start_node()
    {
        v8::V8::Initialize();

        ArrayBufferAllocator allocator;
        v8::Isolate::CreateParams params;
        params.array_buffer_allocator = &allocator;
        v8::Isolate::New(params); // ACCESS VIOLATION HERE!
    }
}

The exact error message is:

Exception thrown at 0x04EDF885 (v8.dll) in Test.exe: 0xC0000005: Access violation reading location 0x00000008.

Any ideas why this would fail? When compiling electron in debug model, I still can't step into the v8.dll to trace the issue further.

crypto.generateKeyPair* support in electron node

I recently updated my project to the latest electron beta (5.0.0-beta.1) which uses node "12" (electron-node-canary) as I was hoping to make use of crypto.generateKeyPairSync that was introduced in node v10.12. Unfortunately, when I call the function, I get the following error TypeError: crypto.generateKeyPairSync is not a function, despite the fact that it works on node latest and lts/dubnium

I've noticed that in the canary branch that feature had been reverted (see commit: c9f4c6f). What was the reason for removing this feature from the latest node build, and is there a chance of bringing it back in?

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.