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

:leveloffset: 1

[[core,Core]]
= Core =

== Overview ==

The Polygene™ Core is composed of several artifacts described in this section.

The following figure show the Core artifacts alongside <<libraries,libraries>> and <<extensions,extensions>>, and, in green,
typical applications artifacts. This is not a full code dependency graph but should give you a good overview of how the
pieces fit together. Find out more about each of the Polygene™ Core artifacts below.

.Polygene™ Core Overview
image::core-overview.png[]

//*<<core-api,Core API>>*
=== Core API ===

//____
The Polygene™ Core API is the primary interface for client application code during the main execution phase, i.e. after the
application has been activated.

<<core-api,Learn more>>
//____

//*<<core-bootstrap-assembly,Core Bootstrap>>*
=== Core Bootstrap ===
//____
Polygene™ has a distinct bootstrap phase, also known as the _Assembly_ of an application, where the applications structure
is defined programmatically. Once all the layers, modules and all the composite types in each module have been defined
the model is instantiated into an application. This enables the entire _structure_ system in Polygene, where types "belongs"
to a module and visibility rules define default behaviors, enforcement of architectural integrity and much more.

<<core-bootstrap-assembly,Learn more>>
//____

//*<<core-testsupport,Core Test Support>>*
=== Core Test Support ===
//____
Polygene™ comes with classes to help with testing. There is also some mocking support, to allow some of Polygene’s unique
aspects to be mocked, but since Polygene™ is so flexible at a fine-granular level, we have found that mocking is seldom,
if ever, needed.

<<core-testsupport,Learn more>>
//____

//*<<core-spi,Core Extension SPI>>*
=== Core Extension SPI ===
//____
The Polygene™ Core Runtime has a number of extension points, which we call the _Polygene™ Core Extension SPI_. These are defined
interfaces used *only* by the Core Runtime and *never* directly by application code. <<extensions>> are assembled in
applications during the bootstrap phase.

<<core-spi,Learn more>>
//____

//*<<core-spi,Core Runtime>>*
=== Core Runtime ===
//____
Your code should *never*, *ever*, have a dependency on Polygene™ Core Runtime. If you think you need this, you should
probably contact dev@polygene.apache.org and see if your usecase can either be solved in a existing way or
perhaps that a new Core Extension SPI is needed.

<<core-runtime,Learn more>>
//____


:leveloffset: 2

include::../../../../core/api/src/docs/api.txt[]

:leveloffset: 2

include::../../../../core/bootstrap/src/docs/bootstrap.txt[]

:leveloffset: 2

include::../../../../core/testsupport/src/docs/testsupport.txt[]

:leveloffset: 2

include::../../../../core/spi/src/docs/spi.txt[]

:leveloffset: 2

include::../../../../core/runtime/src/docs/runtime.txt[]

:leveloffset: 2
