{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/jvns-ca/2025-06-26-new-zine-the-secret-rules-of-the-terminal/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "Hello! After many months of writing deep dive blog posts about the terminal, on Tuesday I released a new zine called “The Secret Rules of the Terminal”!\n\nYou can get it for $12 here: [https://wizardzines.com/zines/terminal](https://wizardzines.com/zines/terminal), or get an [15-pack of all my zines here](https://wizardzines.com/zines/all-the-zines/).\n\nHere’s the cover:\n\n[![](https://jvns.ca/images/terminal-cover-small.jpg)](https://wizardzines.com/zines/terminal)\n\n### [the table of contents](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#the-table-of-contents)\n\nHere’s the table of contents:\n\n[![](https://jvns.ca/images/terminal-toc-small.png)](https://wizardzines.com/zines/terminal/toc.png)\n\n### [why the terminal?](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#why-the-terminal)\n\nI’ve been using the terminal every day for 20 years but even though I’m very confident in the terminal, I’ve always had a bit of an uneasy feeling about it. Usually things work fine, but sometimes something goes wrong and it just feels like investigating it is impossible, or at least like it would open up a huge can of worms.\n\nSo I started trying to write down a list of weird problems I’ve run into in terminal and I realized that the terminal has a lot of tiny inconsistencies like:\n\n- sometimes you can use the arrow keys to move around, but sometimes pressing the arrow keys just prints `^[[D`\n- sometimes you can use the mouse to select text, but sometimes you can’t\n- sometimes your commands get saved to a history when you run them, and sometimes they don’t\n- some shells let you use the up arrow to see the previous command, and some don’t\n\nIf you use the terminal daily for 10 or 20 years, even if you don’t understand exactly *why* these things happen, you’ll probably build an intuition for them.\n\nBut having an intuition for them isn’t the same as understanding why they happen. When writing this zine I actually had to do a lot of work to figure out exactly what was *happening* in the terminal to be able to talk about how to reason about it.\n\n### [the rules aren’t written down anywhere](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#the-rules-aren-t-written-down-anywhere)\n\nIt turns out that the “rules” for how the terminal works (how do you edit a command you type in? how do you quit a program? how do you fix your colours?) are extremely hard to fully understand, because “the terminal” is actually made of many different pieces of software (your terminal emulator, your operating system, your shell, the core utilities like `grep`, and every other random terminal program you’ve installed) which are written by different people with different ideas about how things should work.\n\nSo I wanted to write something that would explain:\n\n- how the 4 pieces of the terminal (your shell, terminal emulator, programs, and TTY driver) fit together to make everything work\n- some of the core conventions for how you can expect things in your terminal to work\n- lots of tips and tricks for how to use terminal programs\n\n### [this zine explains the most useful parts of terminal internals](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#this-zine-explains-the-most-useful-parts-of-terminal-internals)\n\nTerminal internals are a mess. A lot of it is just the way it is because someone made a decision in the 80s and now it’s impossible to change, and honestly I don’t think learning everything about terminal internals is worth it.\n\nBut some parts are not that hard to understand and can really make your experience in the terminal better, like:\n\n- if you understand what **your shell** is responsible for, you can configure your shell (or use a different one!) to access your history more easily, get great tab completion, and so much more\n- if you understand **escape codes**, it’s much less scary when `cat`ing a binary to stdout messes up your terminal, you can just type `reset` and move on\n- if you understand how **colour** works, you can get rid of bad colour contrast in your terminal so you can actually read the text\n\n### [I learned a surprising amount writing this zine](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#i-learned-a-surprising-amount-writing-this-zine)\n\nWhen I wrote [How Git Works](https://wizardzines.com/zines/git), I thought I knew how Git worked, and I was right. But the terminal is different. Even though I feel totally confident in the terminal and even though I’ve used it every day for 20 years, I had a lot of misunderstandings about how the terminal works and (unless you’re the author of `tmux` or something) I think there’s a good chance you do too.\n\nA few things I learned that are actually useful to me:\n\n- I understand the structure of the terminal better and so I feel more confident debugging weird terminal stuff that happens to me (I was even able to suggest a [small improvement](https://github.com/fish-shell/fish-shell/issues/10834) to fish!). Identifying exactly which piece of software is causing a weird thing to happen in my terminal still isn’t *easy* but I’m a lot better at it now.\n- you can write a shell script to [copy to your clipboard over SSH](https://jvns.ca/til/vim-osc52/)\n- how `reset` works under the hood (it does the equivalent of `stty sane; sleep 1; tput reset`) – basically I learned that I don’t ever need to worry about remembering `stty sane` or `tput reset` and I can just run `reset` instead\n- how to look at the invisible escape codes that a program is printing out (run `unbuffer program > out; less out`)\n- why the builtin REPLs on my Mac like `sqlite3` are so annoying to use (they use `libedit` instead of `readline`)\n\n### [blog posts I wrote along the way](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#blog-posts-i-wrote-along-the-way)\n\nAs usual these days I wrote a bunch of blog posts about various side quests:\n\n- [How to add a directory to your PATH](https://jvns.ca/blog/2025/02/13/how-to-add-a-directory-to-your-path/)\n- [“rules” that terminal problems follow](https://jvns.ca/blog/2024/11/26/terminal-rules/)\n- [why pipes sometimes get “stuck”: buffering](https://jvns.ca/blog/2024/11/29/why-pipes-get-stuck-buffering/)\n- [some terminal frustrations](https://jvns.ca/blog/2025/02/05/some-terminal-frustrations/)\n- [ASCII control characters in my terminal](https://jvns.ca/blog/2024/10/31/ascii-control-characters/) on “what’s the deal with Ctrl+A, Ctrl+B, Ctrl+C, etc?”\n- [entering text in the terminal is complicated](https://jvns.ca/blog/2024/07/08/readline/)\n- [what’s involved in getting a “modern” terminal setup?](https://jvns.ca/blog/2025/01/11/getting-a-modern-terminal-setup/)\n- [reasons to use your shell’s job control](https://jvns.ca/blog/2024/07/03/reasons-to-use-job-control/)\n- [standards for ANSI escape codes](https://jvns.ca/blog/2025/03/07/escape-code-standards/), which is really me trying to figure out if I think the `terminfo` database is serving us well today\n\n### [people who helped with this zine](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#people-who-helped-with-this-zine)\n\nA long time ago I used to write zines mostly by myself but with every project I get more and more help. I met with [Marie Claire LeBlanc Flanagan](https://marieflanagan.com) every weekday from September to June to work on this one.\n\nThe cover is by Vladimir Kašiković, Lesley Trites did copy editing, Simon Tatham (who wrote [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/)) did technical review, our Operations Manager Lee did the transcription as well as a million other things, and [Jesse Luehrs](https://github.com/doy) (who is one of the very few people I know who actually understands the terminal’s cursed inner workings) had so many incredibly helpful conversations with me about what is going on in the terminal.\n\n### [get the zine](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#get-the-zine)\n\nHere are some links to get the zine again:\n\n- get [The Secret Rules of the Terminal](https://wizardzines.com/zines/terminal)\n- get a [15-pack of all my zines here](https://wizardzines.com/zines/all-the-zines/).\n\nAs always, you can get either a PDF version to print at home or a print version shipped to your house. The only caveat is print orders will ship in **August** – I need to wait for orders to come in to get an idea of how many I should print before sending it to the printer.\n",
  "authors": [],
  "captured_at": "2026-09-19T21:30:23.395188495+00:00",
  "category": "programming",
  "content_html": "<p>Hello! After many months of writing deep dive blog posts about the terminal, on Tuesday I released a new zine called “The Secret Rules of the Terminal”!</p>\n<p>You can get it for $12 here: <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://wizardzines.com/zines/terminal\">https://wizardzines.com/zines/terminal</a>, or get an <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://wizardzines.com/zines/all-the-zines/\">15-pack of all my zines here</a>.</p>\n<p>Here’s the cover:</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://wizardzines.com/zines/terminal\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://jvns.ca/images/terminal-cover-small.jpg\" alt=\"\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></a></p>\n<h3><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#the-table-of-contents\">the table of contents</a></h3>\n<p>Here’s the table of contents:</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://wizardzines.com/zines/terminal/toc.png\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://jvns.ca/images/terminal-toc-small.png\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></a></p>\n<h3><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#why-the-terminal\">why the terminal?</a></h3>\n<p>I’ve been using the terminal every day for 20 years but even though I’m very confident in the terminal, I’ve always had a bit of an uneasy feeling about it. Usually things work fine, but sometimes something goes wrong and it just feels like investigating it is impossible, or at least like it would open up a huge can of worms.</p>\n<p>So I started trying to write down a list of weird problems I’ve run into in terminal and I realized that the terminal has a lot of tiny inconsistencies like:</p>\n<ul>\n<li>sometimes you can use the arrow keys to move around, but sometimes pressing the arrow keys just prints <code>^[[D</code></li>\n<li>sometimes you can use the mouse to select text, but sometimes you can’t</li>\n<li>sometimes your commands get saved to a history when you run them, and sometimes they don’t</li>\n<li>some shells let you use the up arrow to see the previous command, and some don’t</li>\n</ul>\n<p>If you use the terminal daily for 10 or 20 years, even if you don’t understand exactly <em>why</em> these things happen, you’ll probably build an intuition for them.</p>\n<p>But having an intuition for them isn’t the same as understanding why they happen. When writing this zine I actually had to do a lot of work to figure out exactly what was <em>happening</em> in the terminal to be able to talk about how to reason about it.</p>\n<h3><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#the-rules-aren-t-written-down-anywhere\">the rules aren’t written down anywhere</a></h3>\n<p>It turns out that the “rules” for how the terminal works (how do you edit a command you type in? how do you quit a program? how do you fix your colours?) are extremely hard to fully understand, because “the terminal” is actually made of many different pieces of software (your terminal emulator, your operating system, your shell, the core utilities like <code>grep</code>, and every other random terminal program you’ve installed) which are written by different people with different ideas about how things should work.</p>\n<p>So I wanted to write something that would explain:</p>\n<ul>\n<li>how the 4 pieces of the terminal (your shell, terminal emulator, programs, and TTY driver) fit together to make everything work</li>\n<li>some of the core conventions for how you can expect things in your terminal to work</li>\n<li>lots of tips and tricks for how to use terminal programs</li>\n</ul>\n<h3><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#this-zine-explains-the-most-useful-parts-of-terminal-internals\">this zine explains the most useful parts of terminal internals</a></h3>\n<p>Terminal internals are a mess. A lot of it is just the way it is because someone made a decision in the 80s and now it’s impossible to change, and honestly I don’t think learning everything about terminal internals is worth it.</p>\n<p>But some parts are not that hard to understand and can really make your experience in the terminal better, like:</p>\n<ul>\n<li>if you understand what <strong>your shell</strong> is responsible for, you can configure your shell (or use a different one!) to access your history more easily, get great tab completion, and so much more</li>\n<li>if you understand <strong>escape codes</strong>, it’s much less scary when <code>cat</code>ing a binary to stdout messes up your terminal, you can just type <code>reset</code> and move on</li>\n<li>if you understand how <strong>colour</strong> works, you can get rid of bad colour contrast in your terminal so you can actually read the text</li>\n</ul>\n<h3><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#i-learned-a-surprising-amount-writing-this-zine\">I learned a surprising amount writing this zine</a></h3>\n<p>When I wrote <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://wizardzines.com/zines/git\">How Git Works</a>, I thought I knew how Git worked, and I was right. But the terminal is different. Even though I feel totally confident in the terminal and even though I’ve used it every day for 20 years, I had a lot of misunderstandings about how the terminal works and (unless you’re the author of <code>tmux</code> or something) I think there’s a good chance you do too.</p>\n<p>A few things I learned that are actually useful to me:</p>\n<ul>\n<li>I understand the structure of the terminal better and so I feel more confident debugging weird terminal stuff that happens to me (I was even able to suggest a <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/fish-shell/fish-shell/issues/10834\">small improvement</a> to fish!). Identifying exactly which piece of software is causing a weird thing to happen in my terminal still isn’t <em>easy</em> but I’m a lot better at it now.</li>\n<li>you can write a shell script to <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/til/vim-osc52/\">copy to your clipboard over SSH</a></li>\n<li>how <code>reset</code> works under the hood (it does the equivalent of <code>stty sane; sleep 1; tput reset</code>) – basically I learned that I don’t ever need to worry about remembering <code>stty sane</code> or <code>tput reset</code> and I can just run <code>reset</code> instead</li>\n<li>how to look at the invisible escape codes that a program is printing out (run <code>unbuffer program &gt; out; less out</code>)</li>\n<li>why the builtin REPLs on my Mac like <code>sqlite3</code> are so annoying to use (they use <code>libedit</code> instead of <code>readline</code>)</li>\n</ul>\n<h3><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#blog-posts-i-wrote-along-the-way\">blog posts I wrote along the way</a></h3>\n<p>As usual these days I wrote a bunch of blog posts about various side quests:</p>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/02/13/how-to-add-a-directory-to-your-path/\">How to add a directory to your PATH</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2024/11/26/terminal-rules/\">“rules” that terminal problems follow</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2024/11/29/why-pipes-get-stuck-buffering/\">why pipes sometimes get “stuck”: buffering</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/02/05/some-terminal-frustrations/\">some terminal frustrations</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2024/10/31/ascii-control-characters/\">ASCII control characters in my terminal</a> on “what’s the deal with Ctrl+A, Ctrl+B, Ctrl+C, etc?”</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2024/07/08/readline/\">entering text in the terminal is complicated</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/01/11/getting-a-modern-terminal-setup/\">what’s involved in getting a “modern” terminal setup?</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2024/07/03/reasons-to-use-job-control/\">reasons to use your shell’s job control</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/03/07/escape-code-standards/\">standards for ANSI escape codes</a>, which is really me trying to figure out if I think the <code>terminfo</code> database is serving us well today</li>\n</ul>\n<h3><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#people-who-helped-with-this-zine\">people who helped with this zine</a></h3>\n<p>A long time ago I used to write zines mostly by myself but with every project I get more and more help. I met with <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://marieflanagan.com\">Marie Claire LeBlanc Flanagan</a> every weekday from September to June to work on this one.</p>\n<p>The cover is by Vladimir Kašiković, Lesley Trites did copy editing, Simon Tatham (who wrote <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a>) did technical review, our Operations Manager Lee did the transcription as well as a million other things, and <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/doy\">Jesse Luehrs</a> (who is one of the very few people I know who actually understands the terminal’s cursed inner workings) had so many incredibly helpful conversations with me about what is going on in the terminal.</p>\n<h3><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#get-the-zine\">get the zine</a></h3>\n<p>Here are some links to get the zine again:</p>\n<ul>\n<li>get <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://wizardzines.com/zines/terminal\">The Secret Rules of the Terminal</a></li>\n<li>get a <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://wizardzines.com/zines/all-the-zines/\">15-pack of all my zines here</a>.</li>\n</ul>\n<p>As always, you can get either a PDF version to print at home or a print version shipped to your house. The only caveat is print orders will ship in <strong>August</strong> – I need to wait for orders to come in to get an idea of how many I should print before sending it to the printer.</p>\n",
  "content_markdown": "Hello! After many months of writing deep dive blog posts about the terminal, on Tuesday I released a new zine called “The Secret Rules of the Terminal”!\n\nYou can get it for $12 here: [https://wizardzines.com/zines/terminal](https://wizardzines.com/zines/terminal), or get an [15-pack of all my zines here](https://wizardzines.com/zines/all-the-zines/).\n\nHere’s the cover:\n\n[![](https://jvns.ca/images/terminal-cover-small.jpg)](https://wizardzines.com/zines/terminal)\n\n### [the table of contents](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#the-table-of-contents)\n\nHere’s the table of contents:\n\n[![](https://jvns.ca/images/terminal-toc-small.png)](https://wizardzines.com/zines/terminal/toc.png)\n\n### [why the terminal?](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#why-the-terminal)\n\nI’ve been using the terminal every day for 20 years but even though I’m very confident in the terminal, I’ve always had a bit of an uneasy feeling about it. Usually things work fine, but sometimes something goes wrong and it just feels like investigating it is impossible, or at least like it would open up a huge can of worms.\n\nSo I started trying to write down a list of weird problems I’ve run into in terminal and I realized that the terminal has a lot of tiny inconsistencies like:\n\n- sometimes you can use the arrow keys to move around, but sometimes pressing the arrow keys just prints `^[[D`\n- sometimes you can use the mouse to select text, but sometimes you can’t\n- sometimes your commands get saved to a history when you run them, and sometimes they don’t\n- some shells let you use the up arrow to see the previous command, and some don’t\n\nIf you use the terminal daily for 10 or 20 years, even if you don’t understand exactly *why* these things happen, you’ll probably build an intuition for them.\n\nBut having an intuition for them isn’t the same as understanding why they happen. When writing this zine I actually had to do a lot of work to figure out exactly what was *happening* in the terminal to be able to talk about how to reason about it.\n\n### [the rules aren’t written down anywhere](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#the-rules-aren-t-written-down-anywhere)\n\nIt turns out that the “rules” for how the terminal works (how do you edit a command you type in? how do you quit a program? how do you fix your colours?) are extremely hard to fully understand, because “the terminal” is actually made of many different pieces of software (your terminal emulator, your operating system, your shell, the core utilities like `grep`, and every other random terminal program you’ve installed) which are written by different people with different ideas about how things should work.\n\nSo I wanted to write something that would explain:\n\n- how the 4 pieces of the terminal (your shell, terminal emulator, programs, and TTY driver) fit together to make everything work\n- some of the core conventions for how you can expect things in your terminal to work\n- lots of tips and tricks for how to use terminal programs\n\n### [this zine explains the most useful parts of terminal internals](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#this-zine-explains-the-most-useful-parts-of-terminal-internals)\n\nTerminal internals are a mess. A lot of it is just the way it is because someone made a decision in the 80s and now it’s impossible to change, and honestly I don’t think learning everything about terminal internals is worth it.\n\nBut some parts are not that hard to understand and can really make your experience in the terminal better, like:\n\n- if you understand what **your shell** is responsible for, you can configure your shell (or use a different one!) to access your history more easily, get great tab completion, and so much more\n- if you understand **escape codes**, it’s much less scary when `cat`ing a binary to stdout messes up your terminal, you can just type `reset` and move on\n- if you understand how **colour** works, you can get rid of bad colour contrast in your terminal so you can actually read the text\n\n### [I learned a surprising amount writing this zine](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#i-learned-a-surprising-amount-writing-this-zine)\n\nWhen I wrote [How Git Works](https://wizardzines.com/zines/git), I thought I knew how Git worked, and I was right. But the terminal is different. Even though I feel totally confident in the terminal and even though I’ve used it every day for 20 years, I had a lot of misunderstandings about how the terminal works and (unless you’re the author of `tmux` or something) I think there’s a good chance you do too.\n\nA few things I learned that are actually useful to me:\n\n- I understand the structure of the terminal better and so I feel more confident debugging weird terminal stuff that happens to me (I was even able to suggest a [small improvement](https://github.com/fish-shell/fish-shell/issues/10834) to fish!). Identifying exactly which piece of software is causing a weird thing to happen in my terminal still isn’t *easy* but I’m a lot better at it now.\n- you can write a shell script to [copy to your clipboard over SSH](https://jvns.ca/til/vim-osc52/)\n- how `reset` works under the hood (it does the equivalent of `stty sane; sleep 1; tput reset`) – basically I learned that I don’t ever need to worry about remembering `stty sane` or `tput reset` and I can just run `reset` instead\n- how to look at the invisible escape codes that a program is printing out (run `unbuffer program > out; less out`)\n- why the builtin REPLs on my Mac like `sqlite3` are so annoying to use (they use `libedit` instead of `readline`)\n\n### [blog posts I wrote along the way](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#blog-posts-i-wrote-along-the-way)\n\nAs usual these days I wrote a bunch of blog posts about various side quests:\n\n- [How to add a directory to your PATH](https://jvns.ca/blog/2025/02/13/how-to-add-a-directory-to-your-path/)\n- [“rules” that terminal problems follow](https://jvns.ca/blog/2024/11/26/terminal-rules/)\n- [why pipes sometimes get “stuck”: buffering](https://jvns.ca/blog/2024/11/29/why-pipes-get-stuck-buffering/)\n- [some terminal frustrations](https://jvns.ca/blog/2025/02/05/some-terminal-frustrations/)\n- [ASCII control characters in my terminal](https://jvns.ca/blog/2024/10/31/ascii-control-characters/) on “what’s the deal with Ctrl+A, Ctrl+B, Ctrl+C, etc?”\n- [entering text in the terminal is complicated](https://jvns.ca/blog/2024/07/08/readline/)\n- [what’s involved in getting a “modern” terminal setup?](https://jvns.ca/blog/2025/01/11/getting-a-modern-terminal-setup/)\n- [reasons to use your shell’s job control](https://jvns.ca/blog/2024/07/03/reasons-to-use-job-control/)\n- [standards for ANSI escape codes](https://jvns.ca/blog/2025/03/07/escape-code-standards/), which is really me trying to figure out if I think the `terminfo` database is serving us well today\n\n### [people who helped with this zine](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#people-who-helped-with-this-zine)\n\nA long time ago I used to write zines mostly by myself but with every project I get more and more help. I met with [Marie Claire LeBlanc Flanagan](https://marieflanagan.com) every weekday from September to June to work on this one.\n\nThe cover is by Vladimir Kašiković, Lesley Trites did copy editing, Simon Tatham (who wrote [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/)) did technical review, our Operations Manager Lee did the transcription as well as a million other things, and [Jesse Luehrs](https://github.com/doy) (who is one of the very few people I know who actually understands the terminal’s cursed inner workings) had so many incredibly helpful conversations with me about what is going on in the terminal.\n\n### [get the zine](https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/#get-the-zine)\n\nHere are some links to get the zine again:\n\n- get [The Secret Rules of the Terminal](https://wizardzines.com/zines/terminal)\n- get a [15-pack of all my zines here](https://wizardzines.com/zines/all-the-zines/).\n\nAs always, you can get either a PDF version to print at home or a print version shipped to your house. The only caveat is print orders will ship in **August** – I need to wait for orders to come in to get an idea of how many I should print before sending it to the printer.\n",
  "dateCreated": "2026-09-19T21:30:23.395188495+00:00",
  "date_created": "2025-06-26T00:00:00+00:00",
  "date_modified": "2025-06-26T00:00:00+00:00",
  "date_published": "2025-06-26T00:00:00+00:00",
  "description": "Hello! After many months of writing deep dive blog posts about the terminal, on Tuesday I released a new zine called “The Secret Rules of the Terminal”! You can get it for $12 here: https://wizardzines.com/zines/terminal, or get an 15-pack…",
  "external_url": "https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/jvns-ca/2025/06/2025-06-26-new-zine-the-secret-rules-of-the-terminal.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/jvns-ca/2025/06/2025-06-26-new-zine-the-secret-rules-of-the-terminal.md"
  },
  "id": "urn:aggr:item:da3a2d5287a823e963d0a308d6afa32333bf0e4a",
  "isBasedOn": {
    "@id": "https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/"
  },
  "mainEntity": {
    "@id": "https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/jvns-ca/2025-06-26-new-zine-the-secret-rules-of-the-terminal/#webpage"
    },
    "dateModified": "2025-06-26T00:00:00+00:00",
    "datePublished": "2025-06-26T00:00:00+00:00",
    "headline": "New zine: The Secret Rules of the Terminal",
    "timeRequired": "PT6M",
    "url": "https://jvns.ca/blog/2025/06/24/new-zine--the-secret-rules-of-the-terminal/",
    "wordCount": 1150
  },
  "name": "Archived snapshot: New zine: The Secret Rules of the Terminal",
  "preview": null,
  "reading_minutes": 6,
  "replicated_at": null,
  "source": "jvns-ca",
  "source_name": "Julia Evans",
  "summary": null,
  "tags": [],
  "temporalCoverage": "2026-09-19T21:30:23.395188495+00:00",
  "title": "New zine: The Secret Rules of the Terminal",
  "url": "https://aggr.aymericbeaumet.com/items/jvns-ca/2025-06-26-new-zine-the-secret-rules-of-the-terminal/",
  "word_count": 1150
}