FiftyOne is open source and community contributions are welcome!
If you have not already, we highly recommend browsing currently active projects to get a sense of what is planned for FiftyOne as it is steered toward a 1.0 release. Each project is a component of FiftyOne that we, the maintainers, deem critical to a great CV/ML tool for both datasets and models.
Please do not be frightened by the procedures outlined below. They are not dogmatic and are only meant to help guide development as the project and number of contributors grow.
The FiftyOne contribution process starts with filing a GitHub issue. FiftyOne defines four categories of issues: feature requests, bug reports, documentation fixes, and installation issues. Details about each issue type and the issue lifecycle are discussed in the FiftyOne Issue Policy. Documentation typos, and generally any small improvements need not a have a corresponding issue.
FiftyOne maintainers actively triage and respond to GitHub
issues. In general, we recommend waiting for feebdack from a FiftyOne
maintainer or community member before proceeding to implement a feature or
patch. This is particularly important for
significant changes, and will
typically be labeled during triage with needs design
.
After you have agreed upon an implementation strategy for your feature or patch with a FiftyOne maintainer, the next step is to introduce your changes (see developing changes) as a pull request against the FiftyOne Repository. If it is a feature request that should be associated with a project, a FiftyOne maintainer will do so.
Once your pull request against the FiftyOne Repository has been merged, your corresponding changes will be automatically included in the next FiftyOne release. Congratulations, you have just contributed to FiftyOne! We appreciate your contribution!
In this section, we provide guidelines to consider as you develop new features and patches for FiftyOne.
For significant changes to FiftyOne, we recommend outlining a design for the
feature or patch and discussing it with a FiftyOne maintainer before investing
heavily in implementation. During issue triage, we try to proactively identify
issues that require design by labeling them with needs design
. This is
particularly important if your proposed implementation:
- Introduces new user-facing FiftyOne APIs
- FiftyOne's API surface is carefully designed to generalize across a variety of common CV/ML use cases. It is important to ensure that new APIs are broadly useful to CV/ML engineers and scientists, easy to work with, and simple yet powerful.
- Adds new library dependencies to FiftyOne
- Makes changes to critical internal abstractions
FiftyOne's users rely on specific App and Core behaviors in their daily workflows. As new versions of FiftyOne's are developed and released, it is important to ensure that users' workflows continue to operate as expected. Accordingly, please take care to consider backwards compatibility when introducing changes to the FiftyOne codebase. If you are unsure of the backwards compatibility implications of a particular change, feel free to ask a FiftyOne maintainer or community member for input.
The majority of the FiftyOne codebase is developed in Python and TypeScript.
Install the Python FiftyOne package from source - this is required for developing & testing changes across all languages and APIs. The main README provides installation setup. The App README provides App source installation and development instructions.
FiftyOne exclusively supports Python 3.
FiftyOne's Python codebase is formatted with black and pylint, as well as other formatting tools.
It is recommended that you install pre-commit into your git hooks, to automatically check and fix any formatting issue before creating a git commit.
To enable pre-commit
simply run:
$ pre-commit install
See the .pre-commit-config.yaml
configuration file for more information on
how it works.
FiftyOne's API Reference Documentation is automatically generated using sphinx-apidoc. Docstrings follow Google docstrings format.
When adding a new feature to FiftyOne, or changing core functionality, be sure to update both the docstrings in source code and the corresponding documentation in all relevant locations.
FiftyOne has a suite of tests in the fiftyone/tests
subdirectory. These tests
are run automatically on code in outstanding PRs. When making a PR to FiftyOne
be sure that all tests are passing. See the README in fiftyone/tests
for
instructions on running these tests locally.
Please be sure to write tests when you add new features.
This document will continue to evolve as we learn more about what works best. It should be noted that this App was began as this boilerplate.
Best practices:
- All React components should be function-based, not class-based
- We recommend writing fully typed TypeScript, although we are still transitioning
- Prettier is used for autoformatting CSS,
TypeScript, YAML, Markdown, etc. Installing FiftyOne with the development
flag (
-d
) should have installed this step as a pre-commit hook
After installing the App development environment (see the App
README.md) you can run yarn storybook
.