Node.js는 자바스크립트를 런타임으로 실행 시켜주는 환경을 의미한다. 여기서 런타임이란 기존 자바스크립트가 브라우저에서만 실행이 가능했는데, 이것은 브라우저에서 벗어나 다른 환경에서도 동작할 수 있게 해주는 것으로 Node.js는 C/C++로 만들어진 V8엔진과 llbuv과 연결되어 있다. libuv는 논블로킹 I/O, 이벤트 모델을 구현하고 있다. Node.js는 이벤트 모델에 있는 이벤트 루프가 콜스택을 어떤 순서로 콜백함수를 호출 할 지 관리를 한다.
Node.js는 다음의 철학을 가지고 있는데 그 철학은 다음과 같다.
코어한 기능을 최소한으로 하고 나머지를 소위 사용자의 영역으로 해서 핵심적인 기능 외에 핵심 모듈들을 모두 외부 모듈로서 사용하는 방식을 취한다. 이는 핵심 기능을 최소한으로 유지하면 유지 보수 측면에서 편리할 뿐만 아니라 전체 생태계의 발전에 긍정적인 문화적 영향을 가져올 수 있다.
모듈은 재사용성이 가능한 라이브러리로 어플리케이션과 패키지라고 불리우는 Node.js의 조립용 블록이다. Node.js의 널리 퍼진 원칙 중 코드 크기 뿐만 아니라 범위적인 면에서도 작은 모듈을 설계하는 원칙이 있다. 이 원칙은 유닉스 철학에 뿌리를 두고 있는데 작은 것이 아름답다, 각 프로그램이 각기 한 가지 역할을 잘 하도록 만든다 라는 두 가지 계율에 근거한다.
이러한 방식은 어플리케이션을 작고 잘 집중화된 수 많은 의존성들로 구성하여 재사용성을 극도로 높힌다. 이러한 작은 모듈들은 재사용성 뿐만 아니라 이해하기 쉽고 사용하기가 쉽다, 테스트 및 유지보수가 훨씬 간단하다, 브라우저와 완벽한 공유가 가능하다 라는 장점을 가진다.
이러한 장점들로 이뤄진 더 작고 집중된 모듈들을 사용하게 될 경우 작은 코드 조각이라고 해도 모두 공유가 가능하며 재사용 할 수 있게 되는데 이것은 같은 것을 반복하지 말라라는 원칙의 발전적인 적용 형태이다.
단순함이야말로 궁극의 정교함이다 , 불완전 한 것이 낫다라는 문구가 있는데 이는 부족하지만 단순한 기능이 소프트웨어에 있어서 더 좋은 디자인이라는 의미이다. 디자인은 구현과 인터페이스 모두에서 단순해야 한다. 구현이 인터페이스 보다 단순해야 하는 것이 중요하다. 단순함은 설계에서 가장 중요한 고려 사항이다라고 저명한 컴퓨터 공학자인 리차드 가브리엘이 말한 것처럼 단순한 설계는 여러 가지 이유로 완벽한 모든 기능을 가진 소프트웨어에 비해 훌륭한 원칙이다.
순수한 객체지향 설계는 종종 실제 세계를 불완전함과 복잡성을 고려하지 않고 컴퓨터 시스템의 수학적 용어를 사용하여 실제 세계를 복사하려는 시도를 한다. 그러한 노력은 거의 완벽한 소프트웨어를 만드는데에 목적을 두지만 사실 거의 완벽한 소프트 웨어를 만들려 노력하기 보다는 합리적 수준의 복잡성을 가지고 더 빨리 작업하는 것이 더 큰 성공이다.