---
title: Apache CloudStack Mailing Lists
---

<div class="row">

<div class="col-lg-12">

<div class="page-header">

<h1 id="indicators">Apache CloudStack: Mailing Lists</h1>

</div>

</div>

</div>

If you're interested in learning more or participating in the Apache CloudStack project, the mailing lists are the best way to do that. While the project has several communications channels, the mailing lists are the most active and the official channels for making decisions about the project itself. *["If it didn't happen on a mailing list, it didn't happen."](http://community.apache.org/newbiefaq.html#NewbieFAQ-IsthereaCodeofConductforApacheprojects?")*

The project currently has several lists:

- [announce@](https://lists.apache.org/list.html?announce@cloudstack.apache.org): Project release, security and other announcements. This is a very low volume list.
- [users@](https://lists.apache.org/list.html?users@cloudstack.apache.org): This list is for users of CloudStack to seek and provide support. This is a moderately high volume list.
- [dev@](https://lists.apache.org/list.html?dev@cloudstack.apache.org): Where discussions about development and the project itself happen. This is a high volume list.
- [commits@](https://lists.apache.org/list.html?commits@cloudstack.apache.org): This list is for commits to the CloudStack git repository. It's a high volume list with automated messages, probably of limited interest to anyone who is not actively developing Apache CloudStack.
- [issues@](https://lists.apache.org/list.html?issues@cloudstack.apache.org): Notifications from CloudStack's Jira project. This is a high volume list.
- [marketing@](https://lists.apache.org/list.html?marketing@cloudstack.apache.org): Discussions about marketing CloudStack.

The preferred language to use on the lists above is English. To support the global nature of the CloudStack user community, we also have the following regionally specific user lists:

- [users-cn@](https://lists.apache.org/list.html?users-cn@cloudstack.apache.org): Chinese

<div>
	<strong>Search the CloudStack Mailing Lists</strong>: <input id="queryStringToSearchOnMailingList" type="text" name="q" size="60"/>
	<a id="searchOnCloudStackMailingLists" class="button" target="_blank" href="#" >Search</a>
</div>

<script>
	var searchEmailListBaseUrl = "https://lists.apache.org/list.html?users@cloudstack.apache.org:lte=1M&q=";
	$('#queryStringToSearchOnMailingList').change(function(){
		$('#searchOnCloudStackMailingLists').attr('href', searchEmailListBaseUrl + $(this).val());
	});
</script>

## To Subscribe to the Mailing Lists

If you want to subscribe to list, send an email to *listname*-subscribe@cloudstack.apache.org:

- To join the announce mailing list email <a href="mailto:announce-subscribe@cloudstack.apache.org">announce-subscribe@cloudstack.apache.org</a>.
- To join the users mailing list email <a href="mailto:users-subscribe@cloudstack.apache.org">users-subscribe@cloudstack.apache.org</a>.
- To join the users-cn mailing list email <a href="mailto:users-cn-subscribe@cloudstack.apache.org">users-cn-subscribe@cloudstack.apache.org</a>.
- To join the dev mailing list email <a href="mailto:dev-subscribe@cloudstack.apache.org">dev-subscribe@cloudstack.apache.org</a>.
- To join the commits mailing list email <a href="mailto:commits-subscribe@cloudstack.apache.org">commits-subscribe@cloudstack.apache.org</a>. 
- To join the issues mailing list email <a href="mailto:issues-subscribe@cloudstack.apache.org">issues-subscribe@cloudstack.apache.org</a>. 
- To join the marketing mailing list email <a href="mailto:marketing-subscribe@cloudstack.apache.org">marketing-subscribe@cloudstack.apache.org</a>. 

## To Unsubscribe to the Mailing Lists

Decided you're getting too much mail? To unsubscribe from one of the lists, send an email to *listname*-unsubscribe@cloudstack.apache.org from the same email you subscribed with.

- To leave the announce mailing list email <a href="mailto:announce-unsubscribe@cloudstack.apache.org">announce-unsubscribe@cloudstack.apache.org</a>.
- To leave the users mailing list email <a href="mailto:users-unsubscribe@cloudstack.apache.org">users-unsubscribe@cloudstack.apache.org</a>.
- To leave the users-cn mailing list email <a href="mailto:users-cn-unsubscribe@cloudstack.apache.org">users-cn-unsubscribe@cloudstack.apache.org</a>. 
- To leave the dev mailing list email <a href="mailto:dev-unsubscribe@cloudstack.apache.org">dev-unsubscribe@cloudstack.apache.org</a>.
- To leave the commits mailing list email <a href="mailto:commits-unsubscribe@cloudstack.apache.org">commits-unsubscribe@cloudstack.apache.org</a>. 
- To leave the issues mailing list email <a href="mailto:issues-unsubscribe@cloudstack.apache.org">issues-unsubscribe@cloudstack.apache.org</a>. 
- To leave the marketing mailing list email <a href="mailto:marketing-unsubscribe@cloudstack.apache.org">marketing-unsubscribe@cloudstack.apache.org</a>. 

**Please do not send emails to the list asking for someone to unsubscribe you.** 

## Conduct on Mailing Lists

We expect all participants on the mailing list to treat one another professionally and politely. 
