Skip to main content
Contributions to Vespa, Vespa system tests, Vespa samples, and the Vespa documentation are welcome.

Open Development

All work on Vespa happens directly on GitHub using the GitHub flow model.
We release the master branch four times a week (Monday through Thursday), and you should expect it to always work.
The continuous build of Vespa is available at factory.vespa.ai, where you can follow the fate of each commit.

Code Review Process

All pull requests must be approved by a Vespa Committer. You can find a suitable reviewer in the OWNERS file upward in the source tree from where you are making the change.
OWNERS have a special responsibility for ensuring the long-term integrity of a portion of the code.

Becoming a Committer

The way to become a committer (and OWNER) is to make quality contributions to an area of the code. See GOVERNANCE.md for more details.
1

Start Contributing

Begin by creating pull requests that demonstrate quality and understanding of the codebase.
2

Build Trust

Continue making approved PRs and building trust with the community through your contributions.
3

Get Nominated

When sufficient trust is established, any current Vespa Committer can nominate you to the Vespa Board for the committer role.

Getting Started

Development Environment

C++ and Java building is supported on AlmaLinux 8. The Java source can also be built on any platform having Java 17 and Maven 3.8+ installed.
Use the complete development environment guide using Docker for building Vespa, running unit tests and system tests: Vespa development on AlmaLinux 8
  1. Install dependencies through Homebrew:
brew install jenv mvnvm openjdk@17
  1. On ARM Macs (M1, M2, etc.), install Intel compatibility:
softwareupdate --install-rosetta
  1. Symlink the JDK:
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
  1. Configure your shell (for zsh):
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
eval "$(jenv init -)"
jenv enable-plugin export
exec $SHELL -l
  1. Add JDK17 to jEnv:
jenv add $(/usr/libexec/java_home -v 17)
  1. Verify configuration:
mvn -v

Building Java Modules

If you only need to build the Java modules:
export MAVEN_OPTS="-Xms128m -Xmx1024m"
./bootstrap.sh java
mvn install --threads 1C

Understanding the Codebase

  • See Code-map.md for an overview of Vespa modules
  • Each module has its own README with more details
  • Check TODO.md for suggested improvements

Issues and Feature Requests

We track issues in GitHub issues. It is fine to submit issues for:
  • Bug reports
  • Feature requests
  • Ideas and suggestions
  • Questions and discussions
You don’t need to intend to work on an issue to submit it.

Community Resources

Slack

Join our Slack channel to ask questions, share experiences, and help others

Stack Overflow

Browse questions tagged with “vespa” or ask your own

Blog

Follow the Vespa Blog for feature updates and use cases

Sample Apps

Explore sample applications to learn Vespa patterns
All code and documentation you submit will be licensed under the Apache 2.0 license.
If you add new files, you are welcome to use your own copyright. The license confirmation is included in the pull request template:
I confirm that this contribution is made under the terms of the license found in the root directory of this repository’s source tree and that I have the authority necessary to make this contribution on behalf of its copyright owner.

Testing

Shell Script Tests

Shell scripts are tested with BATS.
  1. Install the testing framework and plugins:
brew install node
sudo npm install -g bats bats-assert bats-support bats-mock
  1. Export the plugin path:
export BATS_PLUGIN_PATH="$(npm root -g)"
  1. Run all tests from the repository root:
bats -r .
  1. Run a specific test:
bats test_dir/test_name.bats
Tests can also be run in IntelliJ IDEA with the BashSupport Pro plugin.

Next Steps

Pull Request Process

Learn how to create and submit pull requests

Versioning Guidelines

Understand Vespa’s semantic versioning and API compatibility

Build docs developers (and LLMs) love