Introduction
Dairy is an ecosystem of open source FTC libraries.
Dairy’s libraries are designed to be fairly pick and choose, allowing users to use what they want from the system, but at the same time, where Dairy offers something, it should be tightly integrated with the rest of the system, and should be the best solution available.
Dairy is written in a way that balances nicely written and easy to use apis with the ability for a more advanced user to make use of the extesibility, or write a library of their own.
These docs are meant to be read alongside examples and overviews provided in the TeamCode module of the Dairy monorepo.
Dairy is written entirely in Kotlin, but provides examples and documentation in both Kotlin and Java. Dairy is nicer to use in Kotlin, and if you feel somewhat confident in your Java skills, then I think its worth giving Kotlin a try!
Check out the reading guide for our advice on how to get started.
Libraries:
Util is the non-android common utility library for all of Dairy.
- Type safe units families (distances and angles).
- Vectors and Poses that use these.
- Observable shared reference containers.
Sinister is Dairy’s classpath scanning utility library.
- This is unlikely to be used unless you’re writing a library yourself, or looking to implement some advanced automated system.
- Useful for writing your own OpMode registering annotations like
@TeleOp
or@Autonomous
.
- Core is the base library for most other Dairy libraries.
- It enables a bunch of new patterns for writing cleaner FTC code, and establishes the way that Dairy works.
- It can be used as a good place to start improving your own team’s code, or to use as a toolkit to write a library yourself.
- Core is designed to ensure that libraries using it play nice together.
- If you’re planning on writing a library using Core, please reach out to get help, ensure that it will work with other libraries, and for advice on publication, documentation, and management. If you would like your library added to the Dairy Foundation, please reach out as well.
- Pasteurized is super simple, and provides a great deal of default tooling for gamepads in FTC.
- But at the same time, has the tools to allow for super complex systems and gamepad layouts.
- Its a good base library if you’re looking to add further gamepad logic, its used in Mercurial for example.
- Lots of teams will find Mercurial a great place to start in Dairy.
- Command Based is a paradigm (system / approach) to structuring robot code in a reusable and concurrent manner, this makes it easy to run and manage lots of tasks on the robot at the same time, and is a popular approach to writing robot code in both FTC and FRC.
- Its similar enough to FTCLib to make it easy to pick up for those familiar with command based.
- Its focused on developer ergonomics, and makes it easy to compose and work with large command structures.