Resources

Contributing

Guidelines for contributing to CyberEther.


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.

HookPurpose
[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:

ResultDescription
Result::SUCCESSCompleted successfully.
Result::WARNINGRecoverable warning.
Result::ERRORRecoverable error.
Result::FATALUnrecoverable 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.

LevelNameDescription
JST_DEBUG=4TRACEVery detailed logs, which may include high-volume information such as protocol payloads. Compiled out in release builds.
JST_DEBUG=3DEBUGDebugging information, less detailed than trace, typically not enabled in release builds.
JST_DEBUG=2INFOInformational messages, which are normally enabled in release builds.
JST_DEBUG=1WARNWarning messages, typically for non-critical issues, which can be recovered or which are temporary failures.
JST_DEBUG=0ERROR & FATALError 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.

DefineDescription
JETSTREAM_VERSION_STRCurrent version of the library.
JETSTREAM_BUILD_TYPEBuild type: debug, release, or debugrelease.
JETSTREAM_BUILD_OPTIMIZATIONOptimization level: 0, 1, 2, or 3.
JST_IS_STATICDefined if the build is static.
JST_IS_SHAREDDefined if the build is shared.
JST_DEBUG_MODEDefined if the build is debug.
JST_RELEASE_MODEDefined if the build is release.

Platform Flags

One of the following JST_OS_* flags will be defined based on the target platform.

FlagPlatform
JST_OS_WINDOWSWindows (64-bit)
JST_OS_MACmacOS
JST_OS_LINUXLinux
JST_OS_ANDROIDAndroid
JST_OS_IOSiOS (iPhone, iPad, tvOS)
JST_OS_BROWSERBrowser (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.

CyberEther

High-performance GPU-accelerated signal processing and visualization framework that runs anywhere.

© 2026 CyberEther. All rights reserved.

The final frontier!