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

[[preface, Preface]]
= Preface =

This is the reference manual for Zest™ version {qi4j-version}, written by members of the Zest™ Community.

The main parts of the manual are:

* <<introduction>> -- introducing Composite Oriented Programming concepts and Zest.
* <<tutorials>> -- learn how to use Zest.
* <<core-api>> -- detailed information on how to use Zest.
* <<libraries>> -- detailed information on the many libraries available for Zest.
* <<extensions>> -- detailed information each of the Zest™ extensions, such as entity stores,
indexing, caching and runtime metrics.

The material is practical, technical, and focused on answering specific questions. 
It addresses how things work, what to do and what to avoid to successfully use Zest™ in domain rich applications.
 
The goal is to be thumb-through and rule-of-thumb friendly.

Each section should stand on its own, so you can hop right to whatever interests you.
When possible, the sections distill "rules of thumb" which you can keep in mind whenever you wander out of the house
without this manual in your back pocket.

The included code examples are executed when Zest™ is built and tested.

_Who should read this?_

The topics should be relevant to architects, model designers and developers.

