---
sidebar_position: 5
---

# Standard library

The standard libary is provided as part of the `qjs` executable and the `quickjs-libc.c` source file
and it's not part of the core engine.

## Globals

### `argv0`

Provides the executable path.

### `scriptArgs`

Provides the command line arguments. The first argument is the script name.

### `print(...args)`

Print the arguments separated by spaces and a trailing newline.

### `console.log(...args)`

Same as `print()`.

### `navigator.userAgent`

Returns `quickjs-ng/<version>`.

### `gc()`

Shorthand for `std.gc()`.

## `qjs:bjson` module

### `bjson.write(obj, [flags])`

Serializes the given object into the QuickJS internal serialization format.
Returns an ArrayBuffer with the serialized data.

Supported flags:

- `WRITE_OBJ_BYTECODE`: allow serializing functions and modules
- `WRITE_OBJ_REFERENCE`: allow serializing object references
- `WRITE_OBJ_SAB`: allow serializing SharedArrayBuffer instances
- `WRITE_OBJ_STRIP_DEBUG`: strip debugging information when serializing
- `WRITE_OBJ_STRIP_SOURCE`: strip the source information when serializing

### `bjson.read(buf, [pos], [len], [flags])`

De-serialize the given ArrayBuffer (in QuickJS internal serialization format) back into a JavaScript value.

Supported flags:

- `READ_OBJ_BYTECODE`: allow de-serializing functions and modules
- `READ_OBJ_REFERENCE`: allow de-serializing object references
- `READ_OBJ_SAB`: allow de-serializing SharedArrayBuffer instances

## `qjs:os` module

The `os` module provides Operating System specific functions:

- low level file access
- signals
- timers
- basic asynchronous I/O
- workers (threads)

The OS functions usually return 0 if OK or an OS specific negative
error code.

### `open(filename, flags, mode = 0o666)`

Open a file. Return a handle or < 0 if error.

Supported flags:

- `O_RDONLY`
- `O_WRONLY`
- `O_RDWR`
- `O_APPEND`
- `O_CREAT`
- `O_EXCL`
- `O_TRUNC`

POSIX open flags.

- `O_TEXT`

(Windows specific). Open the file in text mode. The default is binary mode.

### `close(fd)`

Close the file handle `fd`.

### `seek(fd, offset, whence)`

Seek in the file. Use `std.SEEK_*` for
`whence`. `offset` is either a number or a BigInt. If
`offset` is a BigInt, a BigInt is returned too.

### `read(fd, buffer, offset, length)`

Read `length` bytes from the file handle `fd` to the
ArrayBuffer `buffer` at byte position `offset`.
Return the number of read bytes or < 0 if error.

### `write(fd, buffer, offset, length)`

Write `length` bytes to the file handle `fd` from the
ArrayBuffer `buffer` at byte position `offset`.
Return the number of written bytes or < 0 if error.

### `isatty(fd)`

Return `true` is `fd` is a TTY (terminal) handle.

### `ttyGetWinSize(fd)`

Return the TTY size as `[width, height]` or `null` if not available.

### `ttySetRaw(fd)`

Set the TTY in raw mode.

### `remove(filename)`

Remove a file. Return 0 if OK or `-errno`.

### `rename(oldname, newname)`

Rename a file. Return 0 if OK or `-errno`.

### `realpath(path)`

Return `[str, err]` where `str` is the canonicalized absolute
pathname of `path` and `err` the error code.

### `getcwd()`

Return `[str, err]` where `str` is the current working directory
and `err` the error code.

### `chdir(path)`

Change the current directory. Return 0 if OK or `-errno`.

### `mkdir(path, mode = 0o777)`

Create a directory at `path`. Return 0 if OK or `-errno`.

### `stat(path)` / `lstat(path)`

Return `[obj, err]` where `obj` is an object containing the
file status of `path`. `err` is the error code. The
following fields are defined in `obj`: `dev`, `ino`, `mode`, `nlink`,
`uid`, `gid`, `rdev`, `size`, `blocks`, `atime`, `mtime`, `ctime`. The times are
specified in milliseconds since 1970. `lstat()` is the same as
`stat()` excepts that it returns information about the link
itself.

- `S_IFMT`
- `S_IFIFO`
- `S_IFCHR`
- `S_IFDIR`
- `S_IFBLK`
- `S_IFREG`
- `S_IFSOCK`
- `S_IFLNK`
- `S_ISGID`
- `S_ISUID`

Constants to interpret the `mode` property returned by
`stat()`. They have the same value as in the C system header
`sys/stat.h`.

### `utimes(path, atime, mtime)`

Change the access and modification times of the file `path`. The
times are specified in milliseconds since 1970. Return 0 if OK or `-errno`.

### `symlink(target, linkpath)`

Create a link at `linkpath` containing the string `target`. Return 0 if OK or `-errno`.

### `readlink(path)`

Return `[str, err]` where `str` is the link target and `err`
the error code.

### `readdir(path)`

Return `[array, err]` where `array` is an array of strings
containing the filenames of the directory `path`. `err` is
the error code.

### `setReadHandler(fd, func)`

Add a read handler to the file handle `fd`. `func` is called
each time there is data pending for `fd`. A single read handler
per file handle is supported. Use `func = null` to remove the
handler.

### `setWriteHandler(fd, func)`

Add a write handler to the file handle `fd`. `func` is
called each time data can be written to `fd`. A single write
handler per file handle is supported. Use `func = null` to remove
the handler.

### `signal(signal, func)`

Call the function `func` when the signal `signal`
happens. Only a single handler per signal number is supported. Use
`null` to set the default handler or `undefined` to ignore
the signal. Signal handlers can only be defined in the main thread.

- `SIGINT`
- `SIGABRT`
- `SIGFPE`
- `SIGILL`
- `SIGSEGV`
- `SIGTERM`

POSIX signal numbers.

### `kill(pid, sig)`

Send the signal `sig` to the process `pid`.

### `exec(args[, options])`

Execute a process with the arguments `args`. `options` is an
object containing optional parameters:

- `block` - Boolean (default = true). If true, wait until the process is
  terminated. In this case, `exec` return the exit code if positive
  or the negated signal number if the process was interrupted by a
  signal. If false, do not block and return the process id of the child.
- `usePath` - Boolean (default = true). If true, the file is searched in the
  `PATH` environment variable.
- `file` - String (default = `args[0]`). Set the file to be executed.
- `cwd` - String. If present, set the working directory of the new process.
- `stdin`, `stdout`, `stderr` - If present, set the handle in the child for stdin, stdout or stderr.
- `env` - Object. If present, set the process environment from the object
  key-value pairs. Otherwise use the same environment as the current
  process.
- `uid` - Integer. If present, the process uid with `setuid`.
- `gid` - Integer. If present, the process gid with `setgid`.

### `waitpid(pid, options)`

`waitpid` Unix system call. Return the array `[ret, status]`.
`ret` contains `-errno` in case of error.

- `WNOHANG`

Constant for the `options` argument of `waitpid`.

### `dup(fd)`

`dup` Unix system call.

### `dup2(oldfd, newfd)`

`dup2` Unix system call.

### `pipe()`

`pipe` Unix system call. Return two handles as `[read_fd, write_fd]` or null in case of error.

### `sleep(delay_ms)`

Sleep during `delay_ms` milliseconds.

### `sleepAsync(delay_ms)`

Asynchronouse sleep during `delay_ms` milliseconds. Returns a promise. Example:

```js
await os.sleepAsync(500);
```

### `setTimeout(func, delay)`

Call the function `func` after `delay` ms. Return a timer ID.

### `clearTimeout(id)`

Cancel a timer.

### `platform`

Return a string representing the platform: `"linux"`, `"darwin"`, `"win32"` or `"js"`.

### `Worker(module_filename)`

Constructor to create a new thread (worker) with an API close to that of
`WebWorkers`. `module_filename` is a string specifying the
module filename which is executed in the newly created thread. As for
dynamically imported module, it is relative to the current script or
module path. Threads normally don't share any data and communicate
between each other with messages. Nested workers are not supported. An
example is available in `tests/test_worker.js`.

The worker class has the following static properties:

- `parent` - In the created worker, `Worker.parent` represents the parent
  worker and is used to send or receive messages.

The worker instances have the following properties:
  
- `postMessage(msg)` - Send a message to the corresponding worker. `msg` is cloned in
  the destination worker using an algorithm similar to the `HTML`
  structured clone algorithm. `SharedArrayBuffer` are shared
  between workers.

- `onmessage` - Getter and setter. Set a function which is called each time a
  message is received. The function is called with a single
  argument. It is an object with a `data` property containing the
  received message. The thread is not terminated if there is at least
  one non `null` `onmessage` handler.

## `qjs:std` module

The `std` module provides wrappers to libc (`stdlib.h` and `stdio.h`) and a few other utilities.

### `exit(n)`

Exit the process.

### `evalScript(str, options = undefined)`

Evaluate the string `str` as a script (global
eval). `options` is an optional object containing the following
optional properties:

- `backtrace_barrier` - Boolean (default = false). If true, error backtraces do not list the
  stack frames below the evalScript.
- `async` - Boolean (default = false). If true, `await` is accepted in the
  script and a promise is returned. The promise is resolved with an
  object whose `value` property holds the value returned by the
  script.

### `loadScript(filename)`

Evaluate the file `filename` as a script (global eval).

### `loadFile(filename)`

Load the file `filename` and return it as a string assuming UTF-8
encoding. Return `null` in case of I/O error.

### `open(filename, flags, errorObj = undefined)`

Open a file (wrapper to the libc `fopen()`). Return the FILE
object or `null` in case of I/O error. If `errorObj` is not
undefined, set its `errno` property to the error code or to 0 if
no error occurred.

### `popen(command, flags, errorObj = undefined)`

Open a process by creating a pipe (wrapper to the libc
`popen()`). Return the FILE
object or `null` in case of I/O error. If `errorObj` is not
undefined, set its `errno` property to the error code or to 0 if
no error occurred.

### `fdopen(fd, flags, errorObj = undefined)`

Open a file from a file handle (wrapper to the libc
`fdopen()`). Return the FILE
object or null` in case of I/O error. If `errorObj` is not
undefined, set its `errno` property to the error code or to 0 if
no error occurred.

### `tmpfile(errorObj = undefined)`

Open a temporary file. Return the FILE
object or `null` in case of I/O error. If `errorObj` is not
undefined, set its `errno` property to the error code or to 0 if
no error occurred.

### `puts(str)`

Equivalent to `std.out.puts(str)`.

### `printf(fmt, ...args)`

Equivalent to `std.out.printf(fmt, ...args)`.

### `sprintf(fmt, ...args)`

Equivalent to the libc sprintf().

### `in`, `out`, `err`

Wrappers to the libc file `stdin`, `stdout`, `stderr`.

### `Error`

Enumeration object containing the integer value of common errors
(additional error codes may be defined):

- `EINVAL`
- `EIO`
- `EACCES`
- `EEXIST`
- `ENOSPC`
- `ENOSYS`
- `EBUSY`
- `ENOENT`
- `EPERM`
- `EPIPE`

### `strerror(errno)`

Return a string that describes the error `errno`.

### `gc()`

Manually invoke the cycle removal algorithm. The cycle removal
algorithm is automatically started when needed, so this function is
useful in case of specific memory constraints or for testing.

### `getenv(name)`

Return the value of the environment variable `name` or
`undefined` if it is not defined.

### `setenv(name, value)`

Set the value of the environment variable `name` to the string
`value`.

### `unsetenv(name)`

Delete the environment variable `name`.

### `getenviron()`

Return an object containing the environment variables as key-value pairs.

### `urlGet(url, options = undefined)`

Download `url` using the `curl` command line
utility. `options` is an optional object containing the following
optional properties:

- `binary` - Boolean (default = false). If true, the response is an ArrayBuffer
  instead of a string. When a string is returned, the data is assumed
  to be UTF-8 encoded.
- `full` - Boolean (default = false). If true, return the an object contains
  the properties `response` (response content),
  `responseHeaders` (headers separated by CRLF), `status`
  (status code). `response` is `null` is case of protocol or
  network error. If `full` is false, only the response is
  returned if the status is between 200 and 299. Otherwise `null`
  is returned.

### `FILE`

File object.

#### `close()`

Close the file. Return 0 if OK or `-errno` in case of I/O error.

#### `puts(str)`

Outputs the string with the UTF-8 encoding.

#### `printf(fmt, ...args)`

Formatted printf.

The same formats as the standard C library `printf` are
supported. Integer format types (e.g. `%d`) truncate the Numbers
or BigInts to 32 bits. Use the `l` modifier (e.g. `%ld`) to
truncate to 64 bits.

#### `flush()`

Flush the buffered file.

#### `seek(offset, whence)`

Seek to a give file position (whence is
`std.SEEK_*`). `offset` can be a number or a BigInt. Return
0 if OK or `-errno` in case of I/O error.

- `SEEK_SET`
- `SEEK_CUR`
- `SEEK_END`

Constants for seek().

#### `tell()`

Return the current file position.

#### `tello()`

Return the current file position as a BigInt.

#### `eof()`

Return true if end of file.

#### `fileno()`

Return the associated OS handle.

#### `error()`

Return true if there was an error.

#### `clearerr()`

Clear the error indication.

#### `read(buffer, position, length)`

Read `length` bytes from the file to the ArrayBuffer `buffer` at byte
position `position` (wrapper to the libc `fread`).

#### `write(buffer, position, length)`

Write `length` bytes to the file from the ArrayBuffer `buffer` at byte
position `position` (wrapper to the libc `fwrite`).

#### `getline()`

Return the next line from the file, assuming UTF-8 encoding, excluding
the trailing line feed.

#### `readAsString(max_size = undefined)`

Read `max_size` bytes from the file and return them as a string
assuming UTF-8 encoding. If `max_size` is not present, the file
is read up its end.

#### `getByte()`

Return the next byte from the file. Return -1 if the end of file is reached.

#### `putByte(c)`

Write one byte to the file.
