node stdin read char by char

JavaScript
const stdin = process.stdin;
if (!stdin.isTTY) {
  console.log('Error: TTY is not available. (Don\'t start me with nodemon.)');
  process.exit(1);
}
stdin.setRawMode(true);
stdin.setEncoding('utf8');
stdin.resume();

stdin.on('data', (key) => {
  if (key === '\u0003') {
    process.exit();
  } else if (key === '\b') {
    process.stdout.write('\b \b');
  } else if (key === '\r') {
    process.stdout.write('\r\n');
  } else {
    process.stdout.write(key);
  }
});
Source

Also in JavaScript: