<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>Xtend - Modernized Java</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="Xtend is a statically typed programming language sitting on top of Java.">
	<meta name="author" content="Sven Efftinge">
	<meta name="author" content="Miro Spoenemann">
	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	
	<!-- Le fav and touch icons -->
	
	<link rel="shortcut icon" href="/xtend/images/favicon.png">
	
	<link href="/xtend/css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="/xtend/css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="/xtend/css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='/xtend/css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="/xtend/css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="/xtend/css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="/xtend/css/style.css" rel="stylesheet" type='text/css'>
	
	<!--[if lt IE 9]>
	<link href="css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->

	<!-- BEGIN Cookie Consent
	<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.css" />
	<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js"></script>
	<script>
	window.addEventListener("load", function(){
	window.cookieconsent.initialise({
		"palette": {
		"popup": {
		  "background": "#000"
		},
		"button": {
		  "background": "#f1d600"
		}
		},
		"theme": "edgeless",
		"type": "opt-in",
		onInitialise: function (status) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		},
		onStatusChange: function(status, chosenBefore) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		}, 
		onRevokeChoice: function() {
		  var type = this.options.type;
		  if (type == 'opt-in') {
		    // TODO: disable cookies
		  }
		  if (type == 'opt-out') {
		    // TODO: enable cookies
		  }
		},
		"content": {
		"href": "http://www.eclipse.org/legal/privacy.php"
		}
	})});
	</script>
	END Cookie Consent -->
</head>


  <body>

    <!-- Navbar -->
  <div class="navbar navbar-fixed-top"
    style="border-bottom: 1px solid #000;">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="/xtend/index.html"></a>
        <div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <li ><a href="/xtend/download.html">Download</a></li>
            <li ><a href="/xtend/documentation/index.html">Documentation</a></li>
            <li ><a href="/xtend/community.html">Community</a></li>
            <li ><a href="http://xtext.org">Xtext</a></li>
            <li ><a href="http://www.eclipse.org">Eclipse.org</a></li>
          </ul>
              <!--div class="btn-group pull-right">
                <div class="g-plusone" data-href="http://www.xtend-lang.org"></div>
              </div-->
        </div>
        <!--/.nav-collapse -->
      </div>
    </div>
  </div>
  <!-- Navbar End -->


    <div id="header_wrapper">
	<div class="container"> 
		<div class="flexslider image-slider">
			<div class="span6" style="margin-left:7px;">
			<h2 class="front-title">
				Java with spice!
			</h2>
			<br />
			<p>Xtend is a flexible and expressive dialect of Java, which compiles into readable Java&nbsp;8 compatible source code. 
			   You can use any existing Java library seamlessly. The compiled output is readable 
				and pretty-printed, and tends to run as fast as the equivalent
				handwritten Java code.</p>
			<p>Get productive and write beautiful code with <a href="documentation/204_activeannotations.html">powerful macros</a>, <a href="documentation/203_xtend_expressions.html#lambdas">lambdas</a>, <a href="documentation/203_xtend_expressions.html#operators">operator overloading</a> and many more modern language features.</p>
				<a href="download.html" class="btn_download"></a>
				<a href="documentation/index.html" class="btn_documentation"></a>
			</div>
			<div class="span4">
				<video id="video" class="embedded-video" controls width="100%" poster="images/intro_thumb.png">
					<source src="media/xtend_intro_720p.mp4" type="video/mp4">
					
  					Your browser does not support the video tag.
				</video>
				<script type="text/javascript">
				var base = "media/xtend_intro_";
				if (location.hostname === "localhost" || location.hostname === "127.0.0.1") {
					base = location.protocol+"//eclipse.org/xtend/media/xtend_intro_";
				}
				var videoList = new Array(base+"720p.mp4",base+"360p.mp4",base+"270p.mp4");
				var video = document.getElementById('video');
				if (window.innerWidth <= 800) video.setAttribute("src", videoList[2]);
				else if (window.innerWidth <= 1400) video.setAttribute("src", videoList[1]);
				else video.setAttribute("src", videoList[0]);
				</script>
			</div>
		</div>
	</div>
</div>

<div id="intro">
	<div class="container">
		<ul class="newsticker">
		      <li><!--a href="http://dslmeinte.wordpress.com/2012/09/24/a-trick-for-speeding-up-xtend-building/"-->&ldquo;I love Xtend and use it as much as possible.&rdquo; (Meinte Boersma)
		      <li><!--a href="https://groups.google.com/d/msg/xtend-lang/xxDwxnSeaco/xWj7Y-CovmAJ"-->&ldquo;Xtend is a wonderful language for improving the developer experience.&rdquo; (Salvatore Romeo)
		      <li><!--a href="https://groups.google.com/d/msg/xtend-lang/ABhngFZ4Qxg/cV76ZsFKUDEJ"-->&ldquo;I am loving Xtend, and I wanted to say thanks.&rdquo; (Jacob Goodson)
		      <li><!--a href="https://groups.google.com/d/msg/xtend-lang/ABhngFZ4Qxg/7sZbQy_inXYJ"-->&ldquo;It&#39;s very comfortable to work with Xtend.&rdquo; (Ross Judson)
		      <li><!--a href="https://groups.google.com/d/msg/xtend-lang/bdMs7kCBZSc/61jGMxH6ZmgJ"-->&ldquo;Xtend rocks and I love using it :-)&rdquo; (Christian Vogel)
		      <li><!--a href="https://groups.google.com/d/msg/xtend-lang/BqqPjXxxfMk/j8XDk1bAtp4J"-->&ldquo;I love the expressiveness in Xtend and the ability to write cleaner code.&rdquo; (Jesper Eskilson)
		      <li><!--a href="https://groups.google.com/d/msg/xtend-lang/En6rF8PTnG4/1mdU0QmJ3nYJ"-->&ldquo;I love it!&rdquo; (Francois Green)
		      <li><!--a href="https://groups.google.com/d/msg/xtend-lang/ABhngFZ4Qxg/7sZbQy_inXYJ"-->&ldquo;Having idiomatic Java generated by the compiler is a great safety net.&rdquo; (Ross Judson)
		      <li><!--a href="https://twitter.com/meinte37/status/507135731920556032"-->&ldquo;Xtend could be described as &ldquo;Scala, the good parts&ldquo;.&rdquo; (Meinte Boersma)
		      <li><!--a href="https://groups.google.com/d/msg/xtend-lang/mKAansrVhms/SzcfLEwZo_UJ"-->&ldquo;Xtend is awesome for Android Programming!&rdquo; (Eugen)
		</ul>
	</div>
</div>

<div id="features">
	<div class="container">
		<div class="row">
			<br/>
			<br />
			<div class="span6 float feature">
				<div class="span2">
					<img src="images/android_logo.png" alt="Android" />
				</div>
				<div class="span3">
					<h4>Android Development</h4>
					<p>
						Xtend works great on Android, as it doesn't produce additional runtime overhead.
						The very thin lib and the advanced support for code generation increase productivity
						while helping to keep your Android apps small.
					</p>
				</div>
			</div>
			<div class="span6 float feature">
				<div class="span2">
					<img src="images/gwt-logo.png" alt="Google Web Toolkit" />
				</div>
				<div class="span3">
					<h4>Web Development</h4>
					<p>
						The Google Web Toolkit translates Java source code to fast Javascript code. Xtend makes typical
						GWT programming a joy. There are many nice examples and cool enhancements <a href="https://github.com/DJCordhose/todomvc-xtend-gwt">out there</a>.
					</p>
				</div>
			</div>
			<div class="span6 float feature">
				<div class="span2">
					<img src="images/Java_Duke_learning.png" alt="Java FX" />
				</div>
				<div class="span3">
					<h4>Fast Learning Curve!</h4>
					<p>
						If you know Java, you will be productive with Xtend in a few hours.
						Xtend is an extension to Java, so you can reuse all your knowledge about tools and libraries.
						Also complicated language features like generics remain unchanged.
					</p>
				</div>
			</div>
			<div class="span6 float feature">
				<div class="span2">
					<img src="images/eclipse_logo.png" alt="Eclipse" />
				</div>
				<div class="span3">
					<h4>Advanced IDE Support</h4>
					<p>
						Static typing is not only important for early error detection but even more so for good IDE support.
						To ensure a great and holistic user experience, Xtend's IDE and language have been designed side by side. And of course
						the tools integrate seamlessly with the Eclipse Java IDE. 
					</p>
				</div>
			</div>
			<div class="span6 float feature">
				<div class="span2">
					<img src="images/java8_logo.png" alt="Java FX" />
				</div>
				<div class="span3">
					<h4>Java 8 Ready</h4>
					<p>
						Xtend works well with Java 8 APIs as it does the same kind of target typing coercion for lambdas.
						With its additional syntactical flexibility, of course Xtend code looks much better than the equivalent Java 8 code.
						<a href="http://blog.efftinge.de/2012/12/java-8-vs-xtend.html">Here are some examples</a>. 
					</p>
				</div>
			</div>
			<div class="span6 float feature">
				<div class="span2">
					<img src="images/javafx_logo.jpg" alt="Java FX" />
				</div>
				<div class="span3">
					<h4>XtendFX</h4>
					<p>
						UI programming in Java can be very tedious. 
						Checkout the <a href="https://github.com/svenefftinge/xtendfx">XtendFX project</a> to see how you can get rid of
						Java boiler plate easily. It contains some very useful <a href="documentation/204_activeannotations.html">active annotations</a> for 
						automatically generating JavaFX properties. 
					</p>
				</div>
			</div>
		</div>
	</div>
</div>
    
    <footer class="site-footer">
  <div id="extra">
    <div class="container inner-footer">
      <div class="row">
        <div class="span6">
          <h3 class="footer-links-header">Quick Links</h3>
          <ul class="footer-links clearfix">
            <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>
          <ul class="footer-links clearfix">
            <li><a href="http://www.eclipse.org">Eclipse Home</a></li>
            <li><a href="http://marketplace.eclipse.org/">Market Place</a></li>
            <li><a href="http://live.eclipse.org/">Eclipse Live</a></li>
            <li><a href="http://www.planeteclipse.org/">Eclipse Planet</a></li>
          </ul>
        </div>
        <div class="span6">
            <!-- Social Media Links -->
            <h3 class="footer-links-header"">Social Media</h3>
            <ul class="footer-links clearfix">
              <li>
                <a href="https://twitter.com/xtendlang"><img src="/xtend/images/Twitter-bird-darkgray.png" class="img-responsive" style="margin-right: 5px;height: 1em;" alt="Twitter icon">@xtendlang on Twitter</a>
              </li>
            </ul>
          </div>

      </div>
    </div>
  </div>
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  <a href="http://dryicons.com/">Icons by http://dryicons.com</a>
  <!-- Le javascript
      ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  <script src="/xtend/js/jquery-1.7.1.min.js" type="text/javascript"></script>
  <script src="/xtend/js/bootstrap.min.js" type="text/javascript"></script>
  
  <!-- include pretty-print files -->
  <script src="/xtend/js/prettify.js" type="text/javascript" ></script>
  <script src="/xtend/js/lang-xtend.js" type="text/javascript"></script>
  
  <!-- Include the plug-in -->
  <script src="/xtend/js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="/xtend/js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="/xtend/js/custom.js" type="text/javascript"></script>
  <!--script src="https://apis.google.com/js/platform.js" async defer></script-->
  <!--script type="text/javascript">
    var _gaq = _gaq || [];  
      _gaq.push([ '_setAccount', 'UA-2429174-4' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'http://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->
</footer>

  </body>

</html>
