Facebook JS is a collection of utility libraries used by other Facebook JavaScript projects including React and Relay. It provides a comprehensive set of utilities for DOM manipulation, functional programming, data structures, text processing, and browser compatibility.
npm install fbjsfbjs uses a unique import pattern where you must import modules individually from the lib directory:
const invariant = require('fbjs/lib/invariant');
const emptyFunction = require('fbjs/lib/emptyFunction');
const shallowEqual = require('fbjs/lib/shallowEqual');Important: The main index.js file throws an error by design. You must use the full path imports as shown above.
const invariant = require('fbjs/lib/invariant');
const shallowEqual = require('fbjs/lib/shallowEqual');
const cx = require('fbjs/lib/cx');
const ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
// Assertion utility
invariant(user.isLoggedIn, 'User must be logged in to access this feature');
// Shallow equality comparison
const hasChanged = !shallowEqual(prevProps, nextProps);
// CSS class name utility
const className = cx('btn', {
'btn-primary': isPrimary,
'btn-disabled': isDisabled
});
// Environment detection
if (ExecutionEnvironment.canUseDOM) {
// DOM manipulation code
}fbjs is built using Facebook's @providesModule system where:
lib/ directory during buildfbjs/lib/module-nameEssential utilities for data manipulation, string processing, array operations, and basic DOM functionality used throughout Facebook's JavaScript ecosystem.
const emptyFunction = require('fbjs/lib/emptyFunction');
const shallowEqual = require('fbjs/lib/shallowEqual');
const clamp = require('fbjs/lib/clamp');
// Empty function with utility methods
emptyFunction(); // noop
emptyFunction.thatReturns(true); // returns function that returns true
// Shallow equality comparison
function shallowEqual(objA: any, objB: any): boolean;
// Number clamping
function clamp(value: number, min: number, max: number): number;DOM manipulation, CSS utilities, event handling, and style computation functions for browser environments.
const Style = require('fbjs/lib/Style');
const cx = require('fbjs/lib/cx');
const focusNode = require('fbjs/lib/focusNode');
// CSS style utilities
function get(node: DOMNode, name: string): ?string;
function getScrollParent(node: ?DOMNode): ?DOMWindow|DOMElement;
// CSS class name utility
function cx(classNames: string|object, ...args: string[]): string;
// DOM focus utility
function focusNode(node: DOMNode): void;Comprehensive functional programming utilities for arrays, objects, and sets with map, filter, reduce, and transformation operations.
const mapObject = require('fbjs/lib/mapObject');
const filterObject = require('fbjs/lib/filterObject');
const compactArray = require('fbjs/lib/compactArray');
// Object utilities
function mapObject<T, U>(object: {[key: string]: T}, callback: (value: T, key: string, object: {[key: string]: T}) => U, context?: any): {[key: string]: U};
function filterObject<T>(object: {[key: string]: T}, predicate: (value: T, key: string, object: {[key: string]: T}) => boolean, context?: any): {[key: string]: T};
// Array utilities
function compactArray<T>(array: Array<?T>): Array<T>;Specialized data structure implementations including Heap, CircularBuffer, IntegerBufferSet, and PrefixIntervalTree.
const Heap = require('fbjs/lib/Heap');
const CircularBuffer = require('fbjs/lib/CircularBuffer');
// Heap data structure
class Heap {
constructor(items?: Array<any>, comparator?: (a: any, b: any) => number);
empty(): boolean;
pop(): any;
push(item: any): void;
size(): number;
peek(): any;
}International text processing utilities for Unicode handling, bidirectional text, CJK languages, and localization support.
const UnicodeBidi = require('fbjs/lib/UnicodeBidi');
const UnicodeUtils = require('fbjs/lib/UnicodeUtils');
const Locale = require('fbjs/lib/Locale');
// Unicode text processing utilities
// Bidirectional text support
// CJK language utilitiesHTTP request utilities including fetch implementations, retry logic, and data serialization for network operations.
const fetch = require('fbjs/lib/fetch');
const fetchWithRetries = require('fbjs/lib/fetchWithRetries');
const xhrSimpleDataSerializer = require('fbjs/lib/xhrSimpleDataSerializer');
// Fetch API implementation
// Uses global.fetch if available, otherwise cross-fetch polyfill
// Fetch with retry logic
function fetchWithRetries(uri: string, initWithRetries?: Object): Promise<Response>;
// XHR data serialization
function xhrSimpleDataSerializer(data: any): string;Performance monitoring utilities and cryptographic functions including base62 encoding and CRC32 hashing.
const performanceNow = require('fbjs/lib/performanceNow');
const base62 = require('fbjs/lib/base62');
const crc32 = require('fbjs/lib/crc32');
// High-resolution timestamp
function performanceNow(): number;
// Base62 encoding
function base62(number: number): string;
// CRC32 hash function
function crc32(input: string): number;Browser detection, user agent parsing, and version comparison utilities for cross-browser compatibility.
const UserAgent = require('fbjs/lib/UserAgent');
const UserAgentData = require('fbjs/lib/UserAgentData');
const VersionRange = require('fbjs/lib/VersionRange');
// User agent parsing and detection
// Browser information object
// Version range comparison utilitiesDevelopment aids including assertion utilities, error handling, debugging tools, and data type utilities.
const invariant = require('fbjs/lib/invariant');
const warning = require('fbjs/lib/warning');
const nullthrows = require('fbjs/lib/nullthrows');
// Assertion utility with sprintf formatting
function invariant(condition: any, format: string, ...args: Array<any>): void;
// Development warning utility (no-op in production)
function warning(condition: boolean, format: string, ...args: Array<any>): void;
// Null/undefined assertion with type narrowing
function nullthrows<T>(value: ?T): T;