Serial.available() buffered?

This question must have been asked but I cannot find these answer.
The documentation and many examples seem to suggest that any character input to the Serial device (e.g. Monitor) will be put in the buffer and be immediately reported via Serial.available(). The simple program below however seems to operate differently. Serial.available() only return an int>0 after a line terminator has been entered.

void setup() {
Serial.begin(9600);
delay (250);
Serial.println("Enter a character");
}

char ch;
void loop() {
  while(Serial.available() > 0 ) {
     ch = Serial.read();
     Serial.println(ch);
  }
}

As I type a sentence into the input line on the Serial Monitor, nothing is echoed out until I "ENTER"

So the question is "How do I get each character as they are entered?"

This code was run on an Arduino Uno using Arduino IDE 2

You can't... they aren't sent until you hit [Send].

…or use a Serial Terminal app.
Serial Monitor is seriously limited/flawed.

TeraTerm, PuTTY, almost anything.

I hear you saying that the line terminator requirement is a function of the Serial Monitor and not the driver? I'll give a try tomorrow. Thanks

As the others write, almost anything will send characters as soon as they are typed.

The Wokwi simulator can do both. It can act as a Arduino Serial Monitor and wait for the 'Enter' key, or it can simulate a normal Serial Terminal app and send characters as soon as they are typed.

This is in the Terminal mode: SerialAvailable.ino - Wokwi Arduino and ESP32 Simulator
After starting the simulation, be sure to set the focus to the serial field (click on it) and then type something.

Serial Monitor collects your data and only sends after "Send".
use another terminal program and you will see that .available() is working.

Data that you want to send from serial monitor is only send when you press <enter> or click <send>; this has nothing to do with the line terminator.

You can specify the line terminator in the right bottom of the serial monitor; the selected option is added to the text that you type in the input box.

I’m confused, what this has to do with buffering?

Is it?

Thanks to all who provided helpful information. I now understand the issue and program accordingly.