# Architecture

This library broadly is separated into three key functional areas:

1. Model: Internal models used to unify data.

   > Note: As of version 4.0.0 of this library we support deserialization from JSON and XML as well as serialization to JSON and XML.

2. Output: Choose and configure an output which allows you to define output format as well as the CycloneDX schema version

When wishing to generate a BOM, the process is as follows:

1. Generate a Model by either:

     1. Programmatically using this library

     2. By deserializing from an existing CycloneDX BOM document

2. Output the Model using an `cyclonedx.output` instance that reflects the schema version and format you require

Contents:

- Modelling
  - Example BOM created programmatically
  - Example BOM created from existing CycloneDX BOM
- Schema Support
  - Root Level Schema Support
  - Internal Model Schema Support
- Outputting
  - Supported CycloneDX Schema Versions
  - Outputting to JSON
  - Outputting to XML