How to Contribute

Cheerp is one of Leaning Technologies’ first open source projects that is both under very active development and is used internally and externally by lots of people. We’re still working out the best way to accept contributions to Cheerp, but we’re excited to have you here.

To get started with contributing to Cheerp, please introduce yourself in the #cheerp channel on our Discord server.

Please also consider reading the main contributing guide which applies to all Leaning Technologies projects.

Structure

Cheerp’s codebase is spread across a few repositories. These are:

  • cheerp-meta - main repository for tracking issues and releases
  • cheerp-compiler - the compiler internals, based on the LLVM repository
  • cheerp-musl - a Cheerp-enabled implementation of musl libc
  • cheerp-utils - a collection of utilities and headers shipped with Cheerp
  • cheerp-libs - a collection of helpful libraries for use with Cheerp, such as a GLES implementation
  • ts2cpp - a tool to generate C++ headers from TypeScript declaration files for use with Cheerp

Bugs

To report bugs, create a new GitHub Issue.

Feature Requests

Please request features on Discord. Cheerp is used for commercial purposes, so in general we work on features which our clients have asked for, but often feature requests can be placed on a backlog.

Roadmap

We are working on publishing a roadmap for Cheerp. In the meantime, please check the GitHub issues or the latest PRs. We also publish a weekly devlog on Discord.

Documentation

Thanks for thinking about contributing to the Cheerp documentation. That’s awesome.

Style guide

The Cheerp documentation should follow the Leaning Technologies documentation style guide. Please read this before contributing.

User stories

We think there are 4 types of people who want to use Cheerp. These are:

  1. C++ application developers: I have an existing C++ application I want to port to the web
  2. C++ library authors: I have an existing C++ library I want to make available to JavaScript developers
  3. Web developers: I have an existing JavaScript/TypeScript codebase and I want to add a little C++ to it
  4. Noobs: I don’t know how to program but I want to learn how to make webapps with C++

The current documentation focuses on (1). We are looking to allow (2) as well, then (3) and (4) later.

C++ developers

Package managers

People with a C++ background want to install Cheerp with their typical package manager (probably on Linux). Ideally, we maintain a select few packages and community members maintain packages for more niche distributions. The packages we maintain are:

  • Linux
    • Ubuntu
    • Arch
    • Nix
  • macOS
  • Windows
    • Graphical installer

Quickstart guides

We want quickstarts for people that use the following build tools (in order of priority):

  • GNU make
  • CMake
  • Visual Studio
  • autotools
  • Meson

If there’s a C++ build tool that you use and its not particularly niche, please consider contributing a quickstart guide for it!

Web developers

People with a web development background tend to expect a way to install and integrate Cheerp with their existing codebase, using the tools they already use, like npm and Vite (which uses Rollup).

Noobs

We are not particularly interested in teaching people with little C++ and/or JavaScript experience. Perhaps this will change in future as we have more bandwidth, but unless a community member is interested in working on this it won’t be made a priority in the near term.

The ideal for this is a site similar to the Svelte tutorial which teaches how to use Cheerp as a language extension to C++, which doesn’t assume much C++ knowledge so it is appropriate for noobs. For example it will explain briefly C++ concepts, and explain everything that Cheerp introduces to C++ like [genericjs]. It can use the Cheerp package to run Cheerp in the browser and use something like CodeMirror or client-side Theia as the editor.

Was this page helpful?
Suggest changes