<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8">
    <link type="image/x-icon" rel="icon" href="favicon.ico">
    <link type="image/x-icon" rel="shortcut icon" href="favicon.ico">
    <link rel="stylesheet" href="pipe.css">
    <link rel="stylesheet" href="sh_vim-dark.css">
    <link rel="alternate"
          type="application/rss+xml"
          title="node blog"
          href="http://feeds.feedburner.com/nodejs/123123123">
    <title>node.js</title>
  </head>
  <body id="front">
    <div id="intro">
        <img id="logo" src="http://nodejs.org/images/logo.png" alt="node.js">

        <p>Node.js is a platform built on <a
        href="http://code.google.com/p/v8/">Chrome's JavaScript runtime</a>
        for easily building fast, scalable network applications.  Node.js
        uses an event-driven, non-blocking I/O model that makes it
        lightweight and efficient, perfect for data-intensive real-time
        applications that run across distributed devices.</p>

        <p>Current Version: __VERSION__</p>

        <div class=buttons>
        <a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__.tar.gz" class="button downloadbutton" id="downloadbutton">INSTALL</a>

        <a href="download/" class=button id="all-dl-options">Downloads</a
        ><a href="api/" class="button" id="docsbutton">API Docs</a>
        </div>

        <a href="http://github.com/joyent/node"><img class="forkme" src="http://nodejs.org/images/forkme.png" alt="Fork me on GitHub"></a>
    </div>

    <div id="quotes" class="clearfix">
        <h2>Node.js in the Industry</h2>
        <ul>
            <li class="microsoft"><img src="http://nodejs.org/images/microsoft-logo.png" height=34>
            <p>Node gives Azure users the first end-to-end JavaScript
            experience for the development of a whole new class of real-time
            applications.
            <br>
            <a href="https://www.windowsazure.com/en-us/develop/nodejs">Claudio Caldato</a>
            <br>
            <span>Principal Program Manager, Microsoft Open Technologies, Inc.</span></p>
            </li>

            <li class="ebay"><img src="http://nodejs.org/images/ebay-logo.png" height=34>
            <p>Node’s evented I/O model freed us from worrying about locking
            and concurrency issues that are common with multithreaded async
            I/O.
            <br>
            <a href="http://www.ebaytechblog.com/2011/11/30/announcing-ql-io/">Subbu Allamarju</a>
            <br>
            <span>Principal Member, Technical Staff</span></p></li>

            <li class="linkedin"><img src="http://nodejs.org/images/linkedin-logo.png" height=34>
            <p>On the server side, our entire mobile software stack is
            completely built in Node. One reason was scale. The second is
            Node showed us huge performance gains.
            <br>
            <a href="http://venturebeat.com/2011/08/16/linkedin-node/">Kiran Prasad</a>
            <br>
            <span>Director of Engineering, Mobile</span></p></li>

            <li class="yahoo"><img src="http://nodejs.org/images/yahoo-logo.png" height=34>
            <p>Node.js is the execution core of Manhattan. Allowing
            developers to build one code base using one language – that is
            the nirvana for developers.
            <br>
            <a href="http://developer.yahoo.com/blogs/ydn/posts/2011/11/yahoo-announces-cocktails-%E2%80%93-shaken-not-stirred/">Renaud Waldura</a>
            <br>
            <span>Sr. Product Manger, Cocktail</span></p></li>
        </ul>
    </div>

    <div id="content" class="clearfix">
            <div id="column1">
                <h2>An example: Webserver</h2>
                <p>This simple web server written in Node responds with "Hello World" for every request.</p>
              <pre>
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');</pre>

              <p>To run the server, put the code into a file
              <code>example.js</code> and execute it with the
              <code>node</code> program from the command line:</p>
              <pre class="sh_none">
% node example.js
Server running at http://127.0.0.1:1337/</pre>

                <p>Here is an example of a simple TCP server which listens on port 1337 and echoes whatever you send it:</p>

                <pre>
var net = require('net');

var server = net.createServer(function (socket) {
  socket.write('Echo server\r\n');
  socket.pipe(socket);
});

server.listen(1337, '127.0.0.1');</pre>

                <!-- <p>Ready to dig in? <a href="">Download the latest version</a> of node.js or learn how other organizations are <a href="">using the technology</a>.</p> -->
        </div>
        <div id="column2">
            <h2>Featured</h2>
            <a href="http://www.youtube.com/watch?v=jo_B4LTHi3I"><img src="http://nodejs.org/images/ryan-speaker.jpg"></a>
            A guided introduction to Node

            <h2>Explore Node.js</h2>
            <ul id="explore">
                <li><a href="about/" class="explore">About</a><br><span>Technical overview</span></li>
                <li><a href="http://npmjs.org/" class="explore">npm Registry</a><br><span>Modules, resources and more</span></li>
                <li><a href="http://nodejs.org/api/" class="explore">Documentation</a><br><span>API Specifications</span></li>
                <li><a href="http://blog.nodejs.org" class="explore">Node.js Blog</a><br><span>Insight, perspective and events</span></li>
                <li><a href="community/" class="explore">Community</a><br><span>Mailing lists, blogs, and more</span></li>
                <li><a href="logos/" class="explore">Logos</a><br><span>Logo and desktop background</span></li>
                <li><a href="http://jobs.nodejs.org/" class="explore">Jobs</a><br><ol class="jobs"><!-- JOBS --><!-- JOBS --></ol></li>
            </ul>
    </div>
</div>

    <div id="footer">
        <a href="http://joyent.com" class="joyent-logo">Joyent</a>
        <ul class="clearfix">
            <li><a href="/">Node.js</a></li>
            <li><a href="/download/">Download</a></li>
            <li><a href="/about/">About</a></li>
            <li><a href="http://npmjs.org/">npm Registry</a></li>
            <li><a href="http://nodejs.org/api/">Docs</a></li>
            <li><a href="http://blog.nodejs.org">Blog</a></li>
            <li><a href="/community/">Community</a></li>
            <li><a href="/logos/">Logos</a></li>
            <li><a href="http://jobs.nodejs.org/">Jobs</a></li>
            <!-- <li><a hrfe="http://twitter.com/nodejs" class="twitter">@nodejs</a></li> -->
        </ul>

        <p>Copyright <a href="http://joyent.com/">Joyent, Inc</a>, Node.js is a <a href="/trademark-policy.pdf">trademark</a> of Joyent, Inc. View <a href="https://raw.github.com/joyent/node/__VERSION__/LICENSE">license</a>.</p>
    </div>


    <script src="sh_main.js"></script>
    <script src="sh_javascript.min.js"></script>
    <script>highlight(undefined, undefined, 'pre');</script>

    <script>
      window._gaq = [['_setAccount', 'UA-10874194-2'], ['_trackPageview']];
      (function(d, t) {
        var g = d.createElement(t),
            s = d.getElementsByTagName(t)[0];
        g.src = '//www.google-analytics.com/ga.js';
        s.parentNode.insertBefore(g, s);
      }(document, 'script'));
      ;(function(d,n) {
        var os = n.platform.match(/(Win|Mac|Linux)/);
        var x = n.userAgent.match(/x86_64|Win64|WOW64/) ||
                n.cpuClass === 'x64' ? 'x64' : 'x86';
        var base = 'http://nodejs.org/dist/__VERSION__/';
        var href = 'node-__VERSION__.tar.gz';
        var db = d.getElementById('downloadbutton');
        var d2;
        switch (os && os[1]) {
          case 'Mac':
            href = 'node-__VERSION__.pkg';
            break;
          case 'Win':
            href = 'node-__VERSION__-' + x + '.msi';
            if (x === 'x64') href = 'x64/' + href;
            break;

          // TODO uncomment when we have these
          // case 'Linux':
          //   // two buttons: .deb and .rpm
          //   href = 'node-__VERSION__-' + x + '.rpm';
          //   var d2 = document.createElement('a');
          //   d2.href = base + 'node-__VERSION__-' + x + '.deb';
          //   d2.className = 'button downloadbutton';
          //   d2.innerHTML = 'INSTALL .deb';
          //   db.innerHTML = 'INSTALL .rpm';
          //   db.parentNode.insertBefore(d2, db);
          //   break;
        }

        db.href = base + href;
        // if there's one download option, then download it at #download
        if (location.hash === '#download' && !d2)
          location.replace(b.href);
      })(document,navigator);
    </script>
 </body>
</html>
