# node:console

> How Elide supports Node's `console` module and `Console` class: the inspector-only methods are absent and `console.table` formatting differs from Node.

`node:console` returns `globalThis.console` and exports `Console` for writing to other streams, as in
[Node's `console`](https://nodejs.org/api/console.html).

## Example

```js
// console.mjs
import { Console } from "node:console";
import { Writable } from "node:stream";

let captured = "";
const sink = new Writable({
  write(chunk, _encoding, done) {
    captured += chunk;
    done();
  },
});
const logger = new Console({ stdout: sink, stderr: sink });
logger.log("%s=%d", "retries", 3);
logger.error("failed");
logger.count("hits");
logger.count("hits");
process.stdout.write(captured);
```

`elide run console.mjs` prints:

```text
retries=3
failed
hits: 1
hits: 2
```

## Differences from Node

- `profile`, `profileEnd`, `timeStamp`, `context`, and `createTask` are absent.
- `console.table` spacing and alignment differ from Node; do not parse the output.

<!-- api-reference:start 323334e086d9 -->
## Reference

**Status:** Partial · 20 of 21 suite tests pass (95.2%) · since 1.1.0

### Exports

| Export | Kind | Status | Notes |
| --- | --- | --- | --- |
| `log()` | function | Full | Prints to stdout with newline |
| `info()` | function | Full | Alias for log() |
| `warn()` | function | Full | Prints to stderr with newline |
| `error()` | function | Full | Prints to stderr with newline |
| `debug()` | function | Full | Prints to stdout with newline |
| `trace()` | function | Full | Prints to stderr the string 'Trace: ' followed by a stack trace |
| `dir()` | function | Full | Uses util.inspect() on obj and prints the resulting string to stdout |
| `dirxml()` | function | Full | Alias for log() |
| `table()` | function | Full | Prints a table representation of the data |
| `clear()` | function | Full | Clears the console (when possible) |
| `count()` | function | Full | Maintains an internal counter and outputs the number of times count() has been called with the given label |
| `countReset()` | function | Full | Resets the internal counter for the given label |
| `group()` | function | Full | Increases indentation of subsequent lines by spaces for grouping |
| `groupCollapsed()` | function | Full | Alias for group() |
| `groupEnd()` | function | Full | Decreases indentation of subsequent lines by spaces for grouping |
| `time()` | function | Full | Starts a timer with a given label |
| `timeEnd()` | function | Full | Stops a timer and prints elapsed time |
| `timeLog()` | function | Full | Prints the elapsed time for a running timer without stopping it |
| `assert()` | function | Full | Writes an error message to the console if the assertion is false |

### Not implemented

`context`, `createTask`, `profile`, `profileEnd`, `timeStamp`.

**Tests:** [node-api `node:console`](https://github.com/elide-dev/testsuite/blob/main/reports/1.6.0%2B6e718933f/4cbcae6c33a8/node-api/node-api.md): 20 pass, 1 fail, 0 error, 1 skipped. Failing: `test-console-issue-43095.js`.
<!-- api-reference:end -->
