The cases

Name Published on npm Imported by developers Follow semver Use cases API naming Notes
“public” Our product. Nothing special.
“unstable” No API we want to try out with the community. They could become stable. Same as above, but have modules exported with a prefix: unstable_ . A public dependency that use an unstable API of another public dependency must pin the version. It's important so breaking changes don't propagate from one package to another.
“internal” No No Avoid duplication of code between npm packages. package name:
@project-name/internals for logic used by public packages.
@company-name/internal-* for infra Dependencies using must pin their version.
“private” No No No For logic only used in the git repository, workspace local packages, examples. - if it needs to be referenced:
private: true property in
package.json.
@company-name/private-*

Naming rules