Thanks for taking the time for contribution to ByteChef! We're very welcoming community and while it's very much appreciated if you follow these guidelines it's not a requirement.
There are many ways in which you can contribute to ByteChef.
Report all issues through GitHub Issues using the Report a Bug template. To help resolve your issue as quickly as possible, read the template and provide all the requested information.
We welcome all feature requests, whether it's to add new functionality, improve existing connectors or to suggest a brand new connector. File your feature request through GitHub Issues using the Feature Request template for improvements or Connector Request for improvements to the existing components or for the new ones.
You can help by suggesting improvements to our documentation using the Documentation Improvement template or check Step-by-step guide to contributing!
Find issues where we need help. Search for issues with either good first issue
and/or help wanted
labels. Check out the following Code Contribution Guide to begin.
Please review the following sections before proposing code changes.
By contributing, you agree that your contributions will be licensed under the terms of the ByteChef project licenses.
This project and everyone participating in it is governed by the ByteChef Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].
We Use GitHub Flow, So All Code Changes Happen Through Pull Requests
Pull requests are the best way to propose changes to the codebase (we use Git-Flow). We actively welcome your pull requests:
- Fork the repo and create a new branch from the
develop
branch. - Branches are named as
bug/fix-name
orfeature/feature-name
- To work on the client codebase, go through Client Side and Setup with Docker
- To work on the server codebase, go through Server Side and Local Setup
- Please add tests for your changes. Client-side changes require Vitest/Playwright tests while server-side changes require JUnit/Integration tests.
- When you finish adding your changes, run the following commands inside the
client
directory if you worked on the client codebase:and/or inside the./npm run format ./npm run check
server
directory if you worked on the server codebase:./gradlew spotlessApply ./gradlew check
- Once you are confident in your code changes, create a pull request in your fork to the
develop
branch in the bytechefhq/bytechef base repository. - If you've changed any APIs, please call this out in the pull request and ensure backward compatibility.
- Link the issue of the base repository in your Pull request description. Guide
- When you raise a pull request, we automatically run tests on our CI. Please ensure that all the tests are passing for your code change. We will not be able to accept your change if the test suite doesn't pass.
- Documentation: When new features are added or there are changes to existing features that require updates to documentation, we encourage you to add/update any missing documentation in the
/docs
folder. To update an existing documentation page, you can simply click on theEdit this page
button on the bottom left corner of the documentation page.
ByteChef platform consists of three major parts. User interface is implemented with Node, ReactJS and TypeScript. Backend microservices are implemented in Java programming language and Spring framework. Dependent infrastructure PostgreSQL, RabbitMQ, Redis. Each part could be encapsulated in Docker container to reduce efforts.
- Docker
- Java - GraalVM for JDK 21+
- Gradle - V8.5+. - Comes as part of the project as Gradle Wrapper
- A PostgreSQL database - Refer to the Setting up local development infrastructure.
- A Redis instance - Refer to the Setting up local development infrastructure.
- Node v20+
- Docker
-
Open terminal application.
-
Make sure
java -version
andJAVA_HOME
references Java JDK 21+ -
Clone the ByteChef repository to local directory we will call
BYTECHEF_HOME
.git clone https://github.com/bytechefhq/bytechef.git cd bytechef
-
Change working directory to the
BYTECHEF_HOME/server
folder. -
Start up the docker container with dependent infrastructure
docker compose -f docker-compose.dev.infra.yml up -d
-
Compile codebase:
../gradlew clean compileJava
-
Change working directory to the
BYTECHEF_HOME/server/apps/server-app
folder. -
Start the ByteChef server instance by running:
../../../gradlew bootRun
-
Change working directory to the
BYTECHEF_HOME/client
folder. -
Install dependencies.
npm install
-
Serve with hot reload.
npm run dev
User interface application connects to the microservices server at the predefined URL http://127.0.0.1:9555. If microservices backend API server is not present, your page will load with errors. The API server starts on default port 9555. To configure the API server in details, please follow Setup With docker instructions. The API server status is available at the endpoint: http://localhost:9555/swagger-ui/index.html. Type it in the browser's address bar to get Swagger UI with the list of API endpoints.
If ran for the first time the API server automatically populate database with required data and demo projects. Subsequent runs against existing database would trigger table updates on PostgreSQL.
npm run format
npm run lint
npm run typecheck
npm run check
npm run build
npm run test
This section explains how you can set up a development environment for ByteChef server instance. As the server codebase is written in Java and is powered by Spring, you need Java and Gradle installed to build the code. You also need one instance of PostgreSQL and Redis each to run ByteChef server instance.
Build and run the server codebase in a Docker container. This is the easiest way to get the server instance up and running if you are more interested in contributing to the client codebase.
Stop locally built server instance.
docker compose -f docker-compose.dev.server.yml down
Rebuild a docker image of the locally built server instance.
docker compose -f docker-compose.dev.server.yml down --rmi local
docker compose -f docker-compose.dev.server.yml up -d
This section doesn't provide instructions to install Java and Gradle because these vary between different operating systems and distributions. Please refer to the documentation of your operating system or package manager to install these tools.
-
Use
docker-compose.dev.infra.yml
for running required infrastructure (PostgreSQL, Redis):docker compose -f docker-compose.dev.infra.yml up -d
./gradlew spotlessApply
./gradlew check
./gradlew test && ./gradlew testIntegration
If you see Either revert the changes to the migration, or run repair to update the schema history
in the terminal log when starting the server, execute the following command which will remove the out of date schemas:
For server setup with Docker:
docker compose -f server/docker-compose.dev.server.yml down -v
For server local setup:
docker compose -f server/docker-compose.dev.infra.yml down -v
Contact us on Discord or mail us at [email protected].