Disscussion: Why the term "Pinned Dependencies"?

I am curious about why does ReScript use the term “Pinned Dependencies”. I didn’t understand it at the very beginning. After reading the docs I know it feels like “link local dependencies together and build together”, aka monorepo.

However if I google the term “Pinned Dependencies”, I get results about “lock dependencies to certain version”. This sounds more closed to the word “pinned” to me.

So I’d like to know the original thinkings about using the term “Pinned Dependencies”. Why do ReScript use that term?


Background: I am trying to translate ReScript docs to Chinese. I am wondering could I replace “Pinned” to “Local” in the translation to help audiences better understood. Or just directly translate “Pinned” to something like fixed / stationary / inherent / built-in.

1 Like

Actually I have’t found value in the feature :thinking:

I have always assumed it is because it is similar to the concept of pinning dependencies in OCaml (e.g., this).


opam pin

This command allows one to pin a package to a specific version, but has been extended to allow much more than that.

Okay I think ReScript borrowed one of the “extended to allow much more than that”. Still, this feature is originally designed to make a dependency have fixed version.

It do have value for those coming from JS. People get used to monorepo pattern (lerna, pnpm workspace, etc) and they definitely would like to find similar replacements in ReScript.

I use pnpm workspaces and normal bs dependencies work good

1 Like

It was the first attempt to support monorepo development and it’s never made a lot of sense to me. I couldn’t even use it at the time because the IDE support was lacking and I haven’t gone back to see if it’s improved.

There are only a few defined ways to create a monorepo. Surely it’s better for the build system to read supported monorepo configs directly than to ask everyone who uses a monorepo to manually tag internal dependencies.

1 Like