Giter Site home page Giter Site logo

angularfire-seed's Introduction

Status: Archived

This repository has been archived and is no longer maintained.

status: inactive

angularfire-seed — the seed for Angular+Firebase apps

Disclaimer: This project is for legacy Firebase apps (version < 2.0). If you created an app using console.firebase.google.com this project will not work for you. Please see the main AngularFire repo for documentation on setting up an application with the new setup.

Build Status

This derivative of angular-seed is an application skeleton for a typical AngularFire web app. You can use it to quickly bootstrap your Angular + Firebase projects.

The seed is preconfigured to install the Angular framework, Firebase, AngularFire, and a bundle of development and testing tools.

The seed app doesn't do much, but does demonstrate the basics of Angular + Firebase development, including:

  • binding synchronized objects
  • binding synchronized arrays
  • authentication
  • route security
  • basic account management

How to use angularfire-seed

Other than one additional configuration step (specifying your Firebase database URL), this setup is nearly identical to angular-seed.

Prerequisites

You need git to clone the angularfire-seed repository. You can get it from http://git-scm.com/.

We also use a number of node.js tools to initialize and test angularfire-seed. You must have node.js and its package manager (npm) installed. You can get them from http://nodejs.org/.

Clone angularfire-seed

Clone the angularfire-seed repository using git:

git clone https://github.com/firebase/angularfire-seed.git
cd angularfire-seed

Install Dependencies

We have two kinds of dependencies in this project: tools and angular framework code. The tools help us manage and test the application.

We have preconfigured npm to automatically run bower so we can simply do:

npm install

Behind the scenes this will also call bower install. You should find that you have two new folders in your project.

  • node_modules - contains the npm packages for the tools we need
  • app/bower_components - contains the angular framework files

Note that the bower_components folder would normally be installed in the root folder but angularfire-seed changes this location through the .bowerrc file. Putting it in the app folder makes it easier to serve the files by a webserver.

Configure the Application

  1. Open app/config.js and set the value of FBURL constant to your Firebase database URL
  2. Go to your Firebase dashboard and enable email/password authentication under the Auth tab
  3. Copy/paste the contents of security-rules.json into your Security tab, which is also under your Firebase dashboard.

Run the Application

We have preconfigured the project with a simple development web server. The simplest way to start this server is:

npm start

Now browse to the app at http://localhost:8000/app/index.html.

Directory Layout

app/                  --> all of the files to be used in production
  app.js              --> application
  config.js           --> where you configure Firebase and auth options
  app.css             --> default stylesheet
  index.html          --> app layout file (the main html template file of the app)
  index-async.html    --> just like index.html, but loads js files asynchronously
  components/         --> javascript files
    appversion/       --> The app-version directive
    auth/             --> A wrapper on the `$firebaseAuth` service
    firebase.utils/   --> Some convenience methods for dealing with Firebase event callbacks and refs
    ngcloak/          --> A decorator on the ngCloak directive so that it works with auth
    reverse/          --> A filter to reverse order of arrays
    security/         --> route-based security tools (adds the $routeProvider.whenAuthenticated() method and redirects)
  account/            --> the account view
  chat/               --> the chat view
  home/               --> the default view
  login/              --> login screen
e2e-tests/            --> protractor end-to-end tests
test/lib/             --> utilities and mocks for test units

Testing

There are two kinds of tests in the angularfire-seed application: Unit tests and End to End tests.

Running Unit Tests

The angularfire-seed app comes preconfigured with unit tests. These are written in Jasmine, which we run with the Karma Test Runner. We provide a Karma configuration file to run them.

  • the configuration is found at test/karma.conf.js
  • the unit tests are found in test/unit/

The easiest way to run the unit tests is to use the supplied npm script:

npm test

This script will start the Karma test runner to execute the unit tests. Moreover, Karma will sit and watch the source and test files for changes and then re-run the tests whenever any of them change. This is the recommended strategy; if your unit tests are being run every time you save a file then you receive instant feedback on any changes that break the expected code functionality.

You can also ask Karma to do a single run of the tests and then exit. This is useful if you want to check that a particular version of the code is operating as expected. The project contains a predefined script to do this:

npm run test-single-run

End to end testing

The angularfire-seed app comes with end-to-end tests, again written in Jasmine. These tests are run with the Protractor End-to-End test runner. It uses native events and has special features for Angular applications.

  • the configuration is found at e2e-tests/protractor-conf.js
  • the end-to-end tests are found in e2e-tests/scenarios.js

Protractor simulates interaction with our web app and verifies that the application responds correctly. Therefore, our web server needs to be serving up the application, so that Protractor can interact with it.

npm start

In addition, since Protractor is built upon WebDriver we need to install this. The angularfire-seed project comes with a predefined script to do this:

npm run update-webdriver

This will download and install the latest version of the stand-alone WebDriver tool.

Once you have ensured that the development web server hosting our application is up and running and WebDriver is updated, you can run the end-to-end tests using the supplied npm script:

npm run protractor

This script will execute the end-to-end tests against the application being hosted on the development server.

Updating Dependencies

Previously we recommended that you merge in changes to angularfire-seed into your own fork of the project. Now that the angular framework library code and tools are acquired through package managers (npm and bower) you can use these tools instead to update the dependencies.

You can update the tool dependencies by running:

npm update

This will find the latest versions that match the version ranges specified in the package.json file.

You can update the Angular, Firebase, and AngularFire dependencies by running:

bower update

This will find the latest versions that match the version ranges specified in the bower.json file.

Loading AngularFire Asynchronously

The angularfire-seed project supports loading the framework and application scripts asynchronously. The special index-async.html is designed to support this style of loading. For it to work you must inject a piece of Angular JavaScript into the HTML page. The project has a predefined script to help do this.

npm run update-index-async

This will copy the contents of the angular-loader.js library file into the index-async.html page. You can run this every time you update the version of Angular that you are using.

Serving the Application Files

While Angular is client-side-only technology and it's possible to create Angular webapps that don't require a backend server at all, we recommend serving the project files using a local webserver during development to avoid issues with security restrictions (sandbox) in browsers. The sandbox implementation varies between browsers, but quite often prevents things like cookies, xhr, etc to function properly when an html page is opened via file:// scheme instead of http://.

Running the App during Development

The angularfire-seed project comes preconfigured with a local development webserver. It is a node.js tool called http-server. You can start this webserver with npm start but you may choose to install the tool globally:

sudo npm install -g http-server

Then you can start your own development web server to serve static files from a folder by running:

http-server

Alternatively, you can choose to configure your own webserver, such as apache or nginx. Just configure your server to serve the files under the app/ directory.

Running the App in Production

This really depends on how complex your app is and the overall infrastructure of your system, but the general rule is that all you need in production are all the files under the app/ directory. Everything else should be omitted.

Angular/Firebase apps are really just a bunch of static html, css and js files that just need to be hosted somewhere they can be accessed by browsers.

Continuous Integration

Travis CI

Travis CI is a continuous integration service, which can monitor GitHub for new commits to your repository and execute scripts such as building the app or running tests. The angularfire-seed project contains a Travis configuration file, .travis.yml, which will cause Travis to run your tests when you push to GitHub.

You will need to enable the integration between Travis and GitHub. See the Travis website for more instruction on how to do this.

CloudBees

CloudBees have provided a CI/deployment setup:

If you run this, you will get a cloned version of this repo to start working on in a private git repo, along with a CI service (in Jenkins) hosted that will run unit and end to end tests in both Firefox and Chrome.

Contact

For more information on Firebase and AngularFire, check out https://firebase.com/docs/web/bindings/angular

For more information on AngularJS please check out http://angularjs.org/

angularfire-seed's People

Contributors

davideast avatar emav avatar ht290 avatar jamesdaniels avatar jamestamplin avatar katowulf avatar kjhughes avatar robotnoises avatar samtstern avatar startupandrew avatar stefek99 avatar tg7z avatar that-david-guy avatar tylermcginnis 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

angularfire-seed's Issues

Testing $loaded and other methods on fbutil.syncArray

I'm a little confused how to set up a spy and mock the fbutil.syncArray prototypes using your fbutilStub object.

Right now I'm just adding this line to mock out a returned array of [1,2,3]:

obj.syncArray.andCallFake(function() { return [1,2,3]; });

quick reference of the original stub you wrote:
function fbutilStub() {
var obj = jasmine.createSpyObj('fbutil', ['syncObject', 'syncArray', 'ref']);
obj.$$ref = new Firebase();
obj.syncObject.andCallFake(function() { return {}; });
obj.syncArray.andCallFake(function() { return []; });
obj.ref.andCallFake(function() { return obj.$$ref; });
fbutilStub.$$last = obj;
return obj;
}

i'm new to jasmine and firebase so i wasnt sure if i should add those as prototypes spys or what. A quick example would go a lonnnng way.

Your tests are great on the simplelogin so I was hoping you could please point me in the right direction because i think the syncArray method will be the most tested part of firebase outside of simplelogin.

ngRoute in app.js?

I'm new to angular and angularFire. Have a hard time tou put it all together!

Shoudn't
ngRoute
be used in the app.js?

This demos I find here is using an old style to solve the routing, right?

How does the ngRoute approach affect to angularFireAuth?

Add Firebase Hosting

Add a default firebase.json to the root which deploys the app directory. Also update the docs to explain how to deploy their Firebase to their own firebaseapp.com subdomain.

Mimicking account activation

i would like to mimick "account activation process" using "sendPasswordResetEmail" method on angularfire seed. The steps that i'd like to do are:
First, create a account using scope.email and random generated password (ex: $scope.pass=(Math.floor(Math.random() * Math.pow(16,5)).toString(16))).
Second, send "password reset email" and give user a hint to check the email for his/her password.

Finally user can login and change the password.

I have been trying to figure out how to tackle it on the context of angularfire-seed but no luck so far. Any idea would be appreciated. Thank you.

Firebase warning on logout

Hi I see a warning on logout from account section.
The warning is only displayed when the ngShowAuth or ngHideAuth directives is used, for example in partial home.html.

If this section does not charge the warning never displayed. Otherwise if I login, then go to home section, then go account and logout. The warning is displayed.

I think the problem is related to the "watch" method in the "simpleLogin" factory.

Warning:
firebase-angular-seed

Related "app/js/directives.js":
directive firebase

Demo of seed

Perhaps more people that me would appreciate a demo of the seed? I am not using the entire seed, just bits and pieces.

Unnecessary/confusing param in partials/login.html

Unless I'm reading the Login controller wrong, 'confirm' is an inappropriate argument for the createAccount() method. May not make a difference, but it's potentially confusing to those of us who are trying to figure out what's going on in the seed app.

<button ng-cloak ng-show="createMode" ng-click="createAccount(email, pass, confirm)">Create Account</button>

In fact, that method doesn't seem to need any arguments, now that I look at it again.

Can't inject userProvider with ng-include

Moved from #50 as @malcium's question is similar but not the same, and we don't want to have troubleshooting discussions hijacking resolved issues.

Ok, sorry for the late response.

I'm tying to load account.html as a template from within home.html using ng-include. To do this, I put the following function in 'HomeCtrl' in controllers.js:

$scope.accountTemplate = function(){
$scope.template = {name: 'account.html', url: 'partials/account.html'};
};

And the ng-include like so in home.html:

And I surround everything in account.html with a

And just for good measure in routes.js (even though I don't think it applies here because I'm using an ng-include) I changed it to this:

.constant('ROUTES', {
'/home': {
templateUrl: 'partials/home.html',
controller: 'HomeCtrl',
authRequired: true,
resolve: {
// forces the page to wait for this promise to resolve before controller is loaded
// the controller can then inject user as a dependency. This could also be done
// in the controller, but this makes things cleaner (controller doesn't need to worry
// about auth status or timing of displaying its UI components)
user: ['simpleLogin', function(simpleLogin) {
return simpleLogin.getUser();
}]
}
},

'/chat': {
templateUrl: 'partials/chat.html',
controller: 'ChatCtrl'
},

'/login': {
templateUrl: 'partials/login.html',
controller: 'LoginCtrl'
},

'/account': {
templateUrl: 'partials/account.html',
controller: 'AccountCtrl',
// require user to be logged in to view this route
// the whenAuthenticated method below will resolve the current user
// before this controller loads and redirect if necessary
authRequired: true,
resolve: {
// forces the page to wait for this promise to resolve before controller is loaded
// the controller can then inject user as a dependency. This could also be done
// in the controller, but this makes things cleaner (controller doesn't need to worry
// about auth status or timing of displaying its UI components)
user: ['simpleLogin', function(simpleLogin) {
return simpleLogin.getUser();
}]
}
}
})

And in AccountCrl in controllers.js, I modified it slightly to this (I'm not sure where to try the function that you guys have mentioned in here):

.controller('AccountCtrl', ['$scope', 'simpleLogin', 'fbutil', '$location', 'user', 'FBURL', function($scope, simpleLogin, fbutil, $location, user, FBURL) {

$scope.user = user;
$scope.FBURL = FBURL;
// create a 3-way binding with the user profile object in Firebase
var profile = fbutil.syncObject(['users', user.uid]);
profile.$bindTo($scope, 'profile');

// expose logout function to scope
$scope.logout = function() {
profile.$destroy();
simpleLogin.logout();
$location.path('/login');
};

$scope.changePassword = function(pass, confirm, newPass) {
resetMessages();
if( !pass || !confirm || !newPass ) {
$scope.err = 'Please fill in all password fields';
}
else if( newPass !== confirm ) {
$scope.err = 'New pass and confirm do not match';
}
else {
simpleLogin.changePassword(profile.email, pass, newPass)
.then(function() {
$scope.msg = 'Password changed';
}, function(err) {
$scope.err = err;
})
}
};

$scope.clear = resetMessages;

$scope.changeEmail = function(pass, newEmail) {
resetMessages();
profile.$destroy();
simpleLogin.changeEmail(pass, newEmail)
.then(function(user) {
profile = fbutil.syncObject(['users', user.uid]);
profile.$bindTo($scope, 'profile');
$scope.emailmsg = 'Email changed';
}, function(err) {
$scope.emailerr = err;
});
};

function resetMessages() {
$scope.err = null;
$scope.msg = null;
$scope.emailerr = null;
$scope.emailmsg = null;
}
}
]);

Any ideas for things that I could try? Thanks for your help!

Cannot create new accounts

The auth.$createUser api calls for the email and password as separate string inputs. Looks like they're currently being sent as object properties. This is preventing new accounts from being created.

How to inject userProvider?

Hey I would like to know why this example fails

.controller("ChatCtrl", [
"$scope"
"user"
"messageList"
($scope, user, messageList) ->
$scope.messages = messageList
$scope.addMessage = (newMessage) ->
$scope.messages.$add
text: newMessage
owner: user.uid
])

Why is it possible for you to inject user into your controllers but if I would like to attach the user to any other controller it fails with:

Error: [$injector:unpr] Unknown provider: userProvider <- user
http://errors.angularjs.org/1.2.23/$injector/unpr?p0=userProvider%20%3C-%20user

Any help would be greatly appreciated and thanks for the project it has been very helpful so far.
Kind regards,
Sven

change email fails in angularFire 0.7.1 (investigate for next release)

I cloned the angularFire-seed project and subbed in the latest versions of
Firebase (1.0.15), SimpleLogin (1.4.1), and AngularFire (0.7.1)

I noticed one thing that doesn't 100% work after doing that, which is the
"change e-mail" functionality. Particularly, when you change the e-mail,
the old "profile" (data from /users/ doesn't get replaced. The old
"profile" data is just deleted). The e-mail does successfully get updated
though.

This does work 100% with the versions of Firebase/SimpleLogin (v0) and
AngularFire (0.6.0) included in the seed project.

Update angularFire-seed e2e tests to test login status

The new e2e tests in protractor need to test authentication and redirects. Also, the login screen needs its tests converted to protractor. They have been tested manually for the 0.8.0 release and are all functional.

For illustration purposes, we should get a couple e2e tests that deal with authentication in to show best practices in protractor. We should not, since this is a seed and every line of code added means more code devs have to grok and/or remove later as they build, try to cover every case--expect that devs will change this code significantly when they build on top of it.

2nd seed for Heroku/Dokku deployment

Just a suggestion. Could be helpful to have another similar seed project with just a basic express server setup so people could easily deploy their angularfire apps on Dokku or Heroku.

Move loginService to its own module

Currently in services, creates a bit of bloat and should be simpler for devs to orient and understand the layout if this is more plugin-oriented.

Travis integration errors on default settings

This error seems to occur on a default install of angular seed:

npm ERR! Error: ENOENT, chmod '/home/travis/build/.../angularfire-seed/node_modules/requirejs/bin/r.js'

screenshot 2014-08-29 12 10 03

Not sure if it is a Travis problem, Angularfire-seed problem or simply a version incompatibility.

Note: adding an ".npmignore" file does not solve this problem.

Could use Third-Party Auth Provider example

It'd be great to see an example of how to use a third party to authenticate users, as an alternative to the email/password option.

I would be even more interesting to see the ability to tie multiple third-party accounts to a user, thereby allowing multiple authentication options to a user. That may be beyond the scope of this example, though.

Using grunt with mod rewrite

Currently we use node sripts/web-server.js as starting point, but what if I want to use grunt and mod rewrite with angularjs html5mode enabled?

I want the site's url without showing the /app path and go directly to the first otherwise route.

What can I do? any example for it?

Cannot bower install

The new dependencies list calls for 0.9.1 angularfire and ~0.8.0 for mockfirebase.

Both projects seem have 0.9.0 and 0.7.0 as their latest versions, respectively.

0.9.0 and ~0.7.0 work as dependencies and bower install executes successfully.

Change the router to ui-router to better fit with hybrid app development

The Ionic Framework, which is targeting Hybrid App development, is using ui-router and not ngRoute. It would be helpful if the seed was updated with this router, since it will fit the needs better of Ionic users. Ionic + Angularfire = SUPER.

So example, instead of $routeProvider, use $stateProvider and $urlRouterProvider. See also these Stackoverflow threads:

http://stackoverflow.com/questions/27919135/can-routeprovider-be-replaced-by-stateprovider-or-vice-versa-and-how

http://stackoverflow.com/questions/27971565/how-to-replace-routeprovider-with-stateprovider

http://stackoverflow.com/questions/27967611/can-the-ionic-function-ion-nav-view-ui-router-work-with-ngroute

Add Travis integration and build badges

Let's get that build badge and Travis CI going for this repo. I don't think this will take a lot of work, especially since the .travis.yml file is already written.

Issue with bower install

Hi Guys,

When I cloned this package and ran "npm install" as stated in the readme, but it keeps failing on the postinstall step:

npm ERR! [email protected] postinstall: `bower install`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] postinstall script.
npm ERR! This is most likely a problem with the angularfire-seed package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     bower install
npm ERR! You can get their info via:
npm ERR!     npm owner ls angularfire-seed
npm ERR! There is likely additional logging output above.
npm ERR! System Darwin 13.4.0
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/Jesse/Sites/angularfire-seed
npm ERR! node -v v0.10.35
npm ERR! npm -v 1.4.28
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/Jesse/Sites/angularfire-seed/npm-debug.log
npm ERR! not ok code 0

Any one any idea what this could be?

New WIP using GulpJS

I'm not sure if anyone is interested due to being more opinionated, but I have started a branch for a version of the angularFire-seed using GulpJS, Browserify, and Bower here:

https://github.com/zgohr/angularFire-seed/tree/grunt-browserify-wip

Tests aren't currently set up to use gulp yet, which means they won't work due to browserify incompatibility. This is still a work in progress. Would love to see if there is any interest.

revisiting account page, removes "simplelogin:xxxx" user from firebase

Hi,
I got this really weird issue and no idea where to look.
I have copied all the controller and services into a yo angular project, and the registering/loging is working fine.
It nicely created the user and the profile, also redirects to the account page where i see the name + email.
but after browsing to one or two other pages withing the angular project on returning to the account page.. the data in users/simplelogin:xxxx gets removed from the firebase.
It see it disappear from the dashboard, turning red.. and gone it is.

any idea why (and where) this is happening?

thankx
arjan

CDNs out of date needs updating

Simple login script link currently references the old CDN:

<script src="https://cdn.firebase.com/v0/firebase-simple-login.js"></script>

This causes external provider login, such as with google, to return the following error:

Error: FirebaseSimpleLogin.login() failed: unrecognized authentication provider

The CDN script link should be updated as follows:

<script src="https://cdn.firebase.com/1.6.2/firebase-simple-login.js"></script>

I didn't have a problem with any other libraries, but here are the other current firebase references just incase:

<script src="https://cdn.firebase.com/js/client/1.0.18/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/0.7.1/angularfire.js"></script>

Maybe the seed should start implementing bower with grunt and grunt-wiredep to wire up the up to date dependencies to index.html automatically. It seems like this might be the cause of a few other issues that are posted, so I am going to start adding this to the seed and send a pull request in a few days.

AngularFire version is ahead

Even though it appears to have already been published, AngularFire is back down to v0.9.0, which makes bower install fail.

However, this means that previous changes should be regressed. See my note here: efa895e

Cloak Decorator still blips

@katowulf It would seem simpleLogin.getUser() doesn't do the job for waiting properly to stop the screen blip.
I originally seen your strategy in a gist. I have added in my code simpleLogin.wait() to emulate what you first had done in the gist and it works. Not sure how the getUser() would work because it would return right away as far as my understanding.
I've been known to be wrong though. 😉

Include license

Thank you for making this, its a fantastic seed to get an angularfire app started.

Would you be willing to include an open source license?

Cheers

Logging state bug

When a user is not logged in, auth is {user: null}, so should use auth.user to indicate a user is logged in or not. Related files : app/index.html; app/partials/home.html

$firebaseSimpleLogin:logout event not triggered

I attempted to use the routeSecurity module, but tweaked it to work with ui.router here: https://github.com/sudostack/iggy/blob/master/app/components/firebase/uiRouteSecurity.js

Each time I log into my the application, I'm logging some message to console when listening on $rootScope for the $firebaseSimpleLogin:login event.

$rootScope.$on('$firebaseSimpleLogin:login', function(evt, user) {
  console.log('login event fired');
  $rootScope.auth.user = user;
});

However, I'm doing the same thing for log out

$rootScope.$on('$firebaseSimpleLogin:logout', function(evt, user) {
  console.log('log out event fired');
  $rootScope.auth.user = null;
});

When I check auth for a user, the value is null, meaning I've logged out, however, the logout event was not triggered. This is problematic because I have a callback that needs to be invoked upon the trigger of this event.

The place where I'm listening for these events is in my login controller - https://github.com/sudostack/iggy/blob/master/app/regislogin/regislogin.module.js

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.