Dependencies
OSO tracks the dependency graph among projects in a collection or ecosystem. A dependency is a software package, module, or project that another project requires to function properly. Conversely, a dependent is a project that includes a specific package as its dependency. These metrics can highlight the usefulness of a given open source software project to other projects in the ecosystem.
These metrics are currently in development.
Direct vs. Indirect Dependents
Dependents can be categorized as:
- Direct Dependents: Projects that directly include the parent package in their list of dependencies.
- Indirect Dependents: Projects that rely on the parent package through an intermediary package. For example, if Package A depends on Package B, and Package B relies on Package C, then Package A is an indirect dependent of Package C.
Developer Dependencies
Many package managers, such as npm and Crates, distinguish between production code dependencies and developer dependencies that are only needed for local development and testing.
Below is an example of an npm package.json
file with developer dependencies:
"name": "my_package",
"version": "1.0.0",
"dependencies": {
"my_dep": "^1.0.0",
"another_dep": "~2.2.0"
},
"devDependencies" : {
"my_test_framework": "^3.1.0",
"another_dev_dep": "1.0.0 - 1.2.0"
}
Constraints on Dependency Analysis
For Open Source Observer, we've set the following constraints for our dependency analysis:
- Only direct dependents are considered, excluding indirect ones.
- Dependency analysis is restricted to specific collections or the union of specific collection sets. This ensures a more manageable indexing process and a clearer understanding of critical package relationships within an ecosystem.
Without such constraints, certain packages might appear as indirect dependents or dependencies for a vast majority of open source projects.
Example
Note: This is a hypothetical example. Real-world examples based on actual dependency graphs will be added soon.
Consider a collection of "Ethereum Developer Tools" with projects like ethers
and wagmi
and another collection called "Optimism Applications" with projects like velodrome-finance
and zora
. If velodrome-finance
depends on ethers
, and zora
depends on both ethers
and wagmi
, then ethers
has two dependents, and wagmi
has one.
Ecosystems: Ethereum Developer Tools & Optimism Applications
|
|----> Project: ethers
| |
| |----> Dependent: velodrome-finance
| |----> Dependent: zora
|
|----> Project: wagmi
|
|----> Dependent: zora
Dependent Metrics
In addition to mapping projects and their dependents, we also capture the following data about a project's dependents:
Current Dependents
Count of dependent projects as of the most recent indexing run. These may also be referred to as "downstream dependencies" or "reverse dependencies".
Current Dependencies
Count of dependencies as of the most recent indexing run. These may also be referred to as "upstream dependencies".
Active Developer Dependents
Count of active developers of all dependent projects in the same collection.
Active User Dependents
Count of active users of all dependent projects in the same collection.
Fees Dependents
Total sequencer fees of all dependent projects in the same collection.
To contribute new metrics, please see our guide here