Preparation

Before contributing, it’s necessary to make some preparations to learn more about MatrixOne and other revalant information, which can improve developing and reviewing efficiency.

Thanks for understanding that English is used as a shared language in this repository. Maintainers do not use machine translation to avoid miscommunication due to errors in translation. If descriptions of issue / PR are written in non-English languages, those may be closed. If English is not your native language and you aren’t sure about any of these, don’t hesitate to ask for help in your pull request!

What is MatrixOne

Basic Information

You can see MatrixOne Introduction for key features of MatrixOne, MatrixOne Architecture for MatrixOne architecture and operational logic. For our distributed framework, see MatrixCube Tech Design.

Besides, you can browse SQL Reference and Custom Functions to know more about our interactive details.

These introductions will help you go through you the key concepts and user details to understand the project.

Roadmap

MatrixOne v0.3.0 has been released, you can see Release Notes to know more information.

Currently, we are working at v0.4.0 and v0.5.0 releases, the job tasks of these releases are listed in the Github milestones 0.4.0.

For the long-term project roadmap, please refer to MatrixOne roadmap for a more general overview.

What Contributions Can I Make

Contributions to MatrixOne are not limited to writing code. What follows are different ways to participate in the MatrixOne project and engage with our vibrant open-source community. See Types of Contributions for more details.

  • To report a bug or a problem with documentation, please file an issue providing the details of the problem. Don’t forget to add a proper label for your issue, and follow the issue templates.
  • To propose a new feature, please file a new feature request. Describe the intended feature and discuss the design and implementation with the team and community. Once the team agrees on the plan, you can follow the Contribution Workflow to implement it.
  • To implement a feature or bug-fix for an existing outstanding issue, follow the Contribution workflow. If you need more context on a particular issue, comment on the issue to let people know.

Working Directories and Files

For contributing code, matrixone is the main repository you’ll be working on. The main working directories are listed below:

DirectoryWorking Files
/LICENSESThe license of dependant libraries
/cmdThe binary entry of Go executables
optoolsThe test and deployment utilities
pkgThe main codebase of MatrixOne project

For different technical modules, a code structure under /pkg is as following table. Please refer to MatrixOne tech design for a better overview.

DirectoryModules
frontend/SQL Frontend
sql/parserSQL Parser
sql/MPP SQL Execution
sql/vectorizeVectorization of SQL Execution
catalog/Catalog for storing metadata
github.com/matrixorigin/matrixcubeMatrixCube
vm/engineStorage engine
vm/engine/aoeAnalytics Optimized Engine
vm/engine/tpeTransaction Processing Engine
buildin/System builtin functions

For contributing documentation, matrixone, matrixorigin.io and artwork are all the main repositories you’ll be working on. For more details, please refer to Contribute Documentation.

DirectoryWorking Files
matrixone/docs/en/MatrixOneThe content files of MatrixOne documentation website
matrixone/docs/rfcsThe design docs of MatrixOne project
matrixorigin.io/mkdocs.ymlThe configuration file of documentation website
artwork/docsThe images, screenshots and diagrams of documentation webstie

Set up your Development Environment

Go Environment

MatrixOne is written in Go. Before you start contributing code to MatrixOne, you need to set up your GO development environment.

  1. Install Go version 1.17 or above. You can see How to Write Go Code for more information.
  2. Define GOPATH environment variable and modify PATH to access your Go binaries. A common setup is as follows. You could always specify it based on your own flavor.
  1. export GOPATH=$HOME/go
  2. export PATH=$PATH:$GOPATH/bin

Note

MatrixOne uses Go Modules to manage dependencies.

Github & Git

MatrixOne is an open-source project built on Github, providing project maintainers and contributors with a platform to work together. Thus in order to start working with MatrixOne repository, you will need a GitHub account and learn basic git commands.
If you don’t have a Github account, please register at https://github.com. In case you do not have SSH keys, you should generate them and then upload them on GitHub. It is required for sending over your patches. It is also possible to use the same SSH keys that you use with any other SSH servers - probably you already have those.
For detailed information about Github, you can see Github Docs.

To work with git repositories, please install git. And you can learn how to use it throuth following introduction:

  • A brief manual can be found here.
  • A detailed manual can be found here.

Install and Run MatrixOne

See Install Standalone MatrixOne for more details.