////
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.
////
= Arthur Documentation

Arthur project is composed of multiple module:

- link:api.html[API]: it contains some end user API integrated with built-in extensions to simplify application graal-ification,
- link:spi.html[SPI]: it contains the extension API intended to be used by libraries or integrators to simplify the graal-ification of a coding pattern or framework coding style,
- link:implementation.html[Implementation]: it does the orchestration of the extensions execution before the `native-image` command line generation and execution,
- link:maven.html[Maven Plugin]: it wraps the Implementation in a Maven Plugin and provides Docker helper mojos.
- link:knights.html[Knights]: knight are modules providing Arthur extensions.

---

Previous: link:index.html[Index] Next: link:api.html[Arthur API]
