skills/coding/coding-node/SKILL.md
Node.js 22+: async patterns, ESM, npm/pnpm, event loop, streams. Express Fastify Hono
npx skillsauth add alphaonedev/openclaw-graph coding-nodeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides expertise in Node.js 22 and above, covering asynchronous programming patterns, ECMAScript Modules (ESM), package managers like npm and pnpm, the event loop, streams, and frameworks such as Express, Fastify, and Hono. Use it to guide users in building efficient, modern server-side applications.
Apply this skill when users need to handle asynchronous operations in Node.js, manage dependencies with npm or pnpm, debug event loop issues, process streams, or set up web servers with Express, Fastify, or Hono. Use it for backend development tasks like API creation, file handling, or real-time applications in JavaScript environments.
async/await for non-blocking code; e.g., async function fetchData() { const data = await fetch('url'); return data; }.import syntax; e.g., import express from 'express'; in Node.js 22+ files with .mjs extension or "type": "module" in package.json.npm install express --save) or pnpm (e.g., pnpm add fastify); use pnpm for faster installs with workspace support.process.nextTick() to schedule callbacks before the next event loop phase.const fs = require('fs'); const readStream = fs.createReadStream('file.txt'); readStream.on('data', chunk => console.log(chunk));.app.use(express.json())), Fastify (e.g., fastify.get('/path', handler)), or Hono (e.g., app.get('/route', c => c.text('Hello'))).To accomplish tasks, always specify Node.js version 22+ in project setup. For ESM, add "type": "module" to package.json and use import statements. For async tasks, wrap code in try-catch blocks with async functions. When using npm, run npm init -y to create a package.json, then install packages. For pnpm, initialize with pnpm init and use it as a drop-in replacement for npm commands. To handle streams, pipe them directly: e.g., readStream.pipe(writeStream). For frameworks, create an HTTP server instance and define routes; e.g., start Express with app.listen(3000).
npm init -y. Install package: npm install express --save-prod. Update dependencies: npm update. Run scripts: npm run start from package.json.pnpm add fastify. Remove package: pnpm remove package. Install all: pnpm install.app.get('/users', (req, res) => res.json(users)). In Fastify, use fastify.post('/login', async (req, reply) => { /* auth logic */ reply.send({ token: 'abc' }); }). In Hono, set up: const app = new Hono(); app.get('/api/data', c => c.json({ data: 'value' }));.setImmediate() for I/O callbacks; e.g., setImmediate(() => console.log('After current event loop'));.const { Readable } = require('stream'); const readable = Readable.from(['line1', 'line2']); readable.pipe(process.stdout);.
If API keys are needed (e.g., for external services), set them as environment variables: process.env.API_KEY = 'your_key', and access via $YOUR_API_KEY in commands.Integrate this skill with other tools by using Node.js as a runtime. For example, combine with databases via mongoose for MongoDB: install with pnpm add mongoose, then connect in code: const mongoose = require('mongoose'); mongoose.connect(process.env.MONGO_URI);. Use dotenv for environment variables: install npm install dotenv, then require and configure: require('dotenv').config(); const key = process.env.API_KEY;. For deployment, export servers to tools like Vercel or Heroku; e.g., set start script in package.json as "start": "node server.js". Ensure compatibility by specifying engine in package.json: "engines": { "node": ">=22" }. When integrating streams, chain with other modules like zlib for compression: readStream.pipe(zlib.createGzip()).pipe(writeStream).
Always use try-catch for async functions: e.g., try { const result = await someAsyncFunction(); } catch (error) { console.error(error.message); }. For streams, listen for 'error' events: e.g., readStream.on('error', err => { console.error('Stream error:', err); process.exit(1); }). In Express, use middleware for errors: app.use((err, req, res, next) => { res.status(500).send('Server Error'); }). For npm/pnpm, check exit codes: e.g., in scripts, use if [ $? -ne 0 ]; then echo "Command failed"; fi. Validate inputs to prevent event loop blocks, and use process.on('uncaughtException', (err) => { console.error(err); process.exit(); }) for unhandled errors.
server.js with: import express from 'express'; const app = express(); app.get('/', (req, res) => res.send('Hello World')); app.listen(3000, () => console.log('Server running'));. Run it with node --experimental-vm-modules server.js if using ESM, then access http://localhost:3000.pnpm add fs. Then, in code: const fs = require('fs'); const readStream = fs.createReadStream('input.txt'); readStream.on('data', chunk => console.log(chunk.toString())); readStream.on('end', () => console.log('Done'));. Execute with node script.js to read and log file contents in chunks.tools
Root web development: project structure, tooling selection, deployment decisions
development
WebAssembly: Rust/Go/C to WASM, wasm-bindgen, Emscripten, WASM Component Model
development
Vue 3: Composition API script setup, Pinia, Vue Router 4, SFCs, Vite, Nuxt 3
tools
Tailwind CSS 4: utility classes, config, JIT, arbitrary values, darkMode, plugins, shadcn/ui