GithubHelp home page GithubHelp logo

inventures / hatchjs Goto Github PK

View Code? Open in Web Editor NEW
72.0 16.0 32.0 10.87 MB

Hatch.js - not officially supported

License: Other

JavaScript 77.91% CoffeeScript 0.12% CSS 7.01% Shell 0.02% ActionScript 0.17% Makefile 0.03% HTML 14.73%

hatchjs's Introduction

(Hatch.js is no longer officially supported. Please feel free to fork, chop and change, use as reference)

Hatch.js documentation

Hatch.js is CMS platform with social features. This package is an Express application which can be extended with additional modules. All parts of this application are accesible via CompoundJS API.

License

Hatch.js dual-licensed under AGPL and Hatch Commercial License. AGPL means that if you fork the Hatch.js code or write a derivative application (an application which runs on the same CPU process), you must open-source and distribute your project freely under the same AGPL terms. Alternatively a commercial closed-source license is available. More details on our website.

Partner with us

We believe Hatch.js is a great platform for building social web applications. We are actively seeking partnerships with companies to build commercial products for any purpose on top of the platform. Contact us for more information.

Dependencies

Hatch.js requires Node 0.8+, Redis 2.6+ and imagemagick to be installed. Bower is also required to install client-side dependencies.

npm install -g bower

Installation

Use Hatch.js as an npm. Please see the examples for how to use Hatch.js in this way:

npm install hatchjs

Or standalone:

git clone https://github.com/inventures/hatchjs

Then:

npm install
bower install

Running Hatch.js

Like most node apps, Hatch.js listens by default on port 3000. We recommend using Nginx or similar to proxy requests via port 80 or 443.

node server

Running in production mode is strongly recommended for live sites. Assets are automatically combined, minified and strongly cached, view templates are pre-compiled resulting in better performance all round:

NODE_ENV=production node .
NODE_ENV=production CLUSTER=1 node .

Visit http://hostname:3000 to get started with your first group.

By default Hatch.js connects to Redis DB 0 on 127.0.0.1. You can change this by modifying ./config/database.js.

Package Structure Overview

Exports application server builder function. This is main entry point to application.

Hatch.js is express app structurized with Compound MVC, so this is standard directory structure for MVC app. It contains core models, controllers, views, helpers, assets and mailers.

Hatch.js models define all of the business object classes within the application. These can be extended by placing model class files within the /app/models folder of your app or your app's modules.

Models are accessed via the application context as follows:

c.ModelName.functionName();

E.g.

c.Content.all({ where: { groupId: 1 }}, function (err, posts) { 
	// do some stuff with the results
});

Hatch.js uses the RedisHQ driver which is part of JugglingDB. Redis may seem like an unusual choice for a primary database. It was chosen because the requirements of Hatch.js and derived apps are usually fairly data-light + traffic-heavy. Redis is an ideal choice because of it's lightning quick performance. Due to the asynchronous nature of Node.js + Redis and the optimised implementation of MULTI batching within the RedisHQ driver, multiple duplicate requests within the same i/o callback context are also able to share queries and results-sets meaning that performance and scalability of the solution is significantly improved over what is achievable using a more conventional database such as MongoDB or MySQL. On rudimentary hardware (e.g. a standard 1 thread AWS micro instance), Hatch.js is easily able to cope with significant levels of traffic and a large number of concurrent users. We estimate the base performance is roughly 20-30x that of platforms such as Wordpress.

The Hatch.js database schema is self-explanatory and can be found here.

Hatch core. Contains API and core implementation. Hatch APIs are accessible via the context in code as follows:

c.compound.hatch.apiName.functionName();

Or globally:

var compound = require('compound');
compound.hatch.apiName.functionName();

The available APIs, documentation and their functions can be found here: ./lib/api

Built-in modules for Hatch.js. Each module is separate application mounted to root application on /do/{moduleName} route.

Modules can modify the existing functionality or models or provide new features. They can be enabled or disabled on a per-group or per-application basis via the management area of each group.

Modules documentation can be found within the README.

Before running tests ensure you have installed dev dependencies:

npm install
bower install

Use make test command to run all tests. While debugging / TDD use make testing command which is the same as previous, but with --watch flag. For verbose output run make test-verbose.

Every piece of code should be tested (ideally). Make sure tests included in pull request.

Bitdeli Badge GA Badge

hatchjs's People

Contributors

1602 avatar marcusgreenwood 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hatchjs's Issues

Tried to set a wildcard URL... now I get 404

I feel like not a very smart man.

Anyway, I tried to set the URL for my group to https://*.blahblah.net and now all I get is a 404 no matter what I do. I have no idea how to go back. It's all 404's now. It's listening on 3000 and nginx is acting as reverse proxy on 80 and 443.

Looking back now I cringe, but I've no idea where to go from here. Please help me recover my website, thank you.

Error on [node server]

I installed everything and all the install process went fine. And when I did [node server] I got this error:

connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
Hatch server listening on 0.0.0.0:3000 within development environment
uncaughtException
uncaughtException: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED
at RedisClient.on_error (/Users/laminekane/node_modules/hatchjs/node_modules/jugglingdb-redis-hq/node_modules/redis/index.js:148:24)
at Socket. (/Users/laminekane/node_modules/hatchjs/node_modules/jugglingdb-redis-hq/node_modules/redis/index.js:83:14)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:440:14
at process._tickCallback (node.js:415:13)
Notify error
uncaughtException: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED
at RedisClient.on_error (/Users/laminekane/node_modules/hatchjs/node_modules/jugglingdb-redis-hq/node_modules/redis/index.js:148:24)
at Socket. (/Users/laminekane/node_modules/hatchjs/node_modules/jugglingdb-redis-hq/node_modules/redis/index.js:83:14)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:440:14
at process._tickCallback (node.js:415:13)

What am I doing wrong? Thanks in advance

Database configuration doesn't work

After looking how a redis connection is setup on environment.js, I've tried to the following change to configure a different host for redis:

diff --git a/config/database.js b/config/database.js
index e0003f1..9d70faa 100644
--- a/config/database.js
+++ b/config/database.js
@@ -1,4 +1,4 @@
-module.exports = 
+module.exports =
   { "development":
     { "driver":   "redis-hq"
     , "prefix":   "dev"
@@ -6,7 +6,7 @@ module.exports =
     , "fulltext": {
         driver: 'reds'
     }
-    , "session": {database: 10}
+    , "session": {database: 10, host: "redis"}
     }
   , "test":
     { "driver":   "redis-hq"

but I still get a connection error with

UncaughtException: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED

How do I configure a different host? The docs mention that I need to change that file.

Unhelpful failure when wrong version of redis is installed

The default redis installation in ubuntu 12.04 is 2.2. If I was paying closer attention to the requirements I would have noticed that hatch requires 2.6+. Instead I got this error message when trying to visit the root:

Error: zrange lua script is not loaded
at RedisHQ.all (/home/chrisf/dev/hatchjs/node_modules/jugglingdb-redis-hq/lib/adapter.js:839:19)
at Function.all (/home/chrisf/dev/hatchjs/node_modules/jugglingdb/lib/model.js:487:25)
at Function.findOne (/home/chrisf/dev/hatchjs/node_modules/jugglingdb/lib/model.js:602:10)
at loadPage (/home/chrisf/dev/hatchjs/lib/middleware.js:116:26)
at async.parallel.req.member (/home/chrisf/dev/hatchjs/lib/middleware.js:54:17)
at /home/chrisf/dev/hatchjs/node_modules/async/lib/async.js:511:21
at /home/chrisf/dev/hatchjs/node_modules/async/lib/async.js:227:13
at /home/chrisf/dev/hatchjs/node_modules/async/lib/async.js:111:13
at Array.forEach (native)
at _each (/home/chrisf/dev/hatchjs/node_modules/async/lib/async.js:32:24)
at async.each (/home/chrisf/dev/hatchjs/node_modules/async/lib/async.js:110:9)
at _asyncMap (/home/chrisf/dev/hatchjs/node_modules/async/lib/async.js:226:9)
at Object.map (/home/chrisf/dev/hatchjs/node_modules/async/lib/async.js:204:23)
at _parallel (/home/chrisf/dev/hatchjs/node_modules/async/lib/async.js:509:20)
at Object.async.parallel (/home/chrisf/dev/hatchjs/node_modules/async/lib/async.js:539:9)
at Object.hatchMiddleware as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:168:78)
at end (/home/chrisf/dev/hatchjs/lib/middleware.js:35:13)
at Object.rewriteMiddleware as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.handle (/home/chrisf/dev/hatchjs/lib/middleware.js:294:9)
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.csrfProtection as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.module.exports as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.methodOverride as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.session as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.cookieParser as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.multipart as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.json as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.urlencoded as handle
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at SendStream.error (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/connect/node_modules/serve-static/index.js:86:37)
at SendStream.EventEmitter.emit (events.js:95:17)
at SendStream.error (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/send/lib/send.js:172:51)
at SendStream.onStatError (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/send/lib/send.js:285:48)
at next (/home/chrisf/dev/hatchjs/node_modules/express/node_modules/send/lib/send.js:484:28)
at /home/chrisf/dev/hatchjs/node_modules/express/node_modules/send/lib/send.js:492:23
at Object.oncomplete (fs.js:107:15)

Obviously this is a feature request but it would be nice to have a failure on startup that gives a more reasonable error.

What's the best/safest way to upgrade?

Hello! I have an hatch running from the old git repository and would like to upgrade and stay current. What is the best/safest way to do this, and to upgrade in the future as new commits are made?

Missing file - public/javascripts/i18n.js

New install - server crashes saying that public/javascripts/i18n.js does not exist

I got it running by copying the file from the old repo, but just letting ya know!

Npm-cli.js error while installing in on window 7

Detail error

npm http 304 https://registry.npmjs.org/http-signature
npm http 304 https://registry.npmjs.org/node-uuid
npm ERR! Error: ENOENT, lstat 'C:\Users\ajay\AppData\Local\Temp\npm-4216-3VuIyqA
Z\1396539220032-0.5700292692054063\package\test\data\huge.pdf'
npm ERR! If you need help, you may report this log at:
npm ERR! http://github.com/isaacs/npm/issues
npm ERR! or email it to:
npm ERR! [email protected]

npm ERR! System Windows_NT 6.1.7600
npm ERR! command "C:\Program Files\nodejs\node.exe" "C:\Program Files\nod
ejs\node_modules\npm\bin\npm-cli.js" "install"
npm ERR! cwd C:\article\hatchjs
npm ERR! node -v v0.10.18
npm ERR! npm -v 1.3.8
npm ERR! path C:\Users\ajay\AppData\Local\Temp\npm-4216-3VuIyqAZ\1396539220032-0
.5700292692054063\package\test\data\huge.pdf
npm ERR! fstream_path C:\Users\ajay\AppData\Local\Temp\npm-4216-3VuIyqAZ\1396539
220032-0.5700292692054063\package\test\data\huge.pdf
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack C:\Program Files\nodejs\node_modules\npm\node_modules\fst
ream\lib\writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm http 304 https://registry.npmjs.org/json-stringify-safe
npm ERR! Error: ENOENT, lstat 'C:\Users\ajay\AppData\Local\Temp\npm-4216-3VuIyqA
Z\1396539250221-0.3566357975360006\package\test\fixture\http\encoding\pf1y5.png.
http'
npm ERR! If you need help, you may report this log at:
npm ERR! http://github.com/isaacs/npm/issues
npm ERR! or email it to:
npm ERR! [email protected]

npm ERR! System Windows_NT 6.1.7600
npm ERR! command "C:\Program Files\nodejs\node.exe" "C:\Program Files\nod
ejs\node_modules\npm\bin\npm-cli.js" "install"
npm ERR! cwd C:\article\hatchjs
npm ERR! node -v v0.10.18
npm ERR! npm -v 1.3.8
npm ERR! path C:\Users\ajay\AppData\Local\Temp\npm-4216-3VuIyqAZ\1396539250221-0
.3566357975360006\package\test\fixture\http\encoding\pf1y5.png.http
npm ERR! fstream_path C:\Users\ajay\AppData\Local\Temp\npm-4216-3VuIyqAZ\1396539
250221-0.3566357975360006\package\test\fixture\http\encoding\pf1y5.png.http
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack C:\Program Files\nodejs\node_modules\npm\node_modules\fst
ream\lib\writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)

Session Problem of New Version Express?

When I try to install current version hatch,js, I got following error after submit the admin registration.

uncaughtException: Cannot set property ‘userId’ of undefined
at done (/Users/xxxx//hatchjs/hatch_modules/setup/lib/controller.js:92:28)

Project Dead

After 2 full days of mehs and moans, I gave up.
This project haven't updated for years and the depenedencies are all broken.
I managed to overcome hiredis compiling and some other dependency issues, and finally got through installation phace. But the app keeps crashing for god knows why reasons and I can not find much usefull information over the internet.

Any one who come and see this in the future, for the sake of yourself, leave. This thing is not working any more, and I guess you came here because you've just read an outdated blog post.

Broken Dependencies

It would appear that hatch.js does not work with the latest version of file-finder.

Stylesheet: not found. Setting default theme
uncaughtException
uncaughtException: Cannot read property 'contents' of undefined
  at Object.Parser.parse (/home/james/node_modules/hatchjs/node_modules/less/lib/less/parser/parser.js:117:20)
  at /home/james/node_modules/hatchjs/app/models/Stylesheet.js:118:20
  at /home/james/node_modules/hatchjs/node_modules/async/lib/async.js:119:25
  at /home/james/node_modules/hatchjs/node_modules/async/lib/async.js:24:16
  at /home/james/node_modules/hatchjs/app/models/Stylesheet.js:104:21
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:81:16
  at FSReqWrap.oncomplete (fs.js:95:15)

Notify error
uncaughtException: Cannot read property 'contents' of undefined
  at Object.Parser.parse (/home/james/node_modules/hatchjs/node_modules/less/lib/less/parser/parser.js:117:20)
  at /home/james/node_modules/hatchjs/app/models/Stylesheet.js:118:20
  at /home/james/node_modules/hatchjs/node_modules/async/lib/async.js:119:25
  at /home/james/node_modules/hatchjs/node_modules/async/lib/async.js:24:16
  at /home/james/node_modules/hatchjs/app/models/Stylesheet.js:104:21
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:71:17
  at /home/james/node_modules/hatchjs/node_modules/file-finder/file-finder.js:81:16
  at FSReqWrap.oncomplete (fs.js:95:15)

Sharing objects between controllers.

How is this done? Is there anything other than anti-patterns that I can use to do this(globals)? I've looked at the 'c' param in one of my controllers and i've tried using things like 'controllerExtensions' etc to get something injected through that but no luck at all. I'm after something simple like sharing a log object and I feel like i'm hitting my head against a brick wall. Any ideas? Thanks!

Missing javascript

Bower install does not grab i18n.js. Hatch.js runs after a manual addition of this script, but until it is added hatch cannot run.

running in production mode fails if assets directory doesn't exist

The co-assets-compiler used in production mode seems to require the asset directory to exist before starting up the server.

I get the following error when it doesn't exist:

$ NODE_ENV=production node .
connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
AssetsCompiler Precompiling assets: coffee, styl
Hatch server listening on premium:3000 within production environment
uncaughtException
uncaughtException: ENOENT, readdir '/home/chrisf/dev/hatchjs/app/assets'
Notify error
uncaughtException: ENOENT, readdir '/home/chrisf/dev/hatchjs/app/assets'

uncaughtException: Cannot read property 'contents' of undefined at Object.Parser.parse

GET /do/stylesheet/css/0 controller: stylesheet action: css
Params: {"version":"0"}
>>> perform css
MULTI
  GET dev/User:1
  EVALSHA [Lua: ZRANGE+MGET] 0 z:dev/Page:url:localhost:3000 0 0 dev/Page
EXEC [41 ms]
EVALSHA [Lua: ZRANGE+MGET] 0 z:dev/Stylesheet:groupId:1 0 0 dev/Stylesheet [0 ms]
Stylesheet: not found. Setting default theme
uncaughtException
uncaughtException: Cannot read property 'contents' of undefined
  at Object.Parser.parse (/home/user/Workspace/NodeProjects/Hatch/node_modules/less/lib/less/parser/parser.js:108:20)
  at /home/user/Workspace/NodeProjects/Hatch/app/models/Stylesheet.js:118:20
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/async/lib/async.js:119:25
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/async/lib/async.js:24:16
  at /home/user/Workspace/NodeProjects/Hatch/app/models/Stylesheet.js:104:21
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:81:16
  at Object.oncomplete (fs.js:107:15)

Notify error
uncaughtException: Cannot read property 'contents' of undefined
  at Object.Parser.parse (/home/user/Workspace/NodeProjects/Hatch/node_modules/less/lib/less/parser/parser.js:108:20)
  at /home/user/Workspace/NodeProjects/Hatch/app/models/Stylesheet.js:118:20
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/async/lib/async.js:119:25
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/async/lib/async.js:24:16
  at /home/user/Workspace/NodeProjects/Hatch/app/models/Stylesheet.js:104:21
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:71:17
  at /home/user/Workspace/NodeProjects/Hatch/node_modules/file-finder/file-finder.js:81:16
  at Object.oncomplete (fs.js:107:15)

user@system:~/Workspace/NodeProjects/Hatch$ 

Can't edit blog posts - "uncaughtException: Cannot call method 'toPublicObject' of null"

I am unable to edit blog posts. Posting a blog works, but when I go to edit it and then click publish or save draft, nothing happens, and the changes are not saved.

This error shows up on the browser console when opening a blog post for editing (no node errors in the terminal when the page is loaded):

Uncaught ReferenceError: qq is not defined edit:351
(anonymous function) edit:351
c cache_7c867506c58445d3a6a7bc5e298c2460620ddc8e.js:4
p.fireWith cache_7c867506c58445d3a6a7bc5e298c2460620ddc8e.js:4
b.extend.ready cache_7c867506c58445d3a6a7bc5e298c2460620ddc8e.js:4
H cache_7c867506c58445d3a6a7bc5e298c2460620ddc8e.js:4

When I click publish or save draft, this error pops up in the terminal and crashes node when in development mode (no browser console errors though)

EVALSHA [Lua: ZREVRANGE+MGET] 0 z:dev/Tag:groupIdByType:1-Content 0 -1 dev/Tag [0 ms]
GET dev/Content:7 [0 ms]
GET dev/User:undefined [0 ms]
uncaughtException
uncaughtException: Cannot call method 'toPublicObject' of null

There was of course lots more errors after that, but this is the first one that triggered them all (can post more if this isn't enough info)

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.