Giter Club home page Giter Club logo

node-steam-tradeoffers's Introduction

Steam Trade Offers for Node.js

NPM Version NPM Downloads PayPal Donate Button Steam Items Donate Button

steam-tradeoffers is a library for Node.js written in JavaScript. It allows you to automate Steam trading using trade offers. It was designed with node-steam in mind, but does not depend on it directly. Some of the methods of the library are wrappers for Steam Web API.

Please read the FAQ first if you have any questions.

If your question is not answered here, please ask it in https://github.com/steam-forward/node-steam-forum, please do not open an issue here. Issues are only for bugs and feature requests.

Installation

npm install steam-tradeoffers

Usage

Instantiate a SteamTradeOffers object...

var SteamTradeOffers = require('steam-tradeoffers');
var offers = new SteamTradeOffers();

...then setup session and WebAPI key:

offers.setup({
  sessionID: sessionID,
  webCookie: cookies,
  APIKey: webAPIKey
});

You can obtain session information with node-steam and its plugin steam-weblogon.

Demo

A demo bot exists that also serves as a donation bot.

Source code (based on the storehouse.js example).

Examples

You'll need to install node-steam, steam-weblogon, and steam-web-api-key in order to run the examples.

The storehouse.js file contains an example of handling incoming trade offers.

The offerbot.js is an example of making a trade offer.

On first launch both of the examples will 'crash'. Check your email for Steam Guard code and edit an example file to add it, then run it again.

Please read the FAQ before creating an issue about examples.

Methods

options param of all methods is just an object. All callbacks supplied with Error as the first argument or null if no errors occured.

setup(options)

As noted above, this method is used to setup a web session and other settings. If you want to operate with trade offers right after startup, do it after calling this method.

Options:

  • sessionID is a valid web session ID.
  • webCookie is an array of cookies.
  • APIKey is a Web API key for the account you use to trade. API key of another account won't work.
  • requestOptions (optional) is a request options object. You can use it to configure timeout, proxy, etc. All available options are listed in request docs. This library uses some defaults:
    • timeout is a number of milliseconds to wait for Steam servers to respond. Default is 30000.
  • DEPRECATED timeout (optional) is a number of milliseconds to wait for Steam servers to respond. Default is 30000. More information about timeouts can be found in request docs.

sessionID and webCookie can be acquired using node-steam with the node-steam-weblogon plugin. APIKey can be obtained using node-steam-web-api-key.

loadMyInventory(options, callback)

Loads your inventory for the given app and context. For example, use 440 and 2 for TF2 and 570 and 2 for Dota 2. If success the second argument to callback will be an array of item objects and the third argument will contain raw inventory objects, not merged with descriptions but still concatenated from multiple inventory pages.

Options:

  • appId is the Steam AppID
  • contextId is the inventory context Id
  • language (optional) is the language for item descriptions
  • tradableOnly (optional) is a boolean flag that defaults to true to return tradable items only

loadPartnerInventory(options, callback)

Loads your partner inventory for the given app and context.

Options:

  • partnerSteamId is the SteamID of the trade partner. You need specify only partnerAccountId or partnerSteamId.
  • partnerAccountId is the Steam Account ID of the trade partner. You need specify only partnerAccountId or partnerSteamId.
  • appId is the Steam AppID
  • contextId is the inventory context Id
  • tradeOfferId (optional) is needed to load private inventory of the trade partner for received trade offer
  • language (optional) is the language for item descriptions

makeOffer(options[, callback])

Makes a trade offer to the partner.

Options:

  • partnerAccountId or partnerSteamId, you need only one of those.
  • accessToken (optional) is a token from the public Trade URL of the partner.
  • itemsFromMe are the items you will lose in the trade.
  • itemsFromThem are the items you will receive in the trade.
  • counteredTradeOffer (optional) is the ID to a trade offer you are countering.
  • message (optional) is a message to include in the offer.

itemsFromMe and itemsFromThem both are arrays of item objects that look like this:

{
    "appid": 440,
    "contextid": 2,
    "amount": 1,
    "assetid": "1627590398"
}

If success the second param to callback will be an object with tradeofferid of the newly created trade offer.

getOffers(options, callback)

getOffer(options, callback)

The first method loads a list of trade offers, and the second loads just a single offer.

Options:

The second argument to callback will be an object that Steam Web API returns. The only thing to note is that the wrapper adds a property steamid_other with the SteamID of the trade partner to each CEcon_TradeOffer object in received trades.

acceptOffer(options[, callback])

acceptOffer that was sent to you.

Options:

  • tradeOfferId is a trade offer Id
  • partnerSteamId is the SteamID of the other person. This param is optional for backward compatibility. Accepting offers may not work for you without this param.

The second argument to callback will be an object with response from Steam, but don't expect anything meaningful in it.

declineOffer(options[, callback])

cancelOffer(options[, callback])

declineOffer that was sent to you. cancelOffer that you sent.

Options:

  • tradeOfferId is a trade offer Id

The second argument to callback will be an object with response from Steam, but don't expect anything meaningful in it.

getOfferUrl(callback)

The second argument to callback will be the trade offer URL.

getOfferToken(callback)

The second argument to callback will be the offer token of the bot, extracted from its trade offer URL.

getItems(options, callback)

Options:

  • tradeId is the ID of the completed trade you want to get items for, available as a tradeid property on offers from getOffers or getOffer
  • language (optional) is the language for item descriptions

The second argument to callback will be an array of items acquired in a completed trade.

getHoldDuration(options, callback)

Get escrow hold duration for yourself and your trade partner before trade.

Options:

  • partnerAccountId or partnerSteamId, you need only one of those.
  • accessToken is a token from the public Trade URL of the partner (required if they are not in your friend list).

The second argument to callback will be an object like:

{
    "my": 0,
    "their": 0
}

getTradeHoldDuration(options, callback)

Get escrow hold duration for the existing active trade offer.

Options:

  • tradeOfferId is a trade offer Id

The output is the same as with getHoldDuration.

License

The MIT License (MIT)

Copyright (c) 2013-2016 Alexey Komarov [email protected]

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

node-steam-tradeoffers's People

Contributors

alex-nabu avatar alex7kom avatar doctormckay avatar kant2002 avatar luop90 avatar thesupremecommander avatar yberreby 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

node-steam-tradeoffers's Issues

makeOffer

How to transfer many items in assetid

Cannot load inventory of unupgraded account

There is no option to manually pass an API key on setup. Free accounts do not get their own API keys, so one must be provided. Add an optional parameter to allow an API key to be passed.

400 error when making offer

Whenever i try to make an offer, it fails with a 400 error.
Some facts about the execution:

  1. I am getting the sessionID and cookies from node-steam web log on
  2. steam-tradeoffers object executes setup without errors
  3. The options object has exactly three properties: partnerSteamId, itemsFromMe, itemsFromThem
  4. itemsFromMe is an empty array, itemsFromThem is an array with the appropriate objects (and the objects have the attributes in the same order, too
  5. Now i have updated to the latest version of node-steam-tradeoffers

¿Is there a limit to the amount of simultaneous offers you can make through steamcommunity?

Thank you

MakeOffers 401

Hi Got this error when i make an offer using steam trade offer. below is the error code i received.

[Error : 401]

Web authentication 401, retrying.

how can i fixed this?

Bot Multiple Login

Hi how can i make your script a multiple bots in one script? Any guide on multiple bots?

Extract Error

Hi Just need to ask how can i extract the error object from steam.

For example : [Error : There was an error accepting this trade offer.]

I can't extract the error message using below.

bot.makeOffer(params, function(err, callbacck) {
if(err) {
console.log(err.Error);
}

})

when i used this err.Error it says undefined obj. I need to extract the steam error to inform the users whats there error in the offer. sorry for my bad english.

Better error feedback

Would it be possible to change the callback on acceptOffer so it can return the actual error instead of just 500. The body contains the actual error and could be useful when debugging -- currently it is completely lost.

ex:
body: '{"strError":"There was an error accepting this trade offer. Please try again later. (24)"}' }

Thank you.

MakeOffers Callback

Hi Just want to ask if there is a callback or event that detects if the tradeofferid that is generated by the Makeoffers function was accepted or it was declined by the trade partner in the trade?

Support for multiple pages in loadinventory

Hello,

VALVe made a change to the way inventories are loaded and now require multiple pages

ex:

http://steamcommunity.com/id/backpacktfcardswap3/inventory/json/753/6
http://steamcommunity.com/id/backpacktfcardswap3/inventory/json/753/6?start=2500
[etc]

Multiple calls are needed to load the full inventory. local and foreign have this "new" feature.

"more":true,"more_start":2500 was added to the json, "more" will be false if you're on the last page.

Let me know if you need more details! Thanks in advance.

Loading inventory issues

When steam is having issues, it will spam requests super fast. Can we have a setTimeout when a request fails ? This probably should apply to any form of requests.

SteamTradeOffers.prototype._loadInventory

It basically spammed 50 requests within 2 seconds time. If downtime at steam is long this may get our IPs banned or something.

makeOffer: callback undefined

Hey there,
when I try to send a trade offer, the 2nd callback parameter is just undefined. How can I evaluate where the error is? Is it a trade ban or it's just the wrong format of the request?

How can I find out the AssetID? When I fetch an inventory in JSON-format I get many IDs, but none of them is called 'assetID'. I tried to use the main array key of each item as assetID (xxxxx_xx) - with the "xx" after the underscore and without it. Any ideas?

Cant send/receive trade offers

Hey,

I still cant send or receive any tradeoffers, even with the sample storehouse.js file. The code runs fine, the login works and there is no error thrown whatsoever.
Is it possible that it fails due the 7 day trade ban you get when logging in from a new device? And if so, is there a way to keep the login alive even when restarting the file?

Thanks.

Error 401 on makeOffer

Hi,

Code that worked two days ago throws an error after the call to makeOffer.

Error: 401
  at Request._callback (/Users/Development/Documents/Projets/FilsTrade Offers - backup/node_modules/steam-tradeoffers/index.js:329:27)
  at Request.self.callback (/Users/Development/Documents/Projets/FilsTrade Offers - backup/node_modules/steam-tradeoffers/node_modules/request/request.js:129:22)
  at Request.emit (events.js:98:17)
  at Request.<anonymous> (/Users/Development/Documents/Projets/FilsTrade Offers - backup/node_modules/steam-tradeoffers/node_modules/request/request.js:873:14)
  at Request.emit (events.js:117:20)
  at IncomingMessage.<anonymous> (/Users/Development/Documents/Projets/FilsTrade Offers - backup/node_modules/steam-tradeoffers/node_modules/request/request.js:824:12)
  at IncomingMessage.emit (events.js:117:20)
  at _stream_readable.js:938:16
  at process._tickCallback (node.js:419:13)

This seems to be related to a change in the trade offer API, it affected bazaar.tf bots at the same time:

http://bazaar.tf/thread/4899/13#post-93164
http://steamcommunity.com/groups/tf2bazaar#announcements/detail/141059345790882601

Could you please update the module to make it work with the new API?
Thanks.

Non-tradable items not included

I had expected loadMyInventory() to return all the items in the inventory, not just the tradable ones. Requesting a "tradable" option that defaults to true, but supplied false will return untradable items as well.

ERROR : Makeoffer

I currently encounter a concern, there 2-3 Days I test my code, it sent the offer correctly but today I want to retest the same code and can not be sent an offer yet 0.o I have nothing to change the code!

Answer console:

connected
encrypt request
handshake complete
Logged in!
web authentication 401, retrying

My code :

var admin = '******'; // put your steamid here so the bot can accept your offers
var accountName = '******';
var password = '*****'; 
var authCode = '*****';  // code received by email
var nameBot = '*****';


var fs = require('fs');
var Steam = require('steam');
var SteamTradeOffers = require('steam-tradeoffers'); // change to 'steam-tradeoffers' if not running from the examples subdirectory
var steam = new Steam.SteamClient();
var offers = new SteamTradeOffers();


var logOnOptions = {
  accountName: accountName,
  password: password
};

if (fs.existsSync('sentry/' + accountName)) {
logOnOptions['shaSentryfile'] = require('fs').readFileSync('sentry/' + accountName);
} else if (authCode != '') {
logOnOptions['authCode'] = authCode;
}
steam.logOn(logOnOptions);
steam.on('debug', console.log);
steam.on('loggedOn', function(result) {
console.log('Logged in!');
steam.setPersonaState(Steam.EPersonaState.Online);
steam.setPersonaName(nameBot);
});
steam.on('webSessionID', function(sessionID) {
steam.webLogOn(function(newCookie){
offers.setup(sessionID, newCookie, function(err) {
if (err) {
throw err;
}
offers.loadMyInventory(730, 2, function(err, items) {
var item;
// picking first tradable item
for (var i = 0; i < items.length; i++) {
if (items[i].tradable) {
item = items[i];
break;
}
}
// if there is such an item, making an offer with it
if (item) {
offers.makeOffer ({
partnerSteamId: admin,
itemsFromMe: [{
appid: 730,
contextid: 2,
amount: 1,
assetid: '590963683'
}],
itemsFromThem: [],
message: 'This is test'
}, function(err, response){
if (err) {
throw err;
}
console.log(response);
});
}
});
});
});
});
steam.on('sentry', function(data) {
fs.writeFileSync('sentry/' + accountName, data);
});

loadInventory error

During the winter sales I had the same problem with load*Inventory trade offers as described at seishun/node-steam-trade#26.

Seeing as the load Inventory code is pretty much the same, you'd probably want to include his fix too.

Session expiring / 401 errors

After I start my app and process several transactions (grabbing inventory, sending trades, etc.) my session suddenly "breaks" and I start getting 401's whenever I try to interface with Steam. There's no clear pattern that I can find, but it always happens pretty quickly after starting the app and processing transactions.

Here's an example of the error I get (I've just appended the error code at the end):

Nov 12 11:32:37 hidden-reaches-4324 app/web.1: ERROR LOADING INVENTORY: https://steamcommunity.com/tradeoffer/new/partnerinventory/?sessionid=NjEyODA3MTI1&partner=76561198027075040&appid=440&contextid=2 - 401

From what I can gather, a 401 error means my Steam session is no longer valid. Since a Session ID is being passed, it must be that Steam is invalidating my session. The only thing that fixes it is relogging in and getting a new Session ID.

It doesn't happen locally, as far as I can tell, but on my Heroku instance it happens all the time. Any idea what could be happening or how I can debug further?

Error : logon fail 63 first account properly connected, 2nd problem WTF?

Hello there,

I currently have a problem.
I currently have 2 steam account, one that I name bot and one that I name Main1.

Currently storehouse.js code works fine when I put the settings on my account bot.
Parcontre, when I change the information with my principal1 (username, password, steamguard code) it does not know if connected.
How is this done?

error :You have logged in from a new device.

[Error: There was an error sending your trade offer. Please try again later.<br


You have logged in from a new device. In order to protect the items in your
inventory, you will be unable to trade from this device for 7 days.]

i am getting this error while trying to send a trade offer to some1..The funny thing is i was able to send trade offers using the same code yesterday. but today it is giving this error. Any idea how to resolve this?

[Error: 403] - getOffer

I'm getting this kind of error in getOffer function. Do you know the meaning of this error? thanks in advance.

Make offer not working

Hey,

I'm not able no make any tradeoffers.

var itemsLose = [
    ["appid", 730],
    ["contextid", 2],
    ["amount", 1],
    ["assetid", "549051622"]
];
var itemsWin = new Array();

var makeOfferOptions = {
  partnerSteamId: '76561198137706274',
  message: 'Does it WORK!?!?!',
  itemsFromMe: itemsLose,
  itemsFromThem: itemsWin
};


offers.makeOffer(makeOfferOptions, function(){
    console.log('made offer?');
});

Console Output:

connected
encrypt request
handshake complete
Logged in!
web authentication 401, retrying
Request received
GOT DATA!
made offer?

But no trade offer is done..

Issue with accepting offers as of today

With added logging (see #30), when trying to accept an offer I now get:

There was an error accepting this trade offer. Please try again later. (8)

When accepting a trade offer with the steam client, i noticed it had an additional parameter "partner" which is the partner's steamid. I added it to acceptOffer but it didn't solve the issue.

Any idea what could be causing this problem?
Thanks

Error: 400

Got This error today my code was working yesterday. Don't know why this happen now.

info: Set Up servers - Complete.
info: BOT jokerxvier connected..
Connected to port: 8080
connected
encrypt request
handshake complete
info: Logged on
info: Got webSessionID ODQ4NDUyMzUz
web authentication 401, retrying
info: webLogOn returned sessionid=ODQ4NDUyMzUz,steamLogin=76561198135685406%7c%7c9340BC4736A1348CCBA46E93197BEB15CE4B3F26

Error: 400
at Request._callback (/Applications/XAMPP/xamppfiles/htdocs/dota2/muiltpleLogin/index.js:329:27)
at Request.self.callback (/Applications/XAMPP/xamppfiles/htdocs/dota2/muiltpleLogin/node_modules/request/request.js:129:22)
at Request.emit (events.js:98:17)
at Request. (/Applications/XAMPP/xamppfiles/htdocs/dota2/muiltpleLogin/node_modules/request/request.js:873:14)
at Request.emit (events.js:117:20)
at IncomingMessage. (/Applications/XAMPP/xamppfiles/htdocs/dota2/muiltpleLogin/node_modules/request/request.js:824:12)
at IncomingMessage.emit (events.js:117:20)
at _stream_readable.js:929:16
at process._tickCallback (node.js:419:13)

making an offer: 500

Even with a premium account I still find issues with sending trade offers to clients. While debugging I get 'making an offer: 500' in console and the error message from Steam is "There was an error sending your trade offer. Please try again later. (26)". The account was first logged on more than 15 days ago (I waited 2 weeks to rule out this being the issue) so it doesn't seem to be SteamGuard causing the issue. My itemsFromMe table looks like this [ { appid: 440, contextid: 2, amount: 1, assetid: '1595744650' } ] I set the cookies here:

bot.on('webSessionID', function(sessionID) {
  steamTrade.sessionID = sessionID;
  bot.webLogOn(function(newCookie){
    console.log(typeof newCookie);
    console.log(newCookie);
    newCookie.forEach(function(cookie) {
        steamTrade.setCookie(cookie);
    });
    if (newCookie && sessionID) {
        offers.setup(sessionID, newCookie, function() {
                processOffers(1);
                offers.loadMyInventory(440, 2, function(something, inv) {
                                cacheInv(inv, 440);
                        });
                        offers.loadMyInventory(730, 2, function(something, inv) {
                                cacheInv(inv, 730);
                        });
                        console.log(offers._j);
        });
    }
  });
});

And my code that makes the offer is:

offers.makeOffer({
     partnerAccountId: authedConnections[socket.id].steamid,
     itemsFromMe: newItemsArray,
     itemsFromThem: {},
     message: '332233'
}, function(nothing, tradeId) {
     //Do something
});

Sorry for the bad indenting. If anyone else has ran into this issue and knows a work around I will be forever in your debt.

Thanks!

socket error: Error: read ECONNRESET

Hi. I tried using the built-in example for steam-tradeoffers, offerbot.js but I'm getting this error:

$ node offerbot.js
socket timed out
socket closed
connecting to 72.165.61.174:27017
connected
encrypt request
socket error: Error: read ECONNRESET
socket closed with an error
waiting 1 secs

Any ideas what this means? I'm a bit new to this.

Check trades when bot first logs in

One problem with running one of these bots is that if for some reason the bot is offline or misses a trade when you restart you have to wait until the next trade. Is there any way I can do it so the code runs on log in and every 5 mins or so? I can get it to run just by calling the function but it does not get the data needed to do the trading

(this is a trade accept bot)

logon fail: 63

Hey,

I'm trying to use your module, but the storehouse.js doesnt work. I'm always getting the "logon fail: 63, sessionID: 5889225" error. I tried the example.js from the node-steam module, and it works... The login just fails when using the storehouse.js

What's strange is, when I replace the storehouse.js code with the working example.js code, it fails..?

Login not Working

Hello, I got a Problem with logging in into the example bots. This is what I get after inserting the SteamGuard Code:

connected
encrypt request
handshake complete
logon fail: 65, sessionID: 20601331

events.js:72
throw er; // Unhandled 'error' event
^
Error: Logon fail: 65
at SteamClient.handlers.(anonymous function) (/home/pi/TradeBot/node_modules/steam/lib/handlers/user.js:178:11)
at SteamClient._netMsgReceived (/home/pi/TradeBot/node_modules/steam/lib/steam_client.js:102:26)
at SteamClient.handlers.(anonymous function) (/home/pi/TradeBot/node_modules/steam/lib/steam_client.js:188:10)
at SteamClient._netMsgReceived (/home/pi/TradeBot/node_modules/steam/lib/steam_client.js:102:26)
at Connection.emit (events.js:95:17)
at Connection.readPacket (/home/pi/TradeBot/node_modules/steam/lib/connection.js:50:8)
at Connection.emit (events.js:92:17)
at emitReadable
(_stream_readable.js:427:10)
at emitReadable (_stream_readable.js:423:5)
at readableAddChunk (_stream_readable.js:166:9)

How can this be fixed?

Running multiple bots

Hello. I have a few bots. When sending the offer of exchange, I would like to choose how the bot to do the exchange.

It's possible to get BOT trade token?

For example can parse http://steamcommunity.com/id/me/tradeoffers/privacy page for retrieve #trade_offer_access_url, like a getAPIKey function, that retrieve steam api key.

error 15 (access denied) when making offers to certain users

is anyone seeing the following error when making offers?

Error: There was an error sending your trade offer. Please try again later. (15)

it's only happening to a small % of users, but it's consistent for those users. i'm at a bit of a loss of what might be causing it.

Accepting offers not working as of today

TItle pretty much says it all, offers can no longer be accepted (declining still works fine).

The error message I get:
body: {"strError":"There was an error accepting this trade offer. Please try again later. (8)"}

Seems like the partner's steamid is now required.

Sending trade offer fails - Error 25

Sending trade offers is not working in my bot's account. (Strangely it works with other accounts).
The requests to https://steamcommunity.com/tradeoffer/new/send return Error 500 (Internal Server Error).
The Trade window error is "There was an error sending your trade offer. Please try again later. (25)". After sending the offer through node-steam-tradeoffers it will continue giving the same error even though Chrome or the official client for a while before it works again, but never with node-steam-tradeoffers.
There is no issue whatsoever accepting trade offer though.

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.