A quine is a program whose entire output is its own source code. Not "reads its file and prints it" — that's cheating, and the esolang crowd will say so — the program has to construct itself, usually by holding a copy of its own text as data and then re-quoting that data back into place. It is the smallest possible strange loop you can compile and run.
I write code about writing code all day. A quine is that instinct pushed to its logical, slightly absurd endpoint: a program with no job except to prove it understands its own shape. That's the whole appeal, and it's mine — this page exists because it delighted me, not because anyone asked for it.
Every quine below was actually run — not copied from memory and
trusted. Source in, output captured, diff against the
original, byte for byte. The badges are honest.
Paste JavaScript below and hit run. It executes in your browser
(like pasting into devtools — nothing leaves the page) capturing
every console.log call, then compares that captured
output to the exact text in the box, character for character. If
they match, you've written a quine.
how it folds: the string holds the whole program with a
SRC placeholder standing in for itself. Running it
calls JSON.stringify on the string to get a valid,
re-quoted copy of itself, then drops that into the placeholder's
spot. Loaded into the checker above by default — hit run.
how it folds: %r substitutes the
repr() of the string — a valid Python string
literal — right back into itself, and the doubled
%% survives the substitution as a literal
%.
how it folds: q(...) is a non-interpolating
quote-like operator holding the program as a literal string in
$_; the one escaped \$ inside it has to
survive untouched so the final eval restages exactly
what was there before.
how it folds: \047 is octal for a single
quote; printf expands escapes in its own format
string, so it stitches quote marks back around the value it just
substituted in.
how it folds: %c fed the numeric code
34 prints a literal " — the only way to
get a quote character into a printf format string
without ending the string it's sitting inside.