-
Notifications
You must be signed in to change notification settings - Fork 369
Contributing
If you would like to contribute to the project, awesome! Here's some general guidelines for how to participate in development:
- PRs should be self-contained nuggets of improvement. Each commit to master should stand alone as a viable Index build.
- Please be as descriptive as possible about your PR and what it is you changed. If your PR represents an actual test you did on a build you're doing yourself, awesome! Please include any information about how the update performed on your build.
- Ensure that your PR is adhering to the general system architecture that has already been established. For example, don't submit a PR that switches communication to the feeders to SPI. If you'd like to make a large change to the machine's architecture, feel free to pop into the Discord Server and drop it into #index-dev!
- The master branch contains the most reliable version of the design, not the most up to date. Features are developed in separate branches, then merged in once they're confirmed to be as good as or better than what's in master.
- CAD is done in FreeCAD. All parts are modeled separately in their own FCDStd file, and then put into a final assembly file.
- Stick to Metric where possible
- Use M3 and M5 hardware whenever possible.
- Favor captive nuts as opposed to heat set inserts. They are easier to install, much cheaper, and much less likely to pull out.
- All custom parts should heavily consider printability in FDM. Try to allow parts to fit within a 150mm X 150mm X 150mm build volume. Design your parts around printing support-free.
- All PCB design is done in KiCAD
- 2-layer boards are standard. 4-layer boards are used if it truly is required for routing, power delivery, RF, or other specific reasons. Spending a bit more time to route a board is worth the saved cost for all the folks ordering them.
- All passives should be 0805, unless absolutely necessary. This is to aid in reliability of being picked and placed, but also so that folks can easily hand solder if they wish.
- For parts such as connectors, jacks, and other large parts, use a hybrid footprint. This means using a footprint that allows for both a THT and an SMD part to occupy the same space.
The Index Github repo operates under a feature-branch methodology. This means that work for a feature or bugfix happens in a separate branch made specifically for that change, then merged into master once it's complete. Every
Any commit to master is a valid build (starting with version 2.0). Every valid build requires a new version number, using semantic versioning (for example, 2.14.9). Changes to the first digit are non-backwards compatible changes, changes to the second digit adds features, and changes to the third denotes bugfixes. All parts, PCBs, firmware builds, and config files within that commit are compatible. The build version number, along with all part numbers included in a build are listed in version.json
.
Because of this, versioning for the Index and all of its parts is important for tracking which part versions are included in which build. Every component in the Index has a unique part number. All part numbers refer to a single component in the machine. A list of every part number in the project is in parts.csv
in the root directory of this repo. Refer to this before adding a part number to ensure there are no repeats. Product-specific parts should live within the product's dedicated folder. Parts that can be shared (like hardware, connectors, etc) are stored in the lib
folder. The format for part numbers are as follows:
PRT-0001-00
where:
-
PRT
is a capital, three letter part type designator. This says what kind of part it is. -
0001
is a part ID unique within the part type designator. For example, IJM-0001-00 and FDM-0001-00 are valid, unique part numbers. -
00
is the revision. Any time there is a design change, no matter how small, the revision number needs to be incremented. This only counts for actual changes in the design. Assembly instructions or vendor changes should not cause an uprev.
Below is a list of valid part type designators:
- OTS - Off The Shelf. Can be purchased directly from a vendor.
- FDM - Fused Deposition Modeling. A part printed on an FDM machine.
- PCB - Printed Circuit Board. Just references the actual board itself, not the components that populate it (which are considered OTS).