<!DOCTYPE HTML>
<html>

<head>

  <!-- ************* Meta ************* -->
  <title>Eclipse N4JS Language and IDE</title>

  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  
  <!-- ************* OpenGraph ************-->
  <meta name="description" content="The Eclipse N4JS language and its IDE enable high-quality JavaScript development for large Node.js projects.">
  
  <meta property="og:site_name" content="N4JS"/>
  <meta property="og:title" content="Eclipse N4JS Language and IDE"/>
  <meta property="og:url" content="https://eclipse.org/n4js"/>
  <meta property="og:description" content="The Eclipse N4JS language and its IDE enable high-quality JavaScript development for large Node.js projects."/>
  <meta property="og:image" content="images/n4js.png">

  <!-- ************* JQuery ************* -->
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
  
  <!-- ************* Favicon ************-->
  <link rel="icon" href="images/favicon.ico" />
  <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
  <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />

  <!-- ************* Styles ************* -->
  <link rel="stylesheet" type="text/css" href="styles/styles.min.css">
  
  <!-- ****************** Required for buttom to top scripts ****************** -->
  <link rel="stylesheet" type="text/css" href="styles/backtotop.css">
</head>

<body>

  <header class="Grid">
    <div class="Cell Cell--4-12">
      <a href="index.html"><img src="images/n4js-logo.png" alt="Eclipse N4JS Language and IDE"></a>
    </div>

    <div class="Cell Cell--8-12">
      <nav>
         <a href="downloads.html">Download</a> ·
         <a href="community.html">Community</a> ·
         <a href="userguides/index.html">Documentation</a> 
      </nav>
    </div>
  </header>

  <div class="Main">

    <article class="Grid" id="community">
      <div class="Cell Cell--12-12">
        <br/>
        <h1 id="_community">Community</h1>
        <p>The community is a valuable driving force behind projects such as the Eclipse N4JS language and IDE.
        Community members make important contributions to the project by taking part in discussions, filing bug reports and making code contributions.
        The following resources are a great starting point to getting involved with the Eclipse N4JS project. 
        Find more information on the project developers, join in active discussions and make the most of the helpful resources offered.</p>
      </div>

      <div class="Cell Cell--4-12 m-Cell--withMargin">
        <h3 id="_forum">Forum</h3>
        <p>
          The Eclipse N4JS forum is a good place to ask questions about using the Eclipse N4JS Language and IDE to develop your own projects. 
          The forum is the most relevant place to find first-level support regarding getting started with coding projects and troubleshooting.
          Browse topics on the N4JS forum here: 
          <ul>
            <li><a href="https://www.eclipse.org/forums/index.php/f/365/">Eclipse N4JS Forum</a></li>
          </ul>
        </p>
      </div>

      <div class="Cell Cell--4-12 m-Cell--withMargin">
        <h3 id="_n4js_blog">N4JS Blog</h3>
        <p>
        The N4JS blog covers topics such as writing unit tests with the N4JS IDE, feature highlights and announcements about the Eclipse N4JS project.
        Find out more at the N4JS blog here:
          <ul>
            <li><a href="http://n4js.blogspot.de/">Eclipse N4JS Blog</a></li>
          </ul>
        </p>
      </div>

      <div class="Cell Cell--4-12 m-Cell--withMargin">
        <h3 id="_developer_mailing_list">Eclipse Developer Mailing List</h3>
        <p>For the development of N4JS project, join the mailing list for the most recent discussions on development coordination.
        Questions regarding planned features and the current state of the N4JS Language and IDE are welcome.
        <ul>
          <li><a href="https://dev.eclipse.org/mailman/listinfo/n4js-dev">Mailing List</a></li>
        </ul>
        </p>
      </div>

      <br/><br/>

      <div class="Cell Cell--4-12 m-Cell--withMargin">
        <h3 id="_gitHub_issues">GitHub Issues</h3>
        <p>We use GitHub to track bugs relating to the IDE and language. To submit an issue or to track the progress of reported issues, see the following:
        <ul>
          <li><a href="https://github.com/eclipse/n4js/issues">Eclipse N4JS GitHub Issues</a></li>
        </ul>
        </p>
      </div>

      <div class="Cell Cell--4-12 m-Cell--withMargin">
        <h3 id="_eclipse_project_page">Eclipse Project Page</h3>
        <p>The official Eclipse project pages contains information on contribution activity, resources for developers and licence details.
        <ul>
          <li><a href="https://projects.eclipse.org/projects/technology.n4js">Eclipse Project Pages</a></li>
        </ul>
        </p>
      </div>

      <div class="Cell Cell--4-12 m-Cell--withMargin">
        <h3 id="_the_eclipse_n4js_team">The Eclipse N4JS Team</h3>
        
        <p>
        More information about the developers behind N4JS can be found at the project pages of N4JS at Eclipse.org. 
        See the following page for committers, contributors, organizations and the core team of developers behind Eclipse N4JS:
        <ul>
          <li>
            <a href="https://projects.eclipse.org/projects/technology.n4js/who">Who's involved</a> 
          </li>
        </ul>
        </p>

      </div>

    </article>
  </div>

  <footer class="Grid" style="color:#d5dfea">
    <div class="Cell Cell--2-12 m-Cell--withMargin">
      <h2>Quick Links</h2>
      <ul>
        <li><a href="downloads.html">Download</a></li>
        <li><a href="userguides/index.html">Documentation</a></li>
        <li><a href="https://github.com/eclipse/n4js/">Source</a></li>
        <li><a href="https://github.com/eclipse/n4js/issues">Issues</a></li>
      </ul>
    </div>
    <div class="Cell Cell--2-12 m-Cell--withMargin">
      <br/><br/>
      <ul>
        <li><a href="https://www.eclipse.org/forums/index.php/f/365/">Forum</a></li>
        <li><a href="http://n4js.blogspot.de/">Blog</a></li>
        <li><a href="https://dev.eclipse.org/mailman/listinfo/n4js-dev">Mailing List</a></li>
        <li><a href="https://projects.eclipse.org/projects/technology.n4js">Eclipse Project Page</a></li>
        <li><a href="https://twitter.com/n4jsdev">Tweets by n4jsdev</a></li>
      </ul>
    </div>
    <div class="Cell Cell--2-12 m-Cell--withMargin">
      <br/><br/>
      <ul>
        <li><a href="http://www.eclipse.org/">Eclipse Home</a></li>
        <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
        <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
        <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
        <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
      </ul>
    </div>
    <div style="clear: both; height: 0; overflow: hidden;"></div>
  </footer>

  <script type="text/javascript">
    // Create a back to top button
    $('body').append('<a href="#" class="back-to-top" style="right:5%">Back to Top</a>');
    var amountScrolled = 300;
    $(window).scroll(function() {
    if ( $(window).scrollTop() > amountScrolled ) {
      $('a.back-to-top').fadeIn('slow');
    } else {
      $('a.back-to-top').fadeOut('slow');
    }
    });
    $('a.back-to-top, a.simple-back-to-top').click(function() {
    $('html, body').animate({
      scrollTop: 0
    }, 700);
    return false;
    });
  </script>

 </body>
</html>
