// Copyright 2015 Cloudera, Inc.
//
// Licensed 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.

= Kudu Documentation

// License Header Here //
:author: Kudu Team
:imagesdir: ./images
:icons: font
:doctype: book
:backend: html5
:sectlinks:
:experimental:

++++
<div class="landing_page">
++++

link:introduction.html[Introducing Kudu]::
  Get familiar with what sets Kudu apart.

link:release_notes.html[Kudu Beta Release Notes]::
  Find out what to expect in Kudu public beta releases, as well as known issues, workarounds,
  and limitations.

link:quickstart.html[Getting Started With Kudu]::
  Deploy a simple proof-of-concept Kudu cluster to try it out for yourself.

link:installation.html[Installation Guide]::
  Details about all the different options for installing Kudu.

link:configuration.html[Configuring Kudu]::
  Guidelines for customizing your Kudu cluster.

link:kudu_impala_integration.html[Using Impala With Kudu]::
  Using Impala to create, query, and update your Kudu tables.

link:administration.html[Administering Kudu]::
  Keeping Kudu running smoothly.

link:troubleshooting.html[Troubleshooting Kudu]::
  Guidelines for solving problems with your Kudu cluster.

link:developing.html[Developing Applications With Kudu]::
  Information about Kudu APIs and links to working example code.

link:schema_design.html[Kudu Schema Design]::
  Information about designing Kudu table schemas.

link:contributing.html[Contributing to Kudu]::
  Get involved in the Kudu community.

link:style_guide.html[Kudu Style Guide]::
  Guidelines for development and documentation contributions to the Kudu project.

link:configuration_reference.html[Kudu Configuration Reference]::
  Documentation for all Kudu configuration options.

link:resources.html[Kudu Resources]::
  Further reading about Kudu, columnar data stores, and other useful material for Kudu
  users and developers.

++++
</div>
++++
