Skip to content

Latest commit

 

History

History
48 lines (34 loc) · 3.12 KB

CONTRIBUTING.md

File metadata and controls

48 lines (34 loc) · 3.12 KB

CONTRIBUTING

This file should serve as an entrypoint for learning about and contributing to Rill Developer.

Development environment

This is a full list of development dependencies:

Technologies

Here's a high-level overview of the technologies we use for different parts of the project:

  • Typescript and SvelteKit for all frontend code
  • Go for most of the backend functionality
  • Java and Apache Calcite for the SQL engine, which gets compiled to a native library using GraalVM
  • DuckDB for OLAP on small data
  • Apache Druid for OLAP on big data
  • Postgres for handling metadata in cloud deployments
  • OpenAPI and/or gRPC for most APIs
  • Docker for running Postgres and Druid in local development

Monorepo

Rill uses a monorepo and you can expect to find all its code in this repository. This allows us to move faster as we can coordinate changes across multiple components in a single PR. It also gives people a single place to learn about the project and follow its development.

We want the codebase to be easy to understand and contribute to. To achieve that, every directory that contains code of non-trivial complexity should include a README.md file that provides details about the module, such as its purpose, how to run and test it, links to relevant tutorials or docs, etc. Only the root README.md file should be considered user-facing.

The project uses NPM for Node.js (specifically, NPM workspaces), Go modules for Go, and Maven for Java. They function well alongside each other and we have not yet found a need for a cross-language build tool.

Project structure

Here's a guide to the top-level structure of the repository:

  • .github and .travis.yml contain CI/CD workflows. We allow both, but the goal is to move fully to Github Actions.
  • cli is an implementation of a new CLI in Go (in progress, not launched yet).
  • docs contains the user-facing documentation that we deploy to docs.rilldata.com.
  • runtime is our data plane, responsible for querying and orchestrating data infra. It currently supports DuckDB and Druid.
  • server-cloud contains the backend control plane for a multi-user version of Rill (in progress, not launched yet).
  • sql contains our SQL parser and transpiler. It's based on Apache Calcite and is used heavily by the runtime.
  • web-cloud contains the frontend control plane for a multi-user version of Rill (in progress, not launched yet).
  • web-common contains common functionality shared across the local and cloud frontends.
  • web-local contains the local Rill Developer application, including the data modeller and current CLI.