| title | Run JavaScript Everywhere |
|---|---|
| layout | home |
Node.js® is a free, open-source, cross-platform JavaScript runtime environment
that lets developers create servers, web apps, command line tools and scripts.
<div className="flex flex-col gap-2">
<Button kind="special" className="!hidden dark:!block" href="/download">Get Node.j®</Button>
<Button kind="primary" className="!block dark:!hidden" href="/download">Get Node.js®</Button>
<Button kind="secondary" className="!block" href="/blog/announcements/node-18-eol-support">
<span>Get security support</span>
<br />
<small className="!text-xs">for Node.js 18 and below</small>
</Button>
<div className="flex flex-row gap-2 justify-center xs:mt-6">
<WithNodeRelease status="Current">
{({ release }) =>
<BadgeGroup size="small" badgeText={release.versionWithPrefix} href={`/blog/release/${release.versionWithPrefix}`}>
Node.js Current
</BadgeGroup>}
</WithNodeRelease>
<WithNodeRelease status="LTS">
{({ release }) =>
<BadgeGroup size="small" kind="warning" badgeText={release.versionWithPrefix} href={`/blog/release/${release.versionWithPrefix}`}>
Node.js LTS
</BadgeGroup>}
</WithNodeRelease>
</div>
<span className="italic text-center text-xs! text-gray-500">
<span>"LTS" stands for the long-term support version of Node.js. </span>
<span>Learn more about Node.js releases <Link href="/about/previous-releases">here</Link>.</span>
</span>
</div>
```js displayName="Create an HTTP Server"
// server.mjs
import { createServer } from 'node:http';
Learn more what Node.js is able to offer with our [Learning materials](/learn).
const server = createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World!\n');
});
// starts a simple http server locally on port 3000
server.listen(3000, '127.0.0.1', () => {
console.log('Listening on 127.0.0.1:3000');
});
// run with `node server.mjs`
```
```js displayName="Write Tests"
// tests.mjs
import assert from 'node:assert';
import test from 'node:test';
test('that 1 is equal 1', () => {
assert.strictEqual(1, 1);
});
test('that throws as 1 is not equal 2', () => {
// throws an exception because 1 != 2
assert.strictEqual(1, 2);
});
// run with `node tests.mjs`
```
```js displayName="Read and Hash a File"
// crypto.mjs
import { createHash } from 'node:crypto';
import { readFile } from 'node:fs/promises';
const hasher = createHash('sha1');
hasher.setEncoding('hex');
// ensure you have a `package.json` file for this test!
hasher.write(await readFile('package.json'));
hasher.end();
const fileHash = hasher.read();
// run with `node crypto.mjs`
```
```js displayName="Streams Pipeline"
// streams.mjs
import { createReadStream, createWriteStream } from 'node:fs';
import { pipeline } from 'node:stream/promises';
import { createGzip } from 'node:zlib';
// ensure you have a `package.json` file for this test!
await pipeline(
createReadStream('package.json'),
createGzip(),
createWriteStream('package.json.gz')
);
// run with `node streams.mjs`
```
```js displayName="Work with Threads"
// threads.mjs
import { Worker, isMainThread,
workerData, parentPort } from 'node:worker_threads';
if (isMainThread) {
const data = 'some data';
const worker = new Worker(import.meta.filename, { workerData: data });
worker.on('message', msg => console.log('Reply from Thread:', msg));
} else {
const source = workerData;
parentPort.postMessage(btoa(source.toUpperCase()));
}
// run with `node threads.mjs`
```