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

.. default-domain:: cpp
.. highlight:: cpp

Getting Started
===============

The following articles demonstrate installation, usage, and a basic
understanding of C++ Paimon. These articles will get you set up quickly with C++
Paimon and give you a taste of what the library is capable of.

Start here to gain a basic understanding of Paimon, and move on to the
:doc:`/user_guide` to explore more specific topics and
underlying concepts, or the :doc:`/api` to explore Paimon's API.

.. toctree::

   building
   build_system
   basic_concepts
   documentations
