<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>Xtext - Language Engineering Made Easy!</title>
	
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="The website of Eclipse Xtext, an open-source framework for development of programming languages and domain-specific languages">
	<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="/Xtext/images/favicon.png">
	
	<link href="/Xtext/css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='/Xtext/css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="/Xtext/css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="/Xtext/css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="/Xtext/css/style.css" rel="stylesheet" type='text/css'>
	<!-- cover flow -->
	<link href="/Xtext/css/coverflow.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>
  
    <header class="site-header">

  <!-- Navbar -->
  <div class="navbar navbar-fixed-top">
    <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="/Xtext/index.html"></a>
        <div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <!--li ><a href="/Xtext/news.html">News</a></li-->
            <li ><a href="/Xtext/download.html">Download</a></li>
            <li ><a href="/Xtext/documentation/index.html">Documentation</a></li>
            <li ><a href="/Xtext/community.html">Community</a></li>
            <li class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Trainings<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="https://www.itemis.com/en/xtext/support-and-team/" target="_blank">itemis</a></li>
                <li><a href="https://typefox.io/trainings-2" target="_blank">TypeFox</a></li>
              </ul>
            </li>
            <li ><a href="http://xtend-lang.org">Xtend</a></li>
          </ul>
          <!--div class="nav pull-right">
            <li ><a><iframe src="https://ghbtns.com/github-btn.html?user=eclipse&repo=xtext&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe></a></li>
          </div-->
        </div>
        <!--/.nav-collapse -->
      </div>
    </div>
  </div>
  <!-- Navbar End -->

</header>


    <a href="https://github.com/eclipse/xtext"><img style="position: fixed; top: 0; right: 0;z-index:1000; border: 0; " alt="Fork me on GitHub" src="/Xtext/images/forkme_right_white_ffffff.png"></a>
<!--Container-->
<div id="header_wrapper">
  <div class="container image-slider">
    <div class="row">
      <h2>
        Language Engineering For Everyone!
      </h2>
      <p>Xtext is a framework for development of programming languages
        and domain-specific languages. With Xtext you define your language using a powerful grammar language. As a result you get a full infrastructure,
        including <b>parser</b>, <b>linker</b>, <b>typechecker</b>, <b>compiler</b> as well as editing support for <b>Eclipse</b>, <b>any editor that supports the Language Server Protocol</b> and your favorite <b>web browser</b>.
        <br/><i><a href="#intro-quotes">Learn more...</a></i></p>
    </div>
  </div>
  <div class="row" style="text-align:center">
    <div>
      <div id="coverflow">
        <img class="intro-screenshot" style="display:none;" src="/Xtext/images/web_screenshot.png" alt="Xtext in Web Browser">
        <img class="intro-screenshot" src="/Xtext/images/eclipse_screenshot.png" alt="Xtext in Eclipse">
        <img class="intro-screenshot" style="display:none;" src="/Xtext/images/vscode_screenshot.png" alt="Xtext in Visual Studio Code via Language Server Protocol">
      </div>
    </div>
    <div class="cta-section">
      <a href="/Xtext/download.html" style="margin:10px;" class="has-popover btn btn-primary btn-large pull_right">Download</a>
      <a href="/Xtext/documentation/index.html" style="margin:10px;" class="has-popover btn btn-success btn-large pull_right">Getting Started</a>
    </div>
  </div>
</div>

<div id="intro-quotes" class="intro-reference">
  <div class="container">
    <ul id="newsticker" class="newsticker">
      <li>Event: <a href="https://www.eclipsecon.org/europe2017/" target="_blank" style="text-decoration: underline; color: #fff;">EclipseCon Europe 2017</a></li>
    </ul>
  </div>
</div>

<div id="why-xtext">
  <div class="container">
    <div class="row quick-overview">
      <div class="span12">
        <h1>Why Xtext?</h1>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Easy To Learn</h4>
        <p>
          Xtext is designed to onboard you smoothly. Simple languages are easily done within minutes.
          Yet Xtext is flexible enough to build fully-featured, statically-typed programming languages.
        </p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
         High Quality</h4>
        <p>The core framework has been in development for eight years and is used throughout the world in many reasearch and industry projects and even commercial products.</p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Multi Platform</h4>
        <p>
          Whether you are targeting developers or domain experts, you will be able to provide a dedicated smart editor. Eclipse, any editor that supports the Language Server Protocol and various browser
          editors are supported. Have a look at our <a href="#platform-comparison">platform comparison chart</a>.
        </p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Performance</h4>
        <p>
          We know that tools need to be fast in order to be helpful. That is why we spend considerable effort on optimization in every release.
          You can also fine-tune your language if needed, thanks to the configurability of Xtext.
        </p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Easy JVM languages</h4>
        <p>You can build languages for any target platform with Xtext.
          If you target the JVM you can reuse Xbase, a statically typed expression language.
          Linking against Java types, code generation and debugging work out of the box.
        </p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Continuous Integration</h4>
        <p>
          Xtext supports both Gradle and Maven to build your language and use it in downstream projects.
          For Gradle builds, you even get incremental compilation of your language files.
        </p>
      </div>
      <div class="span12">
          <p><br/><i><a href="#feature-overview">Check out the features...</a></i></p>
      </div>
    </div>
  </div>
</div>

<div id="intro-companies" class="intro-reference">
  <div class="container">
    <ul class="companies">
      <li><img src="/Xtext/images/logo-google.png" alt="Google"/>
        <img src="/Xtext/images/Siemens-logo.svg" alt="Siemens"/>
        <img src="/Xtext/images/logo_morgan_stanley.svg" alt="Morgan Stanley"/></li>
      <li>
        <img src="/Xtext/images/ESA_logo.svg" alt="ESA"/>
        <img src="/Xtext/images/Bosch-Logo.svg" alt="Bosch"/>
        <img src="/Xtext/images/SAIC_Logo.svg" alt="SAIC"/>
        <img src="/Xtext/images/SAP-Logo.svg" alt="SAP"/></li>
    </ul>
  </div>
</div>

<div id="feature-overview">
  <div class="container">
    <div class="row quick-overview">
      <div class="span12">
        <h1>Features</h1>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Build the Language You Want!</h4>
        <p>Xtext can build full-featured text editors for both general-purpose and domain-specific languages.
        In the background it uses the <i>LL(*)</i> parser generator of
        ANTLR, allowing to cover a wide range of syntaxes.
        Xtext editors have already been implemented for JavaScript, VHDL, Xtend, and many other languages.</p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Compile to Whatever You Want!</h4>
        <p>You define the target format to which your language is compiled. No matter if it's Java, C, XML,
        comma-separated values, or even a binary format, Xtext does not limit your choice.
        And in combination with <a href="http://xtend-lang.org" target="_blank">Xtend</a> writing a compiler
        becomes easier than ever before.</p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Highly Customizable</h4>
        <p>The default behavior of Xtext is optimized to cover a wide range of languages and use cases.
        However, every language has characteristics that must be reflected in the IDE. Therefore Xtext
        allows to insert custom behavior for every single feature by replacing the default implementation.
        This is done through dependency injection based on
        <a href="https://github.com/google/guice" target="_blank">Google Guice</a>.</p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Single Sourcing</h4>
        <p>The grammar definition language of Xtext is not just for the parser. Many IDE features provided
        by Xtext adapt to your language automatically, so whenever you change your grammar definition,
        the behavior of the text editor is updated without any further code changes. This includes complex
        features such as handling of cross-references, code completion, navigation, syntax coloring,
        validation, and more.</p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Incremental Compiler</h4>
        <p>Xtext is built to scale, so no matter if you have a few source files written in your language
        or hundreds of them, the IDE remains responsive and reacts smoothly to any text change. This is
        realized through an incremental compiler that maintains an index of the available source files
        for fast look-up of language elements.</p>
      </div>
      <div class="span4">
        <h4><img src="/Xtext/images/xtext-bullet.png"/>
          Compatible with Graphical Editors</h4>
        <p>You can combine the text-based formats created with Xtext with many graphical editing frameworks,
        e.g. <a href="https://www.eclipse.org/sirius/" target="_blank">Sirius</a> or
        <a href="https://www.eclipse.org/graphiti/" target="_blank">Graphiti</a>. Xtext offers this flexibility
        by supporting <a href="https://www.eclipse.org/modeling/emf/" target="_blank">EMF</a> as common data
        layer. An Xtext language can be used as storage format for another primary editor, and you can even
        embed text editors inside a graphical editor.</p>
      </div>
    </div>
  </div>
</div>

<div id="platform-comparison" class="container">
  <h2>Editor Features By Platform</h2>
  <table class="table table-bordered">
    <thead>
      <tr>
        <th></th>
        <th style="width:25%;vertical-align: middle;">LSP</th>
        <th style="width:25%;vertical-align: middle;"><img src="/Xtext/images/logo_eclipse.png" alt="Eclipse" style="width:100%;"></th>
        <th style="width:25%;vertical-align: middle;"><img src="/Xtext/images/logo_browsers.png" alt="Web Browser" style="width:100%;"></th>
      </tr>
    </thead>
    <tbody>
      <tr class="has-popover"
      	data-content="Keywords, comments, strings, and other basic text elements are colored according to the syntax definition.">
        <td>Syntax Coloring</td>
        <td><div class="partly-supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Text elements with special meaning in the context of your language can be highlighted with a custom text style, e.g. static fields in Java have an italic font.">
        <td>Semantic Coloring</td>
        <td><div class="not-supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="General errors in the text files are marked automatically, e.g. violations of the specified syntax or references to undefined elements. Additionally, Xtext offers a simple API to implement language-specific checks.">
        <td>Error Checking</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Auto-completion is a powerful tool to speed up writing text in your language. Type Ctrl+Space to invoke it at the current cursor position.">
        <td>Auto-Completion</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Once you have defined rules for handling white space (line breaks, tabs etc.) in your language, you can apply automatic formatting to whole files or parts of them.">
        <td>Formatting</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Display additional information when the mouse hovers over a specific language element, e.g. the comments associated with that element.">
        <td>Hover Information</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="When the cursor is moved to a language element that is referenced from multiple places, all these occurrences are highlighted.">
        <td>Mark Occurences</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Press F3 to navigate directly to the declaration of a referenced element.">
        <td>Go To Declaration</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="When you rename a language element, automatically update all references to it.">
        <td>Rename Refactoring</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="If your language interoperates with Java, the source files are considered during debug sessions in your IDE, i.e. you can set breakpoints and step through statements.">
        <td>Debugging</td>
        <td><div class="not-supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Disable the selected lines of code by inserting comments into each line, or reenable them by removing such comments.">
        <td>Toggle Comments</td>
        <td><div class="partly-supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Display an outline of a file highlighting its structure. This is useful for quick navigation.">
        <td>Outline / Structure View</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Automatic fixes can be proposed for problems that have been found by the error checker.">
        <td>Quick Fix Proposals</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Generate a list of all references to the selected language element.">
        <td>Find References</td>
        <td><div class="supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="If your language interoperates with Java, a tree view of all directly and indirectly called methods can be generated for the selected method.">
        <td>Call Hierarchy</td>
        <td><div class="not-supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="If your language interoperates with Java, a tree view of all directly and indirectly inherited classes and interfaces can be generated for the selected type.">
        <td>Type Hierarchy</td>
        <td><div class="not-supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
      <tr class="has-popover"
      	data-content="Collapse parts of a file that are not important for your current task.">
        <td>Folding</td>
        <td><div class="not-supported"></div></td>
        <td><div class="supported"></div></td>
        <td><div class="not-supported"></div></td>
      </tr>
    </tbody>
  </table>
</div>

    
    <footer class="site-footer">
  <div id="extra">
    <div class="inner">
      <div class="container">
        <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/xtext"><img src="/Xtext/images/Twitter-bird-darkgray.png" class="img-responsive" style="margin-right: 5px;height: 1em;" alt="Twitter icon">@xtext on Twitter</a>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </div>
  </div>
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  <!-- Le javascript
      ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  
  <script src="/Xtext/js/jquery-1.11.3.min.js"></script>
  <script src="/Xtext/js/bootstrap.min.js"></script>
  <script src="/Xtext/js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="/Xtext/js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="/Xtext/js/prettify.js" type="text/javascript"></script>
  <script src="/Xtext/js/lang-xtend.js" type="text/javascript"></script>
  <script src="/Xtext/js/lang-common.js" type="text/javascript"></script>
  <script src="/Xtext/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-3' ]);
    _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-->
  <script src="/Xtext/js/coverflow.min.js" type="text/javascript"></script>
  <script>
      $(function() {
        $('#coverflow').coverflow({
          active : 1,
          visibleAside: 2,
          overlap : 0.5,
          scale : 0.9,
          angle : 20,
          trigger : {
            "itemfocus" : true,
            "swipe" : true,
            "mousewheel" : false
          }
        });
        $('#coverflow :hidden').toggle();
        $(window).resize(function() {
          $('#coverflow').coverflow();
        });
      });

  </script>
</footer>


  </body>

</html>
