---
# System prepended metadata

title: 'Plan: Package breakup plan'
tags: [one-library]

---

---
tags: one-library
---

# Plan: Package breakup plan

Today we have monolithic libraries of components.

This creates clear problems:

* 1 version number for all things means we can't track majors/next releases of individual, smaller parts.
* Patching one thing patches all things.
* No clear way to stage smaller pre-releases for sub packages.
* Gets us into awkward conversations when components like "Ribbon" or "Chat" are needed but don't feel like part of the suite package.
* No way to delay the suite release separate from subpackage releases.

We want a repeatable, scale-able approach to how we version, revise, and ultimately deprecate packages.

Note: see previous attempt here:

https://github.com/OfficeDev/office-ui-fabric-react/issues/9645

# The granularity of a package

Sub packages:

We have a suite package: `fluent-ui-react`
We have sub packages: `@fluent-ui/react-checkbox`

* Suite package has no code, only exports
* Sub packages can only depend on other sub packages; not suites. This helps eliminate circular dependencies.
* Sub packages follow semantic versioning explicitly, with no artificial major bumps.

> Note: Suite packages also follow semantic versioning, but may not bump major sub package dependencies until a specific date.

What goes into the sub package:

If 3 or more packages depend on thing, it might go in core.	
Core has almost no component library dependencies.
For any other components, default to a new package, except:

If multiple components are tightly coupled
If they ship on the same cadence.
If there is a single owner.
Different components representing the same purpose (Loader, ProgressBar, Shimmer)



	ActivityItem, DocumentCard, HoverCard, Breadcrumb, CommandBar, Nav, OverflowSet, Pivot, ResizeGroup, ContextualMenu, Announced, Color, Divider, Grid, Icon, Icons, Image, Keytip, KeytipData, KeytipLayer, Link, Separator, Stack, Text, Callout, Dialog, Layer, Modal, Overlay, Panel, Popup, ScrollablePane, Sticky, Tooltip, FocusTrapZone, FocusZone, Autofill, Button, Checkbox, ChoiceGroup, ChoiceGroupOption, ComboBox, Dropdown, Label, Rating, SearchBox, SelectableOption, Slider, SpinButton, TextField, Toggle, Coachmark, MessageBar, PositioningContainer, ProgressIndicator, Shimmer, Spinner, TeachingBubble