General setup guide#
This is an exhaustive list for new developers. Feel free to skip the steps that you have already done on your own.
If you already have a development environment set up and want to set up Openverse on your computer, you can move on to the quickstart guide.
Operating system#
Caution
Openverse development is currently supported only for UNIX-type environments (Linux and macOS). Windows is not supported natively, but PRs that enable Openverse development on Windows, or improve the experience, are welcome.
Tip
We recommend Windows Subsystem for Linux (WSL) as a viable option.
Windows Subsystem for Linux can be a much more versatile and familiar
environment for software development on Windows. Everything from installing
git
and other dependencies to using command line tools that will be familiar
to the wider community of software developers are more likely to be easier under
WSL. While some parts of some Openverse projects may be able to be developed
under native Windows, you will have a much smoother time with WSL as our command
runners (just
and pnpm
) assume a UNIX-type environment (Linux and macOS).
Installation instructions for WSL on Windows 10 and 11 can be found in Microsoft’s official documentation.
Requirement matrix#
Based on which part of the Openverse stack you are contributing to, you might not need everything mentioned on this page. Refer to this chart to see which prerequisites are required to get started with your contributions.
Requirement |
Docs |
Ingestion server |
API |
Frontend |
Management |
---|---|---|---|---|---|
✅ |
✅ |
✅ |
✅ |
✅ |
|
✅ |
✅ |
✅ |
✅ |
✅ |
|
✅ |
➖ |
➖ |
➖ |
✅ |
|
➖ |
➖ |
➖ |
✅ |
✅ |
|
➖ |
✅ |
✅ |
❔[1] |
➖ |
Here ✅ means required, ➖ means not required and ❔ means conditionally required.
Required setup#
The following setup steps are needed to set up a local copy of Openverse and do not prepare you to contribute code to the project.
Git#
Openverse is Git-tracked. To clone Openverse locally, you will need to install
git
. Most Linux distributions and macOS will already have this installed, even
if it’s not always the latest version. To know if you have Git installed, run
the following command.
$ git --version
If you see git version x.y.z
, you have Git installed. If you see an error, you
need to install it by following the
official instructions.
just
#
We use just
as our command runner. It makes it easier to run cumbersome
commands that are generally needed a lot during development, like bringing up
our backend services or linting the codebase.
just
can be installed for a host
of operating systems via their respective
package managers or using
pre-built binaries available
for some operating systems.
Tip
If you run just
inside the Openverse root repo without a recipe name, you can
see a huge list of all the different recipes present in the project.
$ cd openverse/
$ just
If for some reason, you are unable to install just
, you can refer to the
justfile
to see the commands that make up a recipe, and then run those
commands individually in a terminal. It won’t be the best user experience, but
it will work just the same.
We also recommend setting up
shell completions for
just
to make it faster to find and run recipes. On macOS with the default Z
shell, Homebrew installs completions for just
by default.
Conditional setup#
A subset of the following requirements will be required depending on the extent of your contribution to the project. To see which of these you need, refer to the requirement matrix above.
Python#
Note
This is only needed if you are working with the following:
documentation
Python automations
API (outside Docker, for debugging purposes)
ingestion server (outside Docker, for debugging purposes)
We use Python 3 in the backend of our stack. So to work with that part of the codebase, you will need Python installed. Most Linux distributions and macOS will already have this installed, even if it’s not always the latest version. To know if you have Python (specifically version 3) installed, run the following command.
$ python3 --version
If you see Python x.y.z
, you have Python installed. If you see an error, you
need to install it using pyenv or by following
the official instructions.
Pipenv#
Pipenv helps us provision dependencies for our Python packages and automatically
set up a virtualenv, provided you have the version of Python mentioned in the
Pipfile
installed and accessible locally.
You can install Pipenv by following the official instructions.
Node.js#
Note
This is only needed if you are working with the following:
frontend
Node.js automations
We use Node.js in the frontend of our stack. So to work with that part of the codebase, you will need Node.js installed. To know if you have Node.js installed, run the following command.
$ node --version
If you see vx.y.z
, you have Node.js installed. If you see an error, you need
to install it using nvm or by following the
official instructions.
Corepack#
Corepack helps manage package managers for a project. In any Node.js workspace,
like the WordPress/openverse
monorepo for example, Corepack will automatically invoke the right version of
the specified package manager, also installing it if needed and not present.
It’s a part of Node.js and present in Node.js versions v14.19.0 and v16.9.0 onwards. So no installation is needed.
Enable Corepack in the monorepo root. Then, check if Corepack can discover the right package manager, pnpm, by running the following commands.
$ corepack enable
$ pnpm --version
You should see a version number and no error message.
Docker#
Note
This is only needed if you are working with the following:
API
ingestion server
frontend
Our Python packages are published as Docker images to make it easier to work with them locally during development and also make it easier to deploy new versions in production.
If you run WSL on Windows, you can set up Docker Desktop. If not, you can use one of the many installation methods officially supported by Docker.
Note that the building images for the frontend needs an advanced build feature, namely additional build contexts, that is provided by the Buildx plugin. The Buildx plugin is included in Docker Desktop and all installation methods for Docker Engine include steps to also install the Buildx plugin.
To know if your Docker setup is using Buildx, run the following command.
$ docker build --help
If you see docker buildx build
under ‘Aliases’, you have Buildx set up as the
build client.
Docker Compose#
Docker Compose makes it easy to orchestrate multiple services which we put to use by orchestrating the external services and also the API, ingestion server and indexer workers locally during development.
Docker Compose is a part of the Docker Desktop installation. To know if you have Docker Compose installed, run the following command.
$ docker compose version
If you see Docker Compose version vx.y.z
, you have Docker Compose installed.
If you see an error, you need to install it by following the
official instructions.
GitHub#
Note
This is only needed if you want to contribute code to Openverse. The codebase can be read, accessed and downloaded without an account.
The source code for Openverse is hosted on GitHub. To contribute to Openverse, you will also need to sign up for a GitHub account. It’s free, and considering how much OSS development happens on GitHub, almost essential.
GitHub CLI#
It’s not necessary, but we recommended to install the GitHub CLI in your development environment because it makes it convenient to work with GitHub workflows like filing issues and opening PRs.
You can install the CLI by following the official instructions.
Text editors/IDEs#
A good editor or IDE (integrated development environment) makes a lot of difference when working with software source code. We recommend VS Code or a JetBrains IDE because that’s what we use day-to-day. Feel free to pick a different editor if you have a preference.
VS Code is an option with good out-of-the-box support for our entire stack.
PyCharm and WebStorm are other very popular options with lots of bells and whistles.
Sublime Text is a minimalistic option that can get you off the ground quickly with lots of room for expansion through it’s package system.
Optional development setup#
The following setup steps are only needed in very specific scenarios.
coreutils#
Note
This is only needed on macOS.
coreutils
adds GNU utils to macOS. timeout
from the package is required. You
can install the
coreutils
formula using
Homebrew, which is a package manager for macOS.
mkcert#
Note
This is only needed to test SSL locally.
To test SSL locally, install mkcert
(and the corresponding
NSS tools) by
following the
official instruction. You
can run mkcert -install
to verify your installation.
psycopg2
build prerequisites#
Note
This is only needed if the psycopg2
installation fails when running parts of the project outside of Docker.
Openverse uses psycopg2
built from source on the client for compatibility
reasons. You must ensure that
psycopg2
’s build prerequisites are fulfilled for the library to install correctly.
The linked documentation includes common troubleshooting instrustions for issues
building the library.
macOS#
The psycopg2
package can fail to install on Apple Silicon Macs with the
ld: library not found for -lssl
error. To rectify this, install the
openssl
formula using
Homebrew and set LDFLAGS
and CPPFLAGS
as per the
instructions in the output of the Homebrew installation.