Hi there 👋, we're excited 🤗 that you're interested in contributing to Configu! Your contributions enrich the Configu experience and make it better every day 🤩.
Please take a moment to review this document in order to make the contribution process easy and effective for everyone involved.
Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests.
We ask all contributors to abide by our Code of Conduct. This helps ensure a positive and productive environment for everyone.
Before opening an issue, please search the issue tracker to make sure your issue hasn't already been reported.
We use the issue tracker to keep track of bugs and improvements to Configu itself, its examples, and the documentation. We encourage you to open issues to discuss improvements, architecture, theory, internal implementation, etc. If a topic has been discussed before, we will ask you to join the previous discussion.
For support or usage questions like “how do I do X with Configu” and “my code doesn't work”, please search and ask on Stack Overflow with a Configu tag first.
We ask you to do this because StackOverflow has a much better job at keeping popular questions visible. Unfortunately good answers get lost and outdated on GitHub.
Some questions take a long time to get an answer. If your question gets closed, or you don't get a reply on Stack Overflow for longer than a few days, we encourage you to post an issue linking to your question. We will close your issue but this will give people watching the repo an opportunity to see your question and reply to it on StackOverflow if they know the answer.
Please be considerate when doing this as this is not the primary purpose of the issue tracker.
On both websites, it is a good idea to structure your code and question in a way that is easy to read to entice people to answer it. For example, we encourage you to use syntax highlighting, indentation, and split text in paragraphs.
You can make it easier for us if you provide versions of the relevant libraries and a runnable small project or test case reproducing your issue.
This repository is a monorepo. This means there are multiple packages managed in this codebase, even though we publish them as separate packages.
It is powered by node.js and pnpm and uses husky and lint-staged to enforce its coding guidelines.
To see the full list of prerequisites, check out the engines property in the main package.json file.
Instantly start experimenting and developing.
- Install git
- Install Node.js and PNPM according to the
.nvmrcfile.- We recommend installing node.js via a package manager.
- We recommend installing pnpm via Corepack.
- Install
monorepodependencies by runningpnpm iin the root directory.- Alternatively, bootstrap the whole
monorepoby running.devcontainer/bootstrap.shscript in the root directory.
- Alternatively, bootstrap the whole
The root directory serves as the skeleton for the Configu project and provides the resources needed for developers to build and contribute to it.
The ./examples directory demonstrates various concepts and best practices with some real-world use-cases of Configu.
The ./docs directory holds the official Configu docs. Improvements to the documentation are always welcome. We use Mintlify to build and host our documentation website. The website is published automatically whenever the main branch is updated.
flowchart RL
%% Nodes
A("sdk")
B("common")
C("integrations")
D("cli")
E("proxy")
%% Edges
B --> A
C --> A
B --> C
D --> A
E --> A
D --> B
E --> B
%% Node Styling
style D color:#FFFFFF, fill:#AA00FF, stroke:#AA00FF
style E color:#FFFFFF, stroke:#00C853, fill:#00C853
- ./packages/sdk: The core SDK that contains the core Configu logic and interfaces
- ./packages/sdk/src/stores: ConfigStores supported shipped together with the core SDK
- ./packages/sdk/src/commands: Commands supported shipped together with the core SDK
- ./packages/integrations: Contains all the packages that extend the SDK interfaces
- ./packages/integrations/expressions: Contains all expression integrations
- ./packages/integrations/formatters: Contains all formatter integrations
- ./packages/integrations/stores: Contains all ConfigStore integrations
- ./packages/common: Shared code for both Configu Proxy and Configu CLI, extends the Configu SDK
- ./packages/proxy: Configu Proxy, which is built using fastify and the Common package
- ./packages/cli: Configu CLI, which is built using Clipanion and the Common package
For non-trivial changes, please open an issue with a proposal for a new feature or refactoring before starting on the work. We don't want you to waste your efforts on a pull request that we won't want to accept.
On the other hand, sometimes the best way to start a conversation is to send a pull request. Use your best judgment!
In general, the contribution workflow looks like this:
- Open a new issue in the Issue tracker.
- Fork the repo.
- Create a new feature branch based off the
mainbranch. - Make sure all tests pass and there are no linting errors.
- Submit a pull request, referencing any issues it addresses.
Please try to keep your pull request focused in scope and avoid including unrelated commits.
After you have submitted your pull request, we'll try to get back to you as soon as possible. We may suggest some changes or improvements.
Working on your first Pull Request? You can learn how from this free series, How to Contribute to an Open Source Project on GitHub.
- Open Source Guides
- GitHub Help
- About Pull Requests
- Make a Pull Request
- First Timers Only
- JavaScript Standard Style
Thank you 💙 for considering contributing to Configu! We look forward to working with you 🤝.