Contributions are welcome! Pull requests are the best way to propose changes to the codebase. We actively welcome your pull requests and invite you to submit pull requests directly in this repository.
Warning
Keep in mind that since this project is still in its early stages, the API is not stable and it is subject to change.
Getting Started
The code is riddled with // TODO: comments. These are things that need to be done and are a good place to start if you want to help out.
Before starting work on a new feature or bug fix, please create an issue first. This allows us to discuss the change and ensure it aligns with the project’s direction.
Code Hooks
When adding new modules, blocks, dependencies, or serializations, look for the appropriate hook comments in the codebase. These indicate where to add new includes and defines.
| Hook | Purpose |
|---|---|
[NEW MODULE HOOK] | Adding a new module |
[NEW BLOCK HOOK] | Adding a new block |
[NEW DEPENDENCY HOOK] | Adding a new dependency |
[NEW SERIALIZATION HOOK] | Adding a new serialization |
[NEW CONTRIBUTOR HOOK] | Adding yourself as a contributor |
Code Style
The library follows the Google C++ Code Style Guide with the following modifications:
- Default line length is 88 characters (can be overridden if necessary).
- Default indentation is 4 spaces. No exceptions.
API Reference
Return Values
All functions should return a Result type. This is an enum with the following values:
| Result | Description |
|---|---|
| Result::SUCCESS | Completed successfully. |
| Result::WARNING | Recoverable warning. |
| Result::ERROR | Recoverable error. |
| Result::FATAL | Unrecoverable error. |
Logger
We use our own logging system. It’s a simple wrapper around fmtlib with a few extra features. The logging system is thread-safe and can be used in a multithreaded environment.
The verbose level can be selected at runtime using the JST_DEBUG environment variable. The default level for debugrelease builds is DEBUG, otherwise it’s INFO.
| Level | Name | Description |
|---|---|---|
JST_DEBUG=4 | TRACE | Very detailed logs, which may include high-volume information such as protocol payloads. Compiled out in release builds. |
JST_DEBUG=3 | DEBUG | Debugging information, less detailed than trace, typically not enabled in release builds. |
JST_DEBUG=2 | INFO | Informational messages, which are normally enabled in release builds. |
JST_DEBUG=1 | WARN | Warning messages, typically for non-critical issues, which can be recovered or which are temporary failures. |
JST_DEBUG=0 | ERROR & FATAL | Error or fatal messages - most of the time these are (hopefully) logged before the application crashes. |
If you are writing a new module or block, use the logger to communicate problems or warnings to the user. If you print something to the console and return a Result::ERROR, Result::WARNING, or Result::FATAL, the compositor will display a notification to the user with the last message you printed.
Testing
To enable building the tests, make sure catch2 is installed on your system.
Global Defines
Global defines are preprocessor macros defined in the jetstream_config.hh file. These are automatically generated during the build process and provide information about the build configuration and target platform.
Build Configuration
These defines provide information about the current build setup.
| Define | Description |
|---|---|
JETSTREAM_VERSION_STR | Current version of the library. |
JETSTREAM_BUILD_TYPE | Build type: debug, release, or debugrelease. |
JETSTREAM_BUILD_OPTIMIZATION | Optimization level: 0, 1, 2, or 3. |
JST_IS_STATIC | Defined if the build is static. |
JST_IS_SHARED | Defined if the build is shared. |
JST_DEBUG_MODE | Defined if the build is debug. |
JST_RELEASE_MODE | Defined if the build is release. |
Platform Flags
One of the following JST_OS_* flags will be defined based on the target platform.
| Flag | Platform |
|---|---|
JST_OS_WINDOWS | Windows (64-bit) |
JST_OS_MAC | macOS |
JST_OS_LINUX | Linux |
JST_OS_ANDROID | Android |
JST_OS_IOS | iOS (iPhone, iPad, tvOS) |
JST_OS_BROWSER | Browser (Emscripten) |
Licensing and Attribution
CyberEther is licensed under the MIT License. All contributions to this project will be released under the MIT License. By submitting a pull request, you are agreeing to comply with this license and for any contributions to be released under it.
Don’t forget to add yourself to the ACKNOWLEDGMENTS file!
Code of Conduct
Don’t be a jerk. Otherwise, you will be banned from contributing to this project. You will be warned once and then banned if you continue to be a jerk. Please report if you see someone being a jerk on project grounds.