Using Node CLI and REPL

CLI stands for command-line interface and REPL stands for Read Eval Print and Loop. Almost every programming language/environment or even framework provides REPL to play around with the features available.

In this article, we will be using NodeJs REPL to get started with NodeJs.

Lets Start


You will get a screen something like



NodeJs REPL allows autocompleting out of the box.

hit tab (2) times

You will see the huge list of the modules available on NodeJs. Something similar to this

AbortController       AbortSignal           AggregateError        Array                 ArrayBuffer
Atomics               BigInt                BigInt64Array         BigUint64Array        Boolean
Buffer                DataView              Date                  Error                 EvalError
Event                 EventTarget           FinalizationRegistry  Float32Array          Float64Array
Function              Infinity              Int16Array            Int32Array            Int8Array
Intl                  JSON                  Map                   Math                  MessageChannel
MessageEvent          MessagePort           NaN                   Number                Object
Promise               Proxy                 RangeError            ReferenceError        Reflect
RegExp                Set                   SharedArrayBuffer     String                Symbol
SyntaxError           TextDecoder           TextEncoder           TypeError             URIError
URL                   URLSearchParams       Uint16Array           Uint32Array           Uint8Array
Uint8ClampedArray     WeakMap               WeakRef               WeakSet               WebAssembly
_                     _error                assert                async_hooks           atob
btoa                  buffer                child_process         clearImmediate        clearInterval
clearTimeout          cluster               console               constants             crypto
decodeURI             decodeURIComponent    dgram                 diagnostics_channel   dns
domain                encodeURI             encodeURIComponent    escape                eval
events                fs                    global                globalThis            http
http2                 https                 inspector             isFinite              isNaN
module                net                   os                    parseFloat            parseInt
path                  perf_hooks            performance           process               punycode
querystring           queueMicrotask        readline              repl                  require
setImmediate          setInterval           setTimeout            stream                string_decoder
sys                   timers                tls                   trace_events          tty
undefined             unescape              url                   util                  v8
vm                    wasi                  worker_threads        zlib

__proto__             hasOwnProperty        isPrototypeOf         propertyIsEnumerable  toLocaleString
toString              valueOf



We can find all the properties of global object with

global. +(tab)

List will look similar to

global.__proto__             global.hasOwnProperty        global.isPrototypeOf         global.propertyIsEnumerable
global.toLocaleString        global.toString              global.valueOf


global.AbortController       global.AbortSignal           global.AggregateError        global.Array
global.ArrayBuffer           global.Atomics               global.BigInt                global.BigInt64Array
global.BigUint64Array        global.Boolean               global.Buffer                global.DataView
global.Date                  global.Error                 global.EvalError             global.Event
global.EventTarget           global.FinalizationRegistry  global.Float32Array          global.Float64Array
global.Function              global.Infinity              global.Int16Array            global.Int32Array
global.Int8Array             global.Intl                  global.JSON                  global.Map
global.Math                  global.MessageChannel        global.MessageEvent          global.MessagePort
global.NaN                   global.Number                global.Object                global.Promise
global.Proxy                 global.RangeError            global.ReferenceError        global.Reflect
global.RegExp                global.Set                   global.SharedArrayBuffer     global.String
global.Symbol                global.SyntaxError           global.TextDecoder           global.TextEncoder
global.TypeError             global.URIError              global.URL                   global.URLSearchParams
global.Uint16Array           global.Uint32Array           global.Uint8Array            global.Uint8ClampedArray
global.WeakMap               global.WeakRef               global.WeakSet               global.WebAssembly
global._                     global._error                global.assert                global.async_hooks
global.atob                  global.btoa                  global.buffer                global.child_process
global.clearImmediate        global.clearInterval         global.clearTimeout          global.cluster
global.console               global.constants             global.crypto                global.decodeURI
global.decodeURIComponent    global.dgram                 global.diagnostics_channel   global.dns
global.domain                global.encodeURI             global.encodeURIComponent    global.escape
global.eval                        global.fs          
global.globalThis            global.http                  global.http2                 global.https
global.inspector             global.isFinite              global.isNaN                 global.module                   global.os                    global.parseFloat            global.parseInt
global.path                  global.perf_hooks            global.performance           global.process
global.punycode              global.querystring           global.queueMicrotask        global.readline
global.repl                  global.require               global.setImmediate          global.setInterval
global.setTimeout                  global.string_decoder        global.sys
global.timers                global.tls                   global.trace_events          global.tty
global.undefined             global.unescape              global.url                   global.util
global.v8                    global.vm                    global.wasi                  global.worker_threads

All of these are the top-level objects and modules available on the global object.

Remember: Some of them can not be used on the code you will write.

You can always do console.log(global) to see what you can use on your codebase.

<ref *1> Object [global] {
  global: [Circular *1],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  queueMicrotask: [Function: queueMicrotask],
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]

Autocomplete works for any object.


Let's create an empty array to see what functions are available on the array object.

const arr = [];

// And

You can find a list of something like

arr.__defineGetter__      arr.__defineSetter__      arr.__lookupGetter__      arr.__lookupSetter__
arr.__proto__             arr.hasOwnProperty        arr.isPrototypeOf         arr.propertyIsEnumerable

arr.concat                arr.constructor           arr.copyWithin            arr.entries
arr.every                 arr.fill                  arr.filter                arr.find
arr.findIndex             arr.flat                  arr.flatMap               arr.forEach
arr.includes              arr.indexOf               arr.join                  arr.keys
arr.lastIndexOf                    arr.pop                   arr.push
arr.reduce                arr.reduceRight           arr.reverse               arr.shift
arr.slice                 arr.some                  arr.sort                  arr.splice
arr.toLocaleString        arr.toString              arr.unshift               arr.values


You can also have some starting characters autocomplete + (tab)

The output will look something like

arr.concat       arr.constructor  arr.copyWithin

Saving previous value on REPL

You can always create a variable and store the value on it. If you don't want to create a new variable each time you do some calculation, you can use _ to store the previous value.

For example, lets create a random number with Math.random().


And then


You will get previous output stored on _.

You can also use this value for further calculation.

_ * 10

All together ( Values can be different on yours)

> Math.random()
> _
> _ * 10
> _

Special commands

You can get special command with . (period sign) + tab.

. + (tab)

A list of special commands will be listed like:

break   clear   editor  exit    help    load    save

You can use any of these commands preceding with .. In our case since we are wrapping this article here, we will be using .exit.


Thank you!!!