Sign in

Julia Evans

@b0rk.jvns.ca
76K followers 330 following 6.8K posts

programming and exclamation marks blog: jvns.ca zines: wizardzines.com

PostsRepliesMedia
Julia Evans @b0rk.jvns.ca · 21/07/2026
wizard zines has its first translation! How Git Works (wizardzines.com/zines/git) is now available in Korean, translated by ByteFreaksStudio inf.run/XYiAR I do not know how to read Korean but it's very cool to see :)
the "combining diverged branches" from How Git Works, in Korean
1658
Julia Evans @b0rk.jvns.ca · 11/06/2026
here's a first draft of the ssh key page I think it's probably missing something important, there are so many weird gotchas around ssh keys
1140
Julia Evans @b0rk.jvns.ca · 07/05/2026
just saw this review of "The Secret Rules of the Terminal" and it's the best feeling when someone got exactly what I'd hoped they'd get from the zine wizardzines.com/zines/termin...
This was the best and easiest way to understand why pressing up/down, or delete key, shit out weird characters to my terminal emulator. I was facing this issue intermittently and it broke me.

The documentation talking about resolving these issues on the systems I work on a daily basis (rhel 7 and older) with no sudo access; using old arcane stuff from the Roman empire era was sparse.

I could not for the life of me figure out what the root cause of this issue was.

I did read about the fundamental concept of these years ago on either Debian or Arch wiki page, but approaching the same thing again after multiple years "out-of-the-terminal" felt daunting.

Julia has a knack for making things accessible and I was excited to buy this as soon as it dropped.

Happy with the purchase! The physical copy is totally worth it for me (and I am grateful to get a PDF as a backup option)

Looking forward to more stuff from her!
0733
Julia Evans @b0rk.jvns.ca · 06/05/2026
excited to announce that Wizard Zines is now shipping Canadian orders from Canada! now shipping is cheaper & there's no risk of being hit with duties get your zines at wizardzines.com
a cartoon with a map of Canada, where the the order is being shipped from Montreal to Saskatchewan
48711
Julia Evans @b0rk.jvns.ca · 31/03/2026
also I love how the How DNS Works table of contents sort of explains how DNS works a little bit wizardzines.com/zines/dns/
1374
Julia Evans @b0rk.jvns.ca · 31/03/2026
just noticed it's How DNS Works' 4th birthday soon! wizardzines.com/zines/dns/ it's still one of my favourite zines, and it comes with a free ★★ playground ★★ at messwithdns.net where you can create DNS records and see what happens!
How DNS Works!, by Julia Evans - A cartoon of a person in a cool puffy outfit navigating a futuristic city street. A passer-by has a speech bubble with an IP address in it, and a floating robot is projecting “Wanted: Example cat.com”, with a picture of a cat wearing sunglasses.
16316
Julia Evans @b0rk.jvns.ca · 26/03/2026
how diffie hellman key exchange works (with as little math as possible)
7427113
Julia Evans @b0rk.jvns.ca · 24/03/2026
we just added a way to merge accounts to library.wizardzines.com, so that if you've used more than one email to buy zines you can see all your zines in one place!
A screenshot of the "zine library" view, with the link to add a new account highlighted below the list of zines
0387
Julia Evans @b0rk.jvns.ca · 22/02/2026
i love how when I decided that I wanted to Write Some Real Open Source Code in 2018 I thought "I need a new github avatar to communicate that i am a serious person" and made this i 100% stand by it great job past self
422010
Julia Evans @b0rk.jvns.ca · 19/02/2026
huh I've heard this before but when I run `env MANPAGER=nvim man ls` I get something that looks like this, which doesn't seem right
000
Julia Evans @b0rk.jvns.ca · 18/02/2026
that's interesting, fish does something similar but for some reason I've never used it
020
Julia Evans @b0rk.jvns.ca · 17/02/2026
It's been nice to see people using library.wizardzines.com to view their zine collections (over a thousand people have used it so far!) I think we're going to add a feature to merge accounts if you used more than one email to buy zines
2432
Julia Evans @b0rk.jvns.ca · 03/02/2026
Over the years I've been hearing from folks that it's hard to remember which zines you've bought So we built a new library website where you can see & download all your zines! library.wizardzines.com
Image of a person sitting next to a bookshelf with their zines

Welcome! Enter your email address and we'll send you a link to download all of the zines that you've ordered in the past.
1628
Julia Evans @b0rk.jvns.ca · 28/11/2025
If you get the print versions of all the zines shipped to you, here's what you'll get! (plus bonus stickers :)) wizardzines.com
1222
Julia Evans @b0rk.jvns.ca · 28/11/2025
it's happening!!! from now until the end of the day on Friday, November 28th (if it’s Friday anywhere, the sale’s still on!), all my pdf zines are 50% off, and print zines are 30% off! wizardzines.com
woman with shell necklace and a redirects belt accessory
78946
Julia Evans @b0rk.jvns.ca · 27/11/2025
finally: How Integers and Floats Work This one started out life as "a zine about how computers represent data in binary", but there was only space to talk about numbers. But I still think of this as the "binary zine". wizardzines.com/zines/intege... (16/16)
1131
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: Become a SELECT Star! This is a quick intro to some of the surprising things about SQL! (like how NULL is not equal to NULL), as well as some fun features like window functions. I wrote this when I was running SQL queries to do data analysis a lot. wizardzines.com/zines/sql/ (15/16)
120
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: How DNS Works! DNS is frustrating, but I think the way it works is really cool. This explains how the protocol works, what gets cached, and how to use `dig` to debug DNS problems. wizardzines.com/zines/dns/ (14/16)
120
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: The Pocket Guide to Debugging This is a guide to debugging! It's a mix of practical tips ("see if you can find an old version of the code that works!") and ways to manage all of the FEELINGS that come up while debugging. wizardzines.com/zines/debugg... (13/16)
220
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: Bite Size Bash! I love writing simple bash scripts (you can do so much!) but bash has some weird gotchas. This zine explains all the surprising bash things that have tripped me up. wizardzines.com/zines/bite-s... (12/16)
120
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: Bite Size Networking I love that there are so many command line tools to see what's going on on your network, but it can be overwhelming at first. It has examples and the command line arguments that I actually use for each tool wizardzines.com/zines/bite-s... (11/16)
130
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: Bite Size Command Line This is a reference for the basic Linux command line tools (grep! awk!) with just the command line arguments that I actually use and examples for each one. I wrote this because I was mad that man pages don't have examples 💔 wizardzines.com/zines/bite-s... (10/16)
130
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: Bite Size Linux! This is about some of the basic building blocks on Linux (files! signals! system calls!), and how you can inspect them (like with /proc, /proc is AMAZING) It's one of the first zines so it's all handwritten. wizardzines.com/zines/bite-s... (9/16)
130
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: HTTP: Learn Your Browser's Language Learning how HTTP works really made websites click for me. I just think it's so cool that in your browser's network tab you can click on a request and see exactly what's going on in a (fairly) human-readable way. (8/16) wizardzines.com/zines/http/
130
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: Help! I Have a Manager! When I first started a job with a manager, I didn't understand what my relationship with my manager was supposed to look like. This is about what I learned from working with a great manager. wizardzines.com/zines/manager/ (7/16)
120
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: How Git Works! This is our best-selling zine of all time! It explains git's core concepts (commits! branches! merging! remotes!) with minimal jargon and a focus on the actual problems that can ruin your day. wizardzines.com/zines/git/ (6/16)
130
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: Oh Shit, Git! This was a collab with the amazing Katie Sylor-Miller (@ksylor.bsky.social), the author of ohshitgit.com It's a reference for what to do to git out of a git mess wizardzines.com/zines/oh-shi... (5/16)
183
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: Hell Yes! CSS! I used to be terrified of CSS. What helped me was starting to really take CSS seriously and accept that I was going to have to spend hours debugging tiny "formatting" issues. This zine is about some CSS basics that confused me at first. wizardzines.com/zines/css/ (4/16)
140
Julia Evans @b0rk.jvns.ca · 27/11/2025
next: How Containers Work! I found containers WAY easier to understand when I understood the individual Linux features that containers are built with: namespaces! capabilities! pivot_root! overlay filesystems! seccomp! wizardzines.com/zines/contai... (3/16)
130
Julia Evans @b0rk.jvns.ca · 27/11/2025
first: my newest zine, The Secret Rules of the Terminal! This has all the gnarly details about the Unix terminal that I wish I knew when I started using it. It's weird and kind of wonderful (I talk about why you can use your mouse in the terminal!) wizardzines.com/zines/termin... (2/16)
150
Julia Evans @b0rk.jvns.ca · 27/11/2025
tomorrow November 28 we're doing a Big Zine Sale! Here's a thread about every zine that will be on sale (it's all of them) (feel free to mute this thread :)) wizardzines.com (1/16)
zine sale! coming november 28, 50% off PDF zines, 30% off print zines A cartoon of a person in a spacesuit, accompanied by a penguin (also in a spacesuit), flying through a colourful tunnel. The person has an excited expression, a medium skin tone, and big curly hair that fills the bubble helmet of their spacesuit.
1416
Julia Evans @b0rk.jvns.ca · 18/11/2025
Wizard Zines is doing another Big Zine Sale again this year on Friday, November 28th! One day only. here’s a google calendar link for the duration of the sale if you want a reminder: wzrd.page/cal
zine sale!  coming november 28, 50% off PDF zines, 30% off print zines 

 A cartoon of a person in a spacesuit, accompanied by a penguin (also in a spacesuit), flying through a colourful tunnel. The person has an excited expression, a medium skin tone, and big curly hair that fills the bubble helmet of their spacesuit.
03818
Julia Evans @b0rk.jvns.ca · 20/10/2025
just added the MEGA TERMINAL CHEAT SHEET from "The Secret Rules of the Terminal" to our list of posters at wizardzines.com#posters
321145
Julia Evans @b0rk.jvns.ca · 14/10/2025
TERM wizardzines.com/comics/term/ (from The Secret Rules of the Terminal, out now! wizardzines.com/zines/terminal)

different terminal emulators use different escape codes

terminal emulator 1: if you print out ESC[2J I’ll clear the screen!

terminal emulator 2: for me it’s ESC[HESC[J!
your system has a database called “terminfo” with escape codes in it

how if plays out when you press Ctrl+L to clear the screen:

program, with a little heart over it, thinking:
ah, she wants fo clear the screen! I’ll look up how to do that in the terminfo database…

(on my machine, the database is in /usr/share/terminfo)

program: ESC[HESC[J

terminal emulator, thinking: ok, clearing the screen!
how programs know what terminal you’re using: TERM

your terminal emulator sets the TERM environment variable when it starts

fun fact: terminal emulators often say they’re “xterm-256color” even if they’re not
this can break when SSHing into an old system with a new terminal emulator

(in a VERY annoying way)

happy little stick fiture: I am using ghostty

program, with a little heart over it: NOPE never heard of it
some ways to fix TERM

    install the terminfo file for your terminal emulator on the system
    use a different terminal emulator
    just set TERM=xterm-256color, it’ll often sort of work
010310
Julia Evans @b0rk.jvns.ca · 07/10/2025
redirects wizardzines.com/comics/termi... (from "The Secret Rules of the Terminal", out now! wizardzines.com/zines/termin...)
redirect to a file:

cmd > file.txt terminal emulator into program, program out to file.txt, error out to terminal emulator
append to a file:

cmd >> file.txt terminal emulator into program, program out to file.txt (append mode), error out to terminal emulator
send a file to stdin:

cmd < file.txt file.txt into program, program out and err to terminal emulator
redirect stderr to a file:

cmd 2 > file.txt terminal emulator into program, program out to nowhere, err out to file.txt
redirect stdout AND stderr:

cmd > file.txt 2>&1 terminal emulator into program, out and err to file.txt
pipe stdout:

cmd1 | cmd2 terminal emulator into program 1, 1 out to program 2 via pipe, 2 out to command line, program 2 out 1 and 2 to terminal emulator
pipe stdout AND stderr:

cmd1 2>&1 | cmd2 terminal emulator into program 1, 1 and 2 out to program 2 via pipe, program 2 out 1 and 2 to terminal emulator
three gotchas

    cmd file.txt > file.txt will delete the contents of file.txt some people use set -o noclobber (in bash/zsh) to avoid this

but I just have “never read from redirect to the same file” seared into my memory.

    sudo echo blah > /root/file.txt doesn’t write to /root/file.txt as root. Instead, do:

echo blah | sudo tee /root/file.txt or sudo sh -c 'echo blah > /root/file.txt'

    cmd 2>&1 > file.txt doesn’t write both stdout and stderr to file.txt. Instead, do: cmd > file.txt 2>&1

cat vs <

I almost always prefer to do:

cat file.txt | cmd

instead of

cmd < file.txt

it works fine & it feels better to me

using cat can be slower if if’s a GIANT file though
&> and &|

some shells support &> and &| to redirect/pipe both stdout and stderr

(also some shells use |& instead of &|)
212624
Julia Evans @b0rk.jvns.ca · 29/09/2025
meet the terminal emulator wizardzines.com/comics/meet-... (from The Secret Rules of the Terminal, out now! (wizardzines.com/zines/termin...)
your terminal emulator has two main jobs

    turn your actions (typing & clicking) into bytes and send them
    receive bytes and display them visually

Illustration of a terminal emulator, with a winking cursor face, and a program, represented by a box with a smiley face. The program has a heart above it, and there are arrows going back and forth between them labelled “bytes”
a little bit of history

it’s called an “emulator” because in the 80s a “terminal” was a separate machine from the computer

Illustration of a bulky old monitor, with a keyboard attached with a spiral cord, and a wire running to a panl of buttons and displays, labelld “mainframe”. There are arrows going back and forth between them labelled “bytes”

We still use the same 80s protocol!
what are these “bytes”?

the bytes are either:

    text (like cat blah.txt)
    escape codes (for example to tell the terminal what colour to display the text in)
    control characters example Ctrl+C is the byte 3)

it’s in charge of copy and paste

your terminal emulator lets you select text and copy/paste it (usually with Ctrl+Shift+C (Linux) or Cmd+C (Mac))

(copy & paste tips on page 18!)
it manages colours and fonts!

some terminal emulators come with a big theme library of different colourschemes!

if yours doesn’t, this site has colourschemes for many terminal emulators: iterm2colorschemes.com
fun fact: how Ctrl-X gets translated to bytes

Ctrl-A => 1
Ctrl-B => 2
...
Ctrl-Z => 26

Ctrl is the only modifier key I trust in the terminal, all of the others can work differently depending on the situation
110921
Julia Evans @b0rk.jvns.ca · 24/09/2025
stty wizardzines.com/comics/stty/ (from The Secret Rules of the Terminal, out now! wizardzines.com/zines/termin...)
your TTY driver has configuration

you can see how it’s configured by running:

stty -a

for example it print out the current window size!
Ctrl+S

by default, pressing Ctrl+S wi(( freeze your terminal (and Ctrl+Q wi(( unfreeze) I have never wanted this in my life, you can turn it off with stty -ixon (fish turns it off by default)

###fun fact: changing Ctrl+C technically you can use stty to set a different keyboard shortcut for Ctrl+C, (ike “u”

stty intr u

this is extremely chaotic and I can’t imagine a reason that I would ever do this though
programs have to configure the TTY driver to get friendly features

developer: I want arrow keys to work in my program!

other person: better tell the TTY driver to turn off canonical mode! (more on the next page)
the TTY driver’s settings are called “termios settings”

for the gnarly details:

man termios

but if you’re writing a terminal program libraries like readline or ncurses will handle setting up the TTY driver
panel 6

smiling stick figure with short curly hair: I’ve only needed to use stty once in the last 20 years and I mostly don’t understand its output but I think it’s a fun view into terminal internals!
811921
Julia Evans @b0rk.jvns.ca · 15/09/2025
TERM wizardzines.com/comics/term/ (from "The Secret Rules of the Terminal", out now! wizardzines.com/zines/termin...)
different terminal emulators use different escape codes

terminal emulator 1: if you print out ESC[2J I’ll clear the screen!

terminal emulator 2: for me it’s ESC[HESC[J!
your system has a database called “terminfo” with escape codes in it

how if plays out when you press Ctrl+L to clear the screen:

program, with a little heart over it, thinking:
ah, she wants fo clear the screen! I’ll look up how to do that in the terminfo database…

(on my machine, the database is in /usr/share/terminfo)

program: ESC[HESC[J

terminal emulator, thinking: ok, clearing the screen!
how programs know what terminal you’re using: TERM

your terminal emulator sets the TERM environment variable when it starts

fun fact: terminal emulators often say they’re “xterm-256color” even if they’re not
this can break when SSHing into an old system with a new terminal emulator

(in a VERY annoying way)

happy little stick fiture: I am using ghostty

program, with a little heart over it: NOPE never heard of it
some ways to fix TERM

    install the terminfo file for your terminal emulator on the system
    use a different terminal emulator
    just set TERM=xterm-256color, it’ll often sort of work
0787
Julia Evans @b0rk.jvns.ca · 08/09/2025
finally (after literally everyone else *) I got my print copy of The Secret Rules of the Terminal! wizardzines.com/zines/termin... (* or I hope after literally everyone else, please send us a support email if you didn't get your preordered copy yet!)
The Secret Rules of the Terminal, by Julia Evans - The cover illustration depicts three people doing arcane terminal magic in a temple with a smoking censer in the background. Each of the three people has curly brown hair and light brown skin. They are all wearing dresses, billowing cloaks, and utility belts with keyboard symbols on them. The one on the left holds a palette of paints and a brush. The one on the right has a staff with a $ symbol on it and a starfish at the top. The one in the centre has a sword and is reading from a book whose cover says “>_” and “./”, which rests on a lectern with a smiling snake wrapped around it.
0749
Julia Evans @b0rk.jvns.ca · 08/09/2025
meet the TTY driver wizardzines.com/comics/meet-... (from "The Secret Rules of the Terminal", out now!)
the TTY driver is the most obscure part of the system

You almost never need to think about it, but when I’ve wanted to do something weird (like put a terminal in a web browser) understanding the driver is SO USEFUL
when you start your terminal emulator, it asks the OS to create a “pseudoterminal pair” which is a pair of two files

terminal emulator <-> TTY <-> TTY driver <-> TTY <-> program
a “TTY” is the program’s side of the pair

programs use it to:

    communicate with the terminal emulator by reading/writing bytes
    configure the TTY driver (more on the next page!)

Run tty fo see the current TTY!
the TTY driver is why Ctrl+C does the same thing relatively consistently

program: you press Ctrl+C, I send a signal!
well, unless the program tells me it wants the raw bytes!
some things the TTY driver is in charge of

(you might think “these are unrelated” and you’d be right)

    storing the terminal window’s size
    sending a SIGHUP signal when you close your terminal
    a basic mode for entering text called “canonical mode”
    pausing the output and confusing you when you press Ctrl+S
    tracking which process is in the “foreground” and sending what you type there
310018
Julia Evans @b0rk.jvns.ca · 02/09/2025
terminal colours wizardzines.com/comics/colou... (from "The Secret Rules of the Terminal", out now!)
your terminal emulator has 16 configurable colours
	normal 	bright
black 	0 	0
red 	1 	1
green 	2 	2
yellow 	3 	3
blue 	4 	4
purple 	5 	5
cyan 	6 	6
white 	7 	7
these are called “ANSI colours”

you can configure them in your terminal emulator’s settings

OR

run a script that prints escape codes to magically set up your colours https://wzrd.page/scripts
(my favourite way!)
programs can use ANSI colours by printing an escape code

echo -e "\033[34m blue text"

3 means “normal fg colour”
4 means “blue”
the default ANSI colours often have bad contrast

ls --color often displays directories in ANSI “blue” which can look like this:

[bar of illegibly dark text against a dark background, which says “can you read this?”]

ANSI “yellow” on white also often has bad contrast
“minimum contrast”

Picking ANSI colours which always have good contrast is impossible.

the only real solution is to use a terminal emulator which has a “minimum contrast” feature (like iTerm or kitty) which will fix contrast issues
usually if a program is writing to a pipe, it’ll disable colours

$ grep blah file.txt | less

grep, represented by a box with a smiley face: better turn off colours so that I don’t accidentally show someone `^[[34ntext here]
216027
Julia Evans @b0rk.jvns.ca · 26/08/2025
job control wizardzines.com/comics/job-c... (from The Secret Rules of the Terminal, which is out now!)
your shell lets you run many programs (“jobs”) in the same terminal tab

programs can either be:

    foreground
    background
    stopped (which is more like “paused”)

& runs a program in the background

for example I like to convert 100 files in parallel like this:

for i in `seq 1 100`
do
   convert $i.png $i.jpg &
done

jobs lists backgrounded & stopped jobs

$ jobs
[1] Running python blah.py &
[2] Stopped vim

use the numbers to bring them to the foreground or background (like fg %2), kill them (kill %2), or disown them
when you close a terminal tab all jobs are killed with a SIGHUP signal

you can stop this with disown or by starting the program with nohup: disown %1 (job number goes here) nohup my_program &
a trick to kill programs if Ctrl+C doesn’t work

    press Ctrl+Z to stop the program
    run kill %1 to kill it (or kill -9 %1 if you’re feeling extra murderous)

a little flowchart

Three boxes, labelled “running in foreground”, “stopped”, and “running in background”

Ctrl+Z goes from “running in foreground” to “stopped” fg goes from “stopped” to “running in foreground” fg goes from “running in background” to “running in foreground” bg goes from “stopped” to “running in background”
516626
Julia Evans @b0rk.jvns.ca · 19/08/2025
editing text in a REPL wizardzines.com/comics/editi... (from "The Secret Rules of the Terminal", which is out now! wizardzines.com/zines/terminal)
editing text in a REPL doesn’t always work

little stick figure, horrified: when I press my ARROW KEYS it just prints out [[D??? what?
this is because every program has fo implement text editing itself

terminal program author, represented by a nonplussed looking stick figure with medium length straight hair, thinking: but I just want arrow keys to work?? shouldn’t that be automatic?

unix, represented by a box with a smiley face: NOPE you gotta do it
you do gef a few things automatically

    backspace (occasionally backspace won’t work and you have to use Ctrl+H instead)
    Ctrl+W (delete word)
    Ctrl+U (delete line)

(see page 25 for what “automatically” means)
REPLs mostly have the same keyboard shortcuts

there’s a very popular library called “readline”, and everyone either uses it or imitates how it works

for example Ctrl+A (“go to beginning of line”) comes from readline
rlwrap adds readline keyboard shortcuts

for example on my machine the dash shell doesn’t use readline but you can make it better by running:

rlwrap dash
built in programs on Mac don’t use readline

(for example sq1ite3)

this is probably because readline is GPL licensed

They use libedit which is worse. I like to install a sqlite version with readline support and use that instead.
2828
Julia Evans @b0rk.jvns.ca · 12/08/2025
how your terminal handles mouse clicks wizardzines.com/comics/the-m... (from "The Secret Rules of the Terminal", which is out now! wizardzines.com/zines/terminal)
when you click in the terminal, it can either be handled by

your terminal emulator
(represented by a box with a winky cursor face and little arms and legs)
(good if you want to copy text)

or

the program
(represented by a box with a smiley face)
(lots of programs have mouse support!)
programs can tell the terminal emulator to let them handle the mouse

program: if there’s a mouse click, send me escape codes to tell me where it was!

terminal emulator: okay! I’ll disable all my usual mouse functions like “selecting text”!

this is called “mouse reporting”
some programs that have mouse support

    tmux: resize a pane! right-click for a menu!
    htop: click to sort columns!
    micro: text editor with good mouse support
    vim: click on the tab bar!
    and lots more! (lazygit, mc, zellij, btop…)

how to force the terminal emulator to handle the mouse:

unhappy stick figure with short curly hair, thinking: ugh no I don’t want to focus that pane, I want to COPY SOME TEXT!!!

    could be something else too, it depends on your terminal emulator

the scroll wheel

In some programs (like less) the scroll wheel does the same thing as pressing up/down arrow keys really fast

terminal emulator: UP UP UP UP UP UP UP UP UP UP UP UP

in other programs (like lazygit) it uses “mouse reporting” to report where your mouse was when you scrolled
other mouse features your terminal emulator might have

    Shift+click (or something) to open a link in a browser
    Alt+c1ick (or maybe Option) to move the cursor when editing a command in your shell
215121
Julia Evans @b0rk.jvns.ca · 05/08/2025
just noticed Bite Size Command Line came out 7 years ago, I still sometimes forget the syntax for lsof and have to look it up at wizardzines.com/comics/lsof/ :) wizardzines.com/zines/bite-s...
413411
Julia Evans @b0rk.jvns.ca · 04/07/2025
we ran a Wizard Zines reader survey and it's interesting to see that 75% of people who buy the zines have been programming for 10+ years When I imagine a typical reader I always imagine someone who's been programming (in some capacity) for at least 5-10 years so it's nice to see that's accurate
37% - 30+ years
39.5% - 10-30 years
13.6% - 5-10 years
10% - under 5 years
2682
Julia Evans @b0rk.jvns.ca · 28/06/2025
we've already sold 1000 copies of The Secret Rules of the Terminal since it came out on Tuesday!! so to celebrate I'm giving away 1000 copies to anyone who can't afford to buy one. You can use code BUYONEGIVEONE to get a free PDF copy if $12 USD is a lot for you. wizardzines.com/zines/terminal
The Secret Rules of the Terminal, by Julia Evans - The cover illustration depicts three people doing arcane terminal magic in a temple with a smoking censer in the background. Each of the three people has curly brown hair and light brown skin. They are all wearing dresses, billowing cloaks, and utility belts with keyboard symbols on them. The one on the left holds a palette of paints and a brush. The one on the right has a staff with a $ symbol on it and a starfish at the top. The one in the centre has a sword and is reading from a book whose cover says “>_” and “./”, which rests on a lectern with a smiling snake wrapped around it.
416552
Julia Evans @b0rk.jvns.ca · 24/06/2025
It really left me feeling like the terminal is full of hidden secrets -- because "the terminal" is made up of so many different pieces, there's no single terminal manual you can read! Here's the table of contents, which as a bonus shows the different components of the terminal!
1. SHELL

cast of characters
meet the shell
PATH
PATH tips
history
job control
filename tips
stdin/stderr/stdout
redirects

2. TERMINAL EMULATOR

meet the terminal emulator
escape cdoes
colours
the mouse
copy & paste
TERM

3. PROGRAMS

types of programs
less
editing text in REPLs
keyboard shortcuts

4. TTY DRIVER

meet the TTY driver
stty
canonical mode
2595
Julia Evans @b0rk.jvns.ca · 24/06/2025
delighted to announce that my new zine "The Secret Rules of the Terminal" is out today!! You can get it for $12 USD here: wizardzines.com/zines/terminal
The Secret Rules of the Terminal, by Julia Evans - The cover illustration depicts three people doing arcane terminal magic in a temple with a smoking censer in the background. Each of the three people has curly brown hair and light brown skin. They are all wearing dresses, billowing cloaks, and utility belts with keyboard symbols on them. The one on the left holds a palette of paints and a brush. The one on the right has a staff with a $ symbol on it and a starfish at the top. The one in the centre has a sword and is reading from a book whose cover says “>_” and “./”, which rests on a lectern with a smiling snake wrapped around it.
331496
Julia Evans @b0rk.jvns.ca · 23/06/2025
it's happening! "The Secret Rules of the Terminal" is coming out tomorrow! here's the table of contents:
1. SHELL

cast of characters
meet the shell
PATH
PATH tips
history
job control
filename tips
stdin/stderr/stdout
redirects

2. TERMINAL EMULATOR

meet the terminal emulator
escape cdoes
colours
the mouse
copy & paste
TERM

3. PROGRAMS

types of programs
less
editing text in REPLs
keyboard shortcuts

4. TTY DRIVER

meet the TTY driver
stty
canonical mode
327339