<!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 id="fork-button" alt="Fork me on GitHub" src="/Xtext/images/forkme_right_white_ffffff.png"></a>
<script>
(function forkButtonQuickFix() {
  var move = function() {
    document.querySelector('#fork-button').style.top =
      document.querySelector('.navbar-inner').offsetHeight + 'px'
  }
  document.addEventListener('DOMContentLoaded', move)
  window.addEventListener('resize', move)
}())
</script>
<!--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/2020/sessions/proposed?keys=Xtext&field_experience_value=All&field_session_type_value=All&og_vocabulary_target_id=" target="_blank" style="text-decoration: underline; color: #fff;">EclipseCon Europe 2020</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"/>
      <li>
        <img src="/Xtext/images/Bosch-Logo.svg" alt="Bosch"/>
        <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/gef/" target="_blank">GEF</a>,
        <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>
