<!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://www.typefox.io/language-engineering/" 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/2021/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 2021</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>
