---
layout: news
title: News
permalink: /news/
author: all
---
<!--
{% comment %}
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to you under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
{% endcomment %}
-->

{% for post in site.posts %}
  {% include news_item.html %}
{% endfor %}

<p></p>

<h2>Calcite Twitter</h2>

<p>The official <a href="https://twitter.com/ApacheCalcite">@ApacheCalcite</a>
Twitter account pushes announcements about Calcite. If you give a talk about
Calcite, let us know and we'll tweet it out and add it to the news section
of the website.</p>
