Yarn은 2016년 Facebook, 현재의 Meta가 당시 npm의 느린 설치와 lockfile 재현성 문제를 해결하려고 만들었어. 몇 년 뒤 npm이 따라잡는 동안 Yarn은 두 계열로 나뉘었지. 원조인 Yarn Classic(v1)은 이제 유지보수 전용이고, Yarn Berry(v2~v4)는 같은 팀이 급진적인 새 생각을 담아 거의 전부 다시 만든 도구야. 지금 새 프로젝트에서 Yarn을 고른다는 말은 Berry를 뜻하며 Classic을 뜻하지 않아.
Berry의 대표 기능은 Plug'n'Play(PnP)야. node_modules를 완전히 없애고 패키지를 .yarn/cache/의 zip 파일로 보관하며, 생성된 .pnp.cjs 하나가 모든 import를 올바른 zip 항목으로 연결해. 수만 개 node_modules 파일을 훑지 않아도 되고 phantom dependency도 사라져 설치 시간이 크게 줄어. 다만 PnP를 모르는 일부 IDE나 오래된 bundler는 별도 플러그인이 필요해.
또 다른 핵심은 zero-installs야. .yarn/cache/를 Git에 포함하면 새 팀원은 clone 직후 코드를 실행할 수 있고 CI도 yarn install을 건너뛰어. Git 저장소가 커지는 대가가 있지만 설치 시간이 CI를 지배하는 팀이라면 5~10배 빨라질 수 있어.
현재 계열인 Yarn v4는 Node 18 이상이 필요해. 이전에 별도였던 플러그인을 핵심에 합쳤고, v3보다 최초 설치가 3.9배 빠르며, Prolog 기반 제약 엔진을 JavaScript 기반으로 바꿨어. JavaScript 패키지 관리자 가운데 가장 야심차고 운영 철학이 뚜렷한 도구야.