React는 다음과 같은 한계가 존재한다. 컴포넌트의 상태는 공통된 상위요소까지 끌어올려야만 공유될 수 있으며, 이 과정에서 거대한 트리가 다시 렌더링되는 효과를 야기하기도 한다. Context는 단일 값만 저장할 수 있으며, consumer를 가지는 여러 값들의 집합을 담을 수는 없다. 이 두가지 특성이 트리의 최상단(state가 존재하는 곳)부터 트리의 말단(state가 사용되는 곳)까지의 코드 분할을 어렵게 한다. 우리는 API와 의미 및 동작을 가능한 React답게 유지하면서 이것을 개선하고자 한다. Recoil은 orthogonal 하지만 본질적인 방향 그래프를 정의하고 React트리에 붙인다. 상태 변화는 이 그래프의 뿌리(atoms)로부터 순수함수(selectors)를 거쳐 컴포넌트로 흐른다..