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:
- C++ application developers: I have an existing C++ application I want to port to the web
- C++ library authors: I have an existing C++ library I want to make available to JavaScript developers
- Web developers: I have an existing JavaScript/TypeScript codebase and I want to add a little C++ to it
- 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
- Homebrew
- Nix (via nix-darwin)
- 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.