# Ecosystem Overview

So you're looking to help out DifferentialEquations.jl? We'd be happy to have your help. It is recommended you first discuss with some of the developers on the Gitter channel to make sure that you're up-to-date with current developments.

### The Common Interface

The DiffEq ecosystem is built around the common interface. This is the interface for the solvers:

```
__solve(prob,alg;kwargs...)
__init(prob,alg;kwargs...)
```

and the standard methods for dealing with solutions. A higher level `solve`

and `init`

is given by DiffEqBase.jl for functional and distributional intputs. Users build problem types for solvers to act on, and add-on components which use the solution types for higher-level analysis like parameter estimation and sensitivity analysis.

One can add components at any of these levels to improve the functionality of the system as a whole.

### Organizational Setup

JuliaDiffEq is setup in a distributed manner to allow developers to retain authoritative control and licensing for their own packages/algorithms, yet contribute to the greater ecosystem. This gives a way for researchers to target a wide audience of users, but not have to fully contribute to public packages or be restricted in licensing. At the center of the ecosystem is DiffEqBase which holds the `Problem`

, `Solution`

, and `Algorithm`

types (the algorithms are defined in DiffEqBase to be accessible by the `default_algorithm`

function. One can opt out of this). Then there's the component solvers, which includes the `*DiffEq`

packages (OrdinaryDiffEq, StochasticDiffEq, etc.) which implement different methods for `solve`

. Then there are the add-on packages, such as the `DiffEq*`

packages (DiffEqParamEstim, DiffEqDevTools) which add functionality to the `Problem`

+`solve`

setup. Lastly, there's DifferentialEquations.jl which is a metapackage which holds all of these pieces together as one cohesive unit.

If one wants their package to officially join the ecosystem, it will need to be moved to the JuliaDiffEq organization so that maintenance can occur (but the core algorithms will only be managed by the package owners themselves). The `Algorithm`

types can then be moved to `DiffEqBase`

, and after testing the package will be added to the list packages exported by DifferentialEquations.jl and the corresponding documentation.