Packages in our monorepo are grouped and named, based of ownership and reusability in the following way:

overview of the code overview

#Blocks

Independent components, stateless and without any special cases. Exception: Theme context.

  • Priority: Few dependencies, reusability across applications.
  • Example Packages: @blocks/icons, @blocks/ui, @blocks/theme
  • Ownership: One team per package, mainly Helix.

#Segments

Rich Components, typically consisting of components from Blocks, mostly stateful. Application wide contexts.

  • Priority: Reusability within an application.
  • Example Packages: @segments/authentication, @segments/session, @segments/user-specific-content
  • Ownership: One team per package, mainly Helix.

#Libraries

Components used across domains and owned by a feature team.

  • Priority: Cross-Team Reusability.
  • Example Packages: @libraries/navigation, @libraries/product-list, @libraries/cart
  • Ownership: One team per package, mainly feature teams.

#Domains

Domain code that's only used in a domain and is owned by a feature team

  • Priority: Autonomy of the teams.
  • Example Packages: @domains/community, @domains/product-display, @domains/brand
  • Ownership: One feature team per package.

#Applications

Entry points and global code that must not be imported.

  • Example Packages: @applications/shop, @applications/design-system
  • Ownership: Helix

#Commons

Config and definitions. No depenencies to other packages.

  • Example Packages: ./build, ./development, ./docker
  • Ownership: Helix

#Tools

Non-productive support code

  • Example Packages: @tools/package-generator, @tools/testing-support-shop, @tools/documentation-support
  • Ownership: Helix

#Package assignment

Packages can be created with the Package Generator

layers cheat sheet

#Package rules

BlocksSegmentsLibrariesDomainsApplications
Translations __()
Network Access https, ws..
Statefulness
useContext, useConfig, useReducer, dispatch, routes, cookies, local/session-storage...
Code imported in Blocks
Code imported in Segments
Code imported in Libraries
Code imported in Domains
Code imported in Applications
Application entry points