Terminology
Manifest file
Manifest file is the term used to refer to common dependency management files.
In NodeJS, package.json
is used to declare dependencies that your project requires.
In Java, you might use build.gradle
or a pom.xml
depending on our build chain.
go.mod
in Go, Pipfile
in Python, the list goes for many languages.
Simply put, a manifest file can be thought of as any file that communicates what a software project needs. It’s through these files that deps.cloud is able to construct its knowledge graph.
Source
Sources dictate where a given library can be found. A source might be a repository on GitHub or in GitLab. It might be an artifactory like JFrog, Sonatype Nexus, or even a Helm Repository.
Currently, deps.cloud marks sources using their raw URL. We are working on formalizing a provider URL concept that will decouple the discovery source from repository URLs.
Module
Modules in deps.cloud can represent a library (the common case), application, or repository. This can largely depend on how a given organization manages their repositories and dependencies. Do you use a monorepo or do you have a repo per service? Is each service allowed their own set of dependencies or do you pull from one common pool?
Dependency
Dependencies are the connective tissue of deps.cloud. A dependency defines a relationship between two modules. Specifically a directed, versioned, and historical relationship. It’s this type of relationship that makes modeling data in traditional data stores difficult.
There are many graph databases out there that handle this type of relationship well.
Dependent
Dependents is the inverse of dependency. A good way to think about this association is through familial bonds.
my child depends on me (dependency), and my dependents include my child… at least until their older
This is intended to demonstrate that the dependency property is reflexive (i.e. it can be turned back on itself). As we traverse edges in our graph, it’s important we maintain the direction we are traversing.