.. 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.

Welcome to Apache Cassandra's documentation!
============================================

This is the official documentation for `Apache Cassandra <http://cassandra.apache.org>`__ |version|.  If you would like
to contribute to this documentation, you are welcome to do so by submitting your contribution like any other patch
following `these instructions <https://wiki.apache.org/cassandra/HowToContribute>`__.

Contents:

.. toctree::
   :maxdepth: 2

   getting_started/index
   architecture/index
   data_modeling/index
   cql/index
   configuration/index
   operating/index
   tools/index
   troubleshooting/index
   development/index
   faq/index
   plugins/index

   bugs
   contactus
