# Service Package Dependencies

Service packages can depend on from other service packages or provide functionality for other service packages. Such functionality is expressed via artifacts.

## Artifact

Artifact is an abstraction for some resource used in the system. Service packages can declare that they provide or require some artifacts. Artifacts have type (for now, there is one possible value: trait) and version. Every artifact is uniquely identified in the scope of the whole system with name and type

## Trait

Trait is an abstraction of some functionality that can be used among several service packages.

### Provided traits

Service package can declare set of traits provided for other service packages. The declaration is versioned - another service package can use this implementation only in case if provided and required versions match.

### Required traits

Service package can declare set of required traits. The declaration is versioned. This means that if this service package is included into some configuration then the configuration must also include the implementation of this trait - the service package that declares this trait as provided. There must be only one implementation of every required trait in the configuration.

#### Available traits:

Core Package

{
"artifact": {
"name": "com.here.hnod.feature.fs0.core.service",
"type": "trait"
},
"version": "1.0.0"
}


Explore

{
"artifact": {
"name": "com.here.hnod.feature.fs1.fmwa.service",
"type": "trait"
},
"version": "1.0.0"
}


Guidance

{
"artifact": {
"name": "com.here.hnod.feature.fs2.gfatb.service",
"type": "trait"
},
"version": "1.0.0"
}


Amazon Alexa VPA

{
"artifact": {
"name": "com.here.hnod.feature.fs2.vp_alexa",
"type": "trait"
},
"version": "1.0.0"
}


Developer Options

{
"artifact": {
"name": "com.here.hnod.feature.dev",
"type": "trait"
},
"version": "1.0.0"
}


Themes Package

{
"artifact": {
"name": "com.here.hnod.feature.fs.themes",
"type": "trait"
},
"version": "1.0.0"
}