---
title: Welcome to CloudStack
---

<div class="row">
  <div class="col-lg-12">
    <div class="bs-example">
      <div class="jumbotron">
        <div class="row">
          <div class="col-lg-8" style="margin-top:22px;">
            <h1 style="margin-top:28px;">Apache CloudStack&#8482;</h1>
            <p>Open Source Cloud Computing&#8482;</p>
          </div>

          <div class="col-lg-4">
            <img src="images/monkey.png" style="width: 210px; margin-left: 115px;" alt="Cloud friendly">
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<div class="row">
  <div class="col-lg-6">

    <div class="panel panel-default">
      <div class="panel-heading">
        About CloudStack
      </div>
      <div class="panel-body">
        <p>Apache CloudStack is open source software designed to deploy and manage large networks of virtual machines, as a highly available, highly scalable Infrastructure as a Service (IaaS) cloud computing platform. CloudStack is used by a number of service providers to offer public cloud services, and by many companies to provide an on-premises (private) cloud offering, or as part of a hybrid cloud solution.</p>
        <p>CloudStack is a turnkey solution that includes the entire "stack" of features most organizations want with an IaaS cloud: compute orchestration, Network-as-a-Service, user and account management, a full and open native API, resource accounting, and a first-class User Interface (UI).</p>
        <p>CloudStack currently supports the most popular hypervisors: VMware, KVM, Citrix XenServer, Xen Cloud Platform (XCP), Oracle VM server and Microsoft Hyper-V.</p>
        <p>Users can manage their cloud with an easy to use Web interface, command line tools, and/or a full-featured RESTful API. In addition, CloudStack provides an API that's compatible with AWS EC2 and S3 for organizations that wish to deploy hybrid clouds.</p>
        <a href="about.html"><button type="button" class="btn btn-info">Learn More</button></a>
      </div>
    </div>


    <div class="panel panel-default">
      <div class="panel-heading">
        Latest Announcements
        <a href="https://blogs.apache.org/cloudstack/feed/entries/atom"><img src="images/feed-icon-14x14.png" class="pull-right" alt=""></a>
      </div>
      <div class="panel-body">
        <div id="atom-cloudstack" style="margin-left: 4px;"></div>
      </div>
    </div>


    <div class="panel panel-default">
      <div class="panel-heading">
        CloudStack Events
      </div>
      <div class="panel-body" id="events">
        <h4>Upcoming CloudStack Events</h4>
        <p>There's always plenty of Cloudstack Events happening in different parts of the world. These range from Meetups, User Groups to <a href="http://cloudstackcollab.org/">CloudStack Collaboration Conference</a>
        events. Each event will feature a lot of opportunities to learn,
        collaborate and engage with the CloudStack community. The CloudStack
        Collaboration Conferences are valuable for both developers and users, and
        are a great way to get involved with the community.</p>
        <ul type="disc" style="padding-inline-start: 15px">
          <div id="csv-events"></div> 
        </ul>
        <p> View videos from previous CloudStack Collaboration Conferences:</p>
        <ul type="disc" style="padding-inline-start: 15px">
            <li>
                <a
                    href="https://www.youtube.com/playlist?list=PLU2OcwpQkYCwcPxZMKX2BFoKE0Z7g1ENH"
                    target="_blank">
                    CloudStack Collaboration Conference June 2018 in Montreal
                </a>
            </li>  
            <li>
                <a
                    href="https://www.youtube.com/playlist?list=PLCfLScXpEyAS4YkJpeqDriP7JcU82Tx2r"
                    target="_blank">
                    CloudStack Collaboration Conference June 2016 in Montreal
                </a>
            </li>
            <li>
                <a
                    href="https://www.youtube.com/playlist?list=PLGeM09tlguZSeNyOyQKJHNX4pxgK-yoTA"
                    target="_blank">
                    CloudStack Collaboration Conference Europe 2015 in Dublin
                </a>
            </li>
        </ul>
      </div>
    </div>


    <div class="panel panel-default">
      <div class="panel-heading">
        Join Us
      </div>
      <div class="panel-body">
	<p>Learn more about getting involved with Apache CloudStack on the <a href="contribute.html">Contributing to Apache CloudStack</a> page, or go straight to our <a href="developers.html">Developer Resources</a> page.</p>
      </div>
    </div>
    
    
  </div>
  
  <div class="col-lg-6">


    <div class="panel panel-default">
      <div class="panel-heading">
        Get CloudStack
      </div>
      <div class="panel-body">
        <p class="text-warning">Apache CloudStack <%= data.cloudstack.versions.main %> is out!</p>
        <% if data.cloudstack.versions.main_islts %>
          <p>This is current CloudStack LTS release.</p>
        <% else %>
          <p>This is non-LTS release of CloudStack.</p>
        <% end %>
        <a href="downloads.html"><button type="button" class="btn btn-success">Download</button></a>
        <a href="<%= data.cloudstack.versions.main_docs_url %>"><button type="button" class="btn btn-success">Documentation</button></a>
        <% if data.cloudstack.versions.main_islts == false %>
        <p style="margin-top: 20px;">If you prefer proven stability rather than the newest features, please take a look at the previous LTS release.</p>
        <p class="text-warning">Previous Apache CloudStack LTS Release is <%= data.cloudstack.versions.lts %>.</p>
        <a href="downloads.html"><button type="button" class="btn btn-success">Download</button></a>
        <a href="<%= data.cloudstack.versions.lts_docs_url %>"><button type="button" class="btn btn-success">Documentation</button></a>
        <% end %>
        <p style="margin-top: 20px;">
        Looking for other versions of Apache CloudStack? You can find them in our <a href="archives.html">archives</a> page as well.
        </p>
      </div>
    </div>


    <div class="panel panel-default">
      <div class="panel-heading">
        What are people saying?
      </div>
      <div class="panel-body">
        <div class="tw">
          <a class="twitter-timeline" data-height="1000" data-theme="light" href="https://twitter.com/CloudStack?ref_src=twsrc%5Etfw">Tweets by CloudStack</a>
          <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 
        </div>
      </div>
    </div>
  </div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="javascripts/FeedEk.min.js"></script>

<script type="text/javascript">
  $(function () {
    $('#atom-cloudstack').FeedEk({
      FeedUrl: 'https://blogs.apache.org/cloudstack/feed/entries/atom',
      ShowDesc: false,
      MaxCount: 3,
      DateFormat: 'D',
      DateFormatLang: 'en'
    });
  });
</script>

<script type="text/javascript">
  $(document).ready(function() {
    $.ajax({
      type: "GET",
      // github controlled datasource
      url: "https://raw.githubusercontent.com/apache/cloudstack-www/master/data/acs-events.csv",
      dataType: "text",
      success: function(data) {processData(data);}
    });
  });
  
 function processData(data) {
      var lines = data.split(/\r\n|\n/);

      //Set up the data arrays

      var event_title = [];
      var event_link = [];
      var event_location = [];
      var event_date = [];

      var headings = lines[0].split(','); // Splice up the first row to get the headings - not used after atm

      for (var j=1; j<lines.length; j++) {
      var values = lines[j].split(','); // Split up the comma seperated values
         // read in event details as arrays 
         event_title.push(values[0]); 
         event_link.push(values[1]);
         event_location.push(values[2]);
         event_date.push(values[3]);
      }
// alert(lines);

    var div = document.getElementById("csv-events");
    var html = "";
    for (var i=0;i<lines.length;i++) {
      if (typeof event_location[i] !== "undefined") {
        html += '<li> <a href=\"' + event_link[i] + '\" target=\"_blank\">' + event_title[i] + "</a> , " + event_location[i] + ", " + event_date[i] + "</li>";
      }
    }
    
    // write html to page
    div.innerHTML = html;
}
	
</script>

