# Ways to Contribute

Contributions to Widgetbook aren't limited to just code. We value a diverse set
of contributions that can help the project thrive and benefit the community at
large. Here are some ways you can make a difference:

1. **[Developing New Features](#developing-new-features):** Enhance the platform
   with new functionalities. This might be a new widget, improved integration
   with other tools, or even introducing a novel capability that could
   revolutionize how users interact with Widgetbook.

   _Example_: Introducing a "dark mode" for the Widgetbook interface.

2. **Fixing Bugs:** Identify issues, glitches, or problems with the existing
   codebase and propose fixes. These contributions help stabilize the platform
   and ensure a seamless experience for users.

   _Example_: Resolving an issue where Widgetbook crashes when loading a
   specific type of widget.

3. **Increasing Test Coverage:** Write new or improve existing tests. High test
   coverage ensures that the codebase remains stable and any further changes
   don't introduce regressions.

   _Example_: Adding tests to verify the behavior of newly introduced widgets
   under various scenarios.

4. **Improving Documentation:** Write, enhance, or clarify the official
   Documentation. A well-documented project helps newcomers get started, and
   experts to dive deep.

   _Example_: Crafting a detailed guide on how to integrate Widgetbook with
   other popular Flutter tools.

5. **Providing Examples:** Share practical use-cases or scenarios. Examples
   often act as starting points and provide clarity on the application of
   certain features. Check out [Adding Examples](/contribution/adding-example) doc
   page for more information.

   _Example_: Creating an example showcasing how to use Widgetbook for managing
   state in a complex Flutter app.

## Developing New Features

Building new features is exciting! But, to ensure that your efforts are in line
with the project's goals and vision, consider the following steps:

1. **Research First:** Begin by browsing the
   [existing enhancement issues](https://github.com/widgetbook/widgetbook/labels/enhancement).
   This will give you a sense of what's being considered and where you can pitch
   in. If you don't see your proposed feature, don't get disheartened.

   _Example_: Let's say you want to add a "drag and drop" feature for widgets
   within Widgetbook. Check if there's an existing issue or discussion around
   it.

2. **Propose Your Feature:** If your idea isn't listed,
   [create a new issue](https://github.com/widgetbook/widgetbook/issues/new).
   Clearly describe the feature, its benefits, potential challenges, and perhaps
   even an essential roadmap or plan on how you envision building it.

   _Example_: For the "drag and drop" feature, you can describe how it would
   improve user workflows, any libraries or tools you plan to use, and potential
   UI/UX mockups.

3. **Express Intent:** Once your issue is created or if you're picking up an
   existing one, comment on it. This informs the community and maintainers that
   you're interested in working on this feature, avoiding duplicated efforts.

   _Example_: A simple comment like, "I'm interested in building this feature
   and have some ideas on how to go about it. Any feedback or suggestions before
   I start?" can kick off the collaboration.

4. **Align with Maintainers:** Get feedback from project maintainers Before
   diving deep into coding. Their insights will be invaluable in shaping the
   direction and ensuring the feature integrates well with the existing
   ecosystem.

   _Example_: After some discussions, maintainers might suggest specific design
   patterns to follow, libraries to use, or even share potential pitfalls to
   watch out for.
