<!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&trade; 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>