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

Apache Arrow
============

Apache Arrow is a development platform for in-memory analytics. It contains a
set of technologies that enable big data systems to process and move data
fast. It specifies a standardized language-independent columnar memory format
for flat and hierarchical data, organized for efficient analytic operations on
modern hardware.

The project is developing a multi-language collection of libraries for solving
systems problems related to in-memory analytical data processing. This includes
such topics as:

* Zero-copy shared memory and RPC-based data movement
* Reading and writing file formats (like CSV, Apache ORC, and Apache Parquet)
* In-memory analytics and query processing

.. _toc.columnar:

.. toctree::
   :maxdepth: 2
   :caption: Arrow Specifications and Protocols

   format/Versioning
   format/Columnar
   format/Flight
   format/Integration
   format/CDataInterface
   format/Other

.. _toc.usage:

.. toctree::
   :maxdepth: 2
   :caption: Arrow Libraries

   cpp/index
   python/index
   Java <https://arrow.apache.org/docs/java/>
   C GLib <https://arrow.apache.org/docs/c_glib/>
   JavaScript <https://arrow.apache.org/docs/js/>
   R <https://arrow.apache.org/docs/r/>

.. _toc.development:

.. toctree::
   :maxdepth: 2
   :caption: Development and Contributing

   developers/contributing
   developers/cpp/index
   developers/python
   developers/integration
   developers/crossbow
   developers/benchmarks
   developers/documentation
