<!DOCTYPE html>
<html class="no-js">
    <head>
        <!-- Basic Page Needs
        ================================================== -->
        <meta charset="utf-8">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <link rel="icon" type="image/png" href="images/favicon.ico">
        <title>Capella MBSE Tool - Download</title>
        <meta name="description" content="Capella is an Open Source MBSE tool that implements the Arcadia method. It is a comprehensive, extensible and field-proven MBSE solution.">
        <meta name="keywords" content="">
        <meta name="author" content="">
        <!-- Mobile Specific Metas
        ================================================== -->
        <meta name="format-detection" content="telephone=no">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <!-- Template CSS Files
        ================================================== -->
        <!-- Twitter Bootstrs CSS -->
        <link rel="stylesheet" href="css/bootstrap.min.css">
        <!-- animate css -->
        <link rel="stylesheet" href="css/animate.css">
        <link rel="stylesheet" href="css/jquery.fancybox.css">
        <!-- template main css file -->
        <link rel="stylesheet" href="css/main.css">
        <!-- responsive css -->
        <link rel="stylesheet" href="css/responsive.css">
		<link rel="stylesheet" href="css/latofonts.css">
		
        <script src="https://use.fontawesome.com/b51f77a16a.js"></script>

        <!-- Cookie content -->
        <link rel="stylesheet" type="text/css" href="//www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css" />
        <script src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script>

        <!-- Eclipse Foundation Google Tag Manager -->
		<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
		new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
		j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
		'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
		})(window,document,'script','dataLayer','GTM-5WLCZXC');</script>
		<!-- End Google Tag Manager -->

        <!-- Template Javascript Files
        ================================================== -->
		<!-- Angular -->
		<base href="/capella/">
		<script src="js/angular-1.7.8.min.js"></script>
		<script src="angular/capella.js"></script>

        <!-- modernizr js -->
        <script src="js/vendor/modernizr-2.6.2.min.js"></script>
        <!-- jquery -->
        <script src="js/jquery-3.4.1.min.js"></script>
        <script src="js/popper-1.14.3.min.js"></script>
        <!-- bootstrap js -->
        <script src="js/bootstrap.min.js"></script>
        <!-- wow js -->
        <script src="js/wow.min.js"></script>
        <!-- template main js -->
        <script src="js/main.js"></script>
    </head>
    <body ng-app="capella" data-deferred-cloak>
    	<!--
        ==================================================
        Header Section
        ================================================== -->
    	<ng-include src="'angular/blocks/header.html'"></ng-include>
        <!--
        ==================================================
        Intro Section
        ================================================== -->
        <section class="hero-area dwnld">
            <div class="container">
                <div class="row">
                    <div class="col-md-12 text-center">
                        <div class="block wow fadeInUp" data-wow-delay=".3s">
                            <section class="cd-intro">
                                <h1 class="wow fadeInUp animated" data-wow-delay=".4s" >
                                	Download
                                </h1>
                            </section> <!-- cd-intro -->
                            <h2 class="wow fadeInUp animated" data-wow-delay=".6s" >Get the latest Eclipse Capella tool release and related extensions</h2>
                        </div>
                    </div>
                </div>
            </div>
        </section><!--/#intro_banner-->

        <!--
        ==================================================
        Main Content
        ================================================== -->

		<!-- Capella Download -->
        <section id="capellaDwnld" class="text-center">
            <div class="container">
                <h2 class="title wow fadeInDown" data-wow-delay=".3s">Capella</h2>
                <div id="capellaMainLink" class="row">
                	<p class="wow fadeInDown" data-wow-delay=".5s">Open source MBSE tool to create system, software or hardware architectures</p>
					<br/>
				</div>
			</div>

		</section> <!-- #capellaDwnld -->

 		<!-- Main Capella Download Links -->
		 <section id="capellaResources" class="bg_indigo text-center next-section">
            <p class="txt_white text-center"><span class="caret">&nbsp; </span></p>
            <div class="container">
                <div class="row">
                    <div class="col-sm-4 col-xs-12 wow fadeInLeft animated">
                        <figure class="wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="0ms">
                        	<div id="capellaPlatformLinks">
                                <h4 class="txt_white">Other Platforms</h4><br>
                            </div>
                        </figure>
                    </div>
                    <div class="col-sm-4 col-xs-12 wow fadeInLeft animated">
                        <figure class="wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="300ms">
                            <div>
                                <h4 class="txt_white">Resources</h4><br>
           	     				<p><a class="wow fadeInUp animated" data-wow-delay=".2s" href="https://github.com/eclipse/capella/blob/master/doc/plugins/org.polarsys.capella.ui.doc/html/Installation Guide/How to install Capella and Addons.mediawiki#table-of-contents" target="_blank">Installation <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
           	     				<p><a class="wow fadeInUp animated" data-wow-delay=".3s" href="getstarted.html" target="_blank">Getting Started <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
           	     				<p><a class="wow fadeInUp animated" data-wow-delay=".4s" href="https://github.com/eclipse/capella" target="_blank">Source Code <i class="fa fa-github" aria-hidden="true"></i></a></p>
								<p><a class="wow fadeInUp animated" data-wow-delay=".5s" href="support.html" target="_self">Documentation <i class="fa fa-fexternal-link" aria-hidden="true"></i></a></p>
								<p><a class="wow fadeInUp animated" data-wow-delay=".6s" href="https://github.com/eclipse/capella/wiki" target="_blank">Nightly Versions** <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
								<p><a class="wow fadeInUp animated" data-wow-delay=".7s" href="https://github.com/eclipse/capella/releases" target="_blank">Previous Versions <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
                            </div>
                        </figure>
                    </div>
                    <div class="col-sm-4 col-xs-12 wow fadeInLeft animated">
                        <figure class="wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="300ms">
                            <div>
                                <h4 class="txt_white">Sample Models</h4><br>
                                <p class="txt_white wow fadeInUp animated" data-wow-delay=".3s">Level-crossing Traffic Control<br>
                                    <a href="https://download.eclipse.org/capella/samples/5.0.0/LevelCrossingTrafficControl.zip" onClick="ga('send', 'event', 'Capella', '5.0.x', 'ATM');">EN <i class="fa fa-download" aria-hidden="true"></i></a> -
                                    <a href="https://download.eclipse.org/capella/samples/5.0.0/LevelCrossingTrafficControl_fr.zip" onClick="ga('send', 'event', 'Capella', '5.0.x', 'ATM');">FR <i class="fa fa-download" aria-hidden="true"></i></a>
                                </p>
                                <p class="txt_white wow fadeInUp animated" data-wow-delay=".3s">In-Flight Entertainment (IFE)<br>
                                    <a href="https://download.eclipse.org/capella/samples/5.0.0/InFlightEntertainmentSystem.zip" onClick="ga('send', 'event', 'Capella', '5.0.x', 'IFE');">EN <i class="fa fa-download" aria-hidden="true"></i></a> - 
                                    <a href="resources/doc/IFE_XHTML_DocGen_5.0.0_for_capella_5.0.0/output/index.html" target="_blank">Doc <i class="fa fa-html5" aria-hidden="true"></i></a>
                                </p>
           	     				<p><a class="wow fadeInUp animated" data-wow-delay=".3s" href="http://download.eclipse.org/capella/samples/?d" target="_blank">Samples for older releases <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
           	     			</div>
                        </figure>
                    </div>
                    <div class="clearfix"> </div>
                    <br>
                    <p class="small txt_white wow fadeInUp animated" data-wow-delay=".6s"><em>(*) Mac and Linux versions have not been field-tested.</em></p>
                    <p class="small txt_white wow fadeInUp animated" data-wow-delay=".7s"><em>(**) Nightly versions integrate the latest developments to test before official releases.</em></p>
                    <p class="small txt_white wow fadeInUp animated" data-wow-delay=".7s"><em>Do not hesitate to provide your feedback on the forum.</em></p>
                </div>
            </div>
		</section> <!-- #capellaResources -->


		<!-- Capella Add-Ons -->
        <section id="capellaExtensions" class="bg_lightest_grey text-center">
            <div class="container">
                <h2 class="title wow fadeInDown" data-wow-delay=".3s">Capella Add-ons</h2>
                <div class="row">
                    <p class="wow fadeInDown" data-wow-delay=".5s">Beyond the workbench, the Capella ecosystem provides a rich set of open-source and commercial add-ons:<br>
                    document generation, requirements authoring, team collaboration, simulation, variability management, ...</p>
               		<p><a class="wow fadeInDown btn btn-default" data-wow-delay=".6s" href="addons.html"><i class="fa fa-puzzle-piece" aria-hidden="true"></i> Discover all the available add-ons</a></p>
               		
                    <p class="wow fadeInDown" data-wow-delay=".5s"><br>
                    To install Capella extensions have a look to the <a href="https://github.com/eclipse/capella/blob/master/doc/plugins/org.polarsys.capella.ui.doc/html/Installation%20Guide/How%20to%20install%20Capella%20and%20Addons.mediawiki#Configuration_and_Extensibility" target="_blank">installation procedure</a></p>
                    <br>
                    <br>
                    <br>
                    <br>
                    <br>
                </div>
                <div class="row">
                	<div class="col-sm-6 col-xs-12 wow fadeInLeft animated">
                        <figure class="wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="300ms">
                            <div>
                                <h4>Main open-source add-ons</h4>Field proven and maintained open-source add-ons<br/><br/>
                                <div id="capella-addons"></div>
                            </div>
                        </figure>
                    </div>
					
                    <div class="col-sm-6 col-xs-12 wow fadeInLeft animated">
                        <figure class="wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="300ms">
                            <div>
                                <h4>Labs add-ons</h4>
								It is the place where Capella users, as well as tool providers,<br/>can collaborate and create synergies to develop Capella add-ons
								<a class="btn btn-default" href="https://labs4capella.github.io">Discover Labs for Capella&nbsp;<i class="fa fa-external-link"></i>
									</a>
								<br/><br/>
								<br/>
                            </div>
                            <div>
                                <br/><h4>Sample add-ons</h4>Add-ons that show how to start developing<br/>add-ons for Capella using Capella Studio
								<br/><br/>
                                <div id="capella-sample"></div>
                            </div>
                        </figure>
                    </div>
                </div>
        </div>


		</section> <!-- #capellaExtensions -->

		<!-- Capella Studio -->
        <section id="capellaStudio" class="text-center">
            <div class="container">
                <h2 class="title wow fadeInDown" data-wow-delay=".3s">Capella Studio</h2>
                <div id="capellaStudioMainLink" class="row">
                	<p class="wow fadeInDown" data-wow-delay=".5s">Open source SDK to develop Capella add-ons</p>
                	<p class="wow fadeInDown" data-wow-delay=".6s"><em>Capella Studio doesn't contain Capella </em></p>
                    <br>
				</div>
			</div>
		</section> <!-- #capellaStudio -->

		<!-- Main Capella Studio Download Links -->
        <section id="capellaStudioResources" class="bg_indigo text-center next-section">
        <p class="txt_white text-center"><span class="caret">&nbsp; </span></p>
            <div class="container">
                <div class="row">
                    <div class="col-sm-6 col-xs-12 wow fadeInLeft animated">
                        <figure class="wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="0ms">
                        	<div id="capellaStudioPlatformLinks">
                                <h4 class="txt_white">Other Platforms</h4><br>
                            </div>
                        </figure>
                    </div>
                    <div class="col-sm-6 col-xs-12 wow fadeInLeft animated">
                        <figure class="wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="300ms">
                            <div>
                                <h4 class="txt_white">Resources</h4><br>
           	     				<p><a class="wow fadeInUp animated" data-wow-delay=".6s" href="https://wiki.eclipse.org/Capella/Studio" target="_blank">Documentation <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
								<p><a class="wow fadeInUp animated" data-wow-delay=".6s" href="https://github.com/eclipse/capella-studio" target="_blank">Source Code <i class="fa fa-github" aria-hidden="true"></i></a></p>
								<p><a class="wow fadeInUp animated" data-wow-delay=".6s" href="https://download.eclipse.org/capella/capellastudio/products/nightly/?d" target="_blank">Nightly Versions** <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
								<p><a class="wow fadeInUp animated" data-wow-delay=".6s" href="https://download.eclipse.org/capella/capellastudio/products/release/?d" target="_blank">Previous Versions <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
                            </div>
                        </figure>
                    </div>
                    <div class="clearfix"> </div>
                    <br>
                    <p class="small txt_white wow fadeInUp animated" data-wow-delay=".6s"><em>(*) Mac and Linux versions have not been field-tested.</em></p>
                    <p class="small txt_white wow fadeInUp animated" data-wow-delay=".7s"><em>(**) Nightly versions integrate the latest developments to test before official releases.</em></p>
                    <p class="small txt_white wow fadeInUp animated" data-wow-delay=".7s"><em>Do not hesitate to provide your feedback on the forum.</em></p>
                </div>
            </div>
		</section> <!-- #capellaResources -->

			<script>

                    function updateMainLink(mainLinkId, data, product) {
                        let mainId = "windows";
						let title = "Get {0} {1} for {2} {3}".format(product.name, product.version, data.lang[mainId].text, data.lang["main"].text);
                        let mainLink = '<p><a class="wow fadeInUp animated btn btn-default animated" data-wow-delay=".6s" href="{0}" style="visibility: visible; animation-delay: 0.6s; animation-name: fadeInUp;" onClick="ga(\'send\', \'event\', \'{1}\', \'{2}\', \'{3}\');"><i class="fa fa-download" aria-hidden="true"></i> {4}</a></p>'.format(product.links[mainId].main, product.key, data.versionBranch, data.lang[mainId].key, title);
                        document.getElementById(mainLinkId).innerHTML += mainLink;
                    }

                    function updatePlatformLinks(platformLinksId, data, product) {
                        let lis = Object.keys(product.links).map(function (k) {
                            let link = product.links[k];
                            let linkss = Object.keys(link).map(function (key) { return '<a href="{0}" onClick="ga(\'send\', \'event\', \'{1}\', \'{2}\', \'{3}\');">{4}</a>'.format(link[key], product.key, data.versionBranch, data.lang[k].key, data.lang[key].text);  }).join(" - ");
                            return '<p class="txt_white wow fadeInUp animated" data-wow-delay=".4s"><i class="{0}" aria-hidden="true"></i> {1}<br/>{2}</p>'.format(data.lang[k].icon, data.lang[k].text, linkss);
                        }).join("");
                        document.getElementById(platformLinksId).innerHTML += lis;
                    }

                    function createKeysLinks(data, addon, download, icons) {
							let keys = Object.keys(download).filter(function(x) { return x != "notes" });
							let links = keys.map(function(k) {
							let icon = icons == undefined && data.lang[k].icon ? '<i class="pl-2 {0}" aria-hidden="true"></i>'.format(data.lang[k].icon) : "";
							if (data.lang[k].target == "_expand") {
								return '<a data-toggle="collapse" data-target="#collapse-notes-{3}">{4}{5}</a>'.format(download[k], data.lang[k].target, data.versionBranch, addon.key, data.lang[k].text, icon);
							} else if (Array.isArray(download[k])) {
								let value = download[k];
								return data.lang[k].text + "s"+ icon + " (" + value.map(function(x) { return '<a href="{0}" onClick="ga(\'send\', \'event\', \'Capella\', \'{1}\', \'{2}\');">{3}</a>'.format(x.url, data.versionBranch, addon.key, x.name) }).join(" + ")+")";
							}
							return '<a href="{0}" {1} onClick="ga(\'send\', \'event\', \'Capella\', \'{2}\', \'{3}\');">{4}{5}</a>'.format(download[k], data.lang[k].target == undefined ? "" : 'target="'+data.lang[k].target+'}"', data.versionBranch, addon.key, data.lang[k].text, icon);
						 }).join(" - ");
						 return links;
                    }
                  
                    function updateAddonLinks(data) {
                        let addons = "";
                        let sample = "";
                        let filteredAddons = data.addons.filter(function (a) { return a.showOnMainPage; });
                        for (i in filteredAddons) {
                            let addon = filteredAddons[i];
                            let keys = Object.keys(addon.download);
                            let links = createKeysLinks(data, addon, addon.download, false);
					        let header = [];
							if (addon.contact) {
								header.push('Contact: '+addon.contact);
							}
							if (addon.licence) {
								header.push('License: '+addon.licence);
							}
							header=header.join(" - ");
							let information = '<p><i>{0}</i></p><p>{1}</p>'.format(header, addon.description);
							
							let compatible = addon.compatibleWithCurrentVersion === false ? '<button role="button" class="fa fa-exclamation-triangle btn-link btn-xs alert-compatibility" data-toggle="tooltip" data-placement="bottom" title="{0}" ></button>'.format(data.lang.compatibility.text) : "";
							let information2 = '<button role="button" class="fa fa-info-circle btn-link btn-xs " data-toggle="popover" data-trigger="focus" data-placement="bottom" title="{0}" data-content="{1}"></button>'.format(addon.name, information);
							
							let addonName = addon.isViewpoint ? addon.name + " Viewpoint" : addon.name;
                            
                            let sections = keys.filter(function(k) { return data.lang[k].target == "_expand" }).map(function(k) {
                                let div = '<div class="collapse notes-section" id="collapse-notes-'+addon.key+'"><h3>'+data.lang[k].text+'</h3>'+createKeysLinks(data, addon, addon.download[k])+addon.download[k]["notes"]+'</div>';
							    return div;
                            }).join("");
                            
                            let result = '<p class="wow fadeInUp animated" data-wow-delay=".3s">{0} {1}<br/><span class="small pl-2">{2}{3}</span></p>{4}<br/>'.format(addonName, information2, compatible, links, sections);

                            if (addon.isSample) {
                                sample += result;
                            } else {
                                addons += result;
                            }
                      }
                      document.getElementById("capella-addons").innerHTML = addons;
                      document.getElementById("capella-sample").innerHTML = sample;
					  
					  $('[data-toggle="popover"]').popover( { html: true, container: 'body' });
					  $('[data-toggle="tooltip"]').tooltip();
                    }

                   $.getJSON('json/downloads.json', function(data) {

                        updateMainLink("capellaMainLink", data, data.capella);
                        updatePlatformLinks("capellaPlatformLinks", data, data.capella);

                        updateMainLink("capellaStudioMainLink", data, data.capellaStudio);
                        updatePlatformLinks("capellaStudioPlatformLinks", data, data.capellaStudio);

                        updateAddonLinks(data);

                  });
              </script>

         <!-- Need Help Section -->
        <section class="text-center bg_lightest_grey">
            <div class="container">
                <div class="row">
                    <h2 class="title wow fadeInDown" data-wow-delay=".3s" data-wow-duration="500ms">Need Help?</h2>
                    <br>
                </div>
                <div class="row">
                	<div class="col-md-offset-2 col-md-4 wow fadeInLeft animated">
						<p>Use the public forum to communicate with <br>the Capella worldwide community</p>
                        <p><a class="wow fadeInUp animated btn btn-default animated" data-wow-delay=".6s" href="https://forum.mbse-capella.org/" target="_blank">Capella Forum</a></p>
                    </div>
                    <div class="col-md-4 wow fadeInUp animated animated">
                        <p>Discover the services provided by <br>the Capella ecosystem</p>
                        <p><a class="wow fadeInUp animated btn btn-default animated" data-wow-delay=".6s" href="services.html">Professional Services</a></p>
                    </div>
                </div>
            </div>
        </section>

		<div id="back-to-top" data-spy="affix" data-offset-top="100"
			class="back-to-top hidden-xs hidden-sm affix-top">
			<button class="btn btn-default" title="Back to Top">
				<i class="fa fa-caret-up"></i>
			</button>
		</div>
		<script type="text/javascript">
		// Back to top
			jQuery('#back-to-top').on('click', function() {
				jQuery("html, body").animate({
					scrollTop : 0
				}, 500);
				return false;
			});
		</script>

        <!--
        ==================================================
        Footer Section
        ================================================== -->
        <ng-include src="'angular/blocks/footer.html'"></ng-include>
        <script async src="js/googleAnalytics.js" ></script>
    </body>
</html>