--- title: Our first part order: 120 --- Much like garments themselves, patterns are made up of _parts_. Most patterns will have multiple parts. A sleeve, a back part, the collar, and so on. Our pattern is very simple, and only has one part: the bib. It's a good idea to keep each part in its own file. We don't *have to* do this, but it's a good habit to get into. When we create more elaborate designs with multiple parts, keeping each in its own file makes for a more tidy and approachable code base. ## bib.mjs The previous step has already set everything up for us. Our design's main file lives in `design/src/index.mjs`, and our part lives in `design/src/bib.mjs`. This `bib.mjs` is where we'll do all our work. The file includes a comments to guide you on how to use it. We removed those for clarity in our example. It currently looks like this: ```design/src/bib.mjs import { pluginBundle } from "@freesewing/plugin-bundle" function draftBib ({ part, // Your draft method must return this }) { // Work your magic here return part } export const bib = { name: 'tutorial.bib', draft: draftBib,[], from: false, hide: { self: false, from: false, after: false }, options: {}, measurements: [], optionalMeasurements: [], plugins: [ pluginBundle ] } ``` ### The part object Each part in FreeSewing is an object that describes everything there is to know about the part. The only mandatory keys on a part object are `name` and `draft`. Refer to [the part reference documentation](/reference/api/part) for all details about configuring the part object #### The part name ```design/src/bib.mjs name: 'tutorial.bib', ``` A part's `name` should be unique in a pattern. Apart from that, anything goes. Although we probably want to give it a sensible name. As we can see in the example above, we're using `tutorial.bib` as the name. We **strongly** recommend that you follow this `design.part` naming scheme to avoid naming conflicts when mixing parts from various designs to create new designs. #### The part's draft method ```design/src/bib.mjs draft: draftBib, ``` The second mandatory key on the part object is `draft` which should hold the method that drafts the part. In our example above, it refers to the `draftBib` function we defined at the top of the file. For now this function doesn't do much, but that will change soon enough. This structure of putting the draft method at the top of the file and the part object at the bottom is a bit of a convention in FreeSewing. ## index.mjs Feel free to skip to [Adding measurements](/tutorials/pattern-design/adding-measurements) if you're itching to get started. Or, read on for an explanation of what's going on in the `index.mjs` file. The `index.mjs` file is already complete and we won't be making any changes to it. But for those who are curious about what's going on inside `index.mjs`, we're including a version with comments below: ```design/src/index.mjs /* * Import the `Design` constructor * from the FreeSewing core library * * This Design constructor is a method * (also known as a function) * that creates a new Design */ import { Design } from '@freesewing/core' /* * Import the `bib` part from the bib.mjs file * in the same folder as this index.mjs file * * This is the part we'll be working on * in this tutorial */ import { bib } from './bib.mjs' /* * Create a new Pattern by passing * a configuration object * to the Design constructor */ const Pattern = new Design({ /* * This `data` key is optional, but we * typically add a name and version here */ data: { name: "Tutorial", }, /* * This `parts` key is the most important thing * It holds a list of `parts` for our Design. * A Pattern/Design is in the end not much more * than a collection of parts. */ parts: [ bib ], }) /* * We are exporting our Pattern * (so others can use it) * but we also (re-)export our bib part * this allows others to re-use it * in their own designs */ export { bib, Pattern } ```