<!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 research 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 Occurrences</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://www.planeteclipse.org/">Eclipse Planet</a></li>
              <li><a href="https://www.eclipse.org/forums/index.php/f/27/">Xtext Forum</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>
