HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
adityaathalye
shite
Shell2022–2026
adityaathalye / shite

shite

The little hot-reloadin' static site maker from shell.

6Distinct people
33Mentions
1Explicit recommenders
249GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

The little hot-reloadin' static site maker from shell.

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

Hah! Superfriend! First... Love your site (clean, fast, easy on the eyes, no need for JS to read). And your writing... yours is a proper blog. I used to feel bad about not…

adityaathalye used a recommendation phrase. 3 indexed comments match. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year33 dated mentions

Observed mentions: 2022-04-14 05:58:11 UTC to 2026-06-28 18:10:28 UTC.

0510152022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 13 mentions; 1 submissions, 12 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments20242025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 8 mentions; 1 submissions, 7 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC413
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC13112
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC404
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC817
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC404

What Hacker News says

33 sources
Cool! Also, carrying forward the post author's tongue-in-cheek humour... I see your lua and raise you ~350 lines of Bash (excludes HTML templates). Take a good hard look at this shite [0]. Have you seen anything that is more obviously HTML-about-to-be-expanded-into-a-full-page? shite_template_standard_page_wrapper() { cat <<EOF <!DOCTYPE html> <html lang="en" prefix="og: https://ogp.me/ns#"> $(shite_template_common_head) <body> <div id="the-very-top" class="stack center box"> $(cat -) $(shite_template_common_footer) </div> </body> </html> EOF } And, unlike PHP or whatever... have you ever seen more composable templating, as in functional programming? cat ./sample/hello.html | shite_template_common_default_page # Or.. cat ./sample/hel
Read the rest
lo.org | pandoc -f org -t html | shite_template_common_default_page Just imagine all the pipelined pre/post-processor possibilities. [0] project codename `shite`, literally, renders my site https://github.com/adityaathalye/shite
In Hot-wiring the Lisp machine
Thanks for asking! Site: https://www.evalapply.org/ Blog: https://www.evalapply.org/posts/ Feed: https://www.evalapply.org/index.xml Custom generator: https://github.com/adityaathalye/shite EvalApply.org also made mtlynch's annual list (mind blown)! The Most Popular Blogs of Hacker News in 2025 https://news.ycombinator.com/item?id=46478377 He has kindly CC0-licensed his data: https://github.com/mtlynch/hn-popularity-contest-data ... Perhaps you can use it to seed your site.
In Ask HN: Share your personal website
Opposite day! I moved from markdown (hugo) to org plaintext built and rendered using a hand-rolled pandoc + bash site maker. No Emacs needed. ~350 lines of Bash, and it hot-builds, and it hot-reloads :) https://github.com/adityaathalye/shite (README has GIF demos, and explains the design of the code) Also, I use literal HTML exports in my org files, like this: #+begin_export html <form class="footer cluster" action="https://buttondown.email/api/emails/embed-subscribe/evalapply" method="post" target="popupwindow" onsubmit="window.open('https://buttondown.email/evalapply','popupwindow')"> <input type="email" name="email" id="bd-email"> <span> <input type="submit" value="subscribe"> <em>(thanks, <a href="https://buttondown.email" target="_blank">Buttondown</a>!)</em> </span> </form> #+e
Read the rest
nd_export Which is neat, because when I `C-'` (M-x org-edit-special), it opens a temporary buffer with just the HTML, with the relevant syntax-aware editing mode turned on. This has been a killer feature for me, because there are many places where I want /specific/ HTML, and neither org-export nor pandoc will compile org plaintext the way I want (not unless I invest inordinate amounts of time futzing with templating systems). So I just hand-code HTML using those export blocks, and I'm /fine/. There are also a couple of places where I use org-babel to call a shell script that updates an exported HTML block in-line. I use this trick to tweak a common HTML fragment (like email form) in one place and expand it into custom HTML, wherever I need to. Ditto LaTeX, although I confess, I'm not a heavy user, so I almost certainly haven't faced the troubles you have. With HTML, however, I think what I have is just cromulent.
In Org Mode syntax is one of the most reasonable markup languages for text (2017)
adityaathalye·Oct 3, 2025Recommendation phrase
Hah! Superfriend! First... Love your site (clean, fast, easy on the eyes, no need for JS to read). And your writing... yours is a proper blog. I used to feel bad about not being able to "just blog" like a real blogger, but I discovered that what I really like, is to write, in order to think. So, my blog has become part of my Big Reason to write (a lot) locally, and I am very happy to publish giant-ass blog posts; longform thinking. Second... I went down a very similar path to custom site-buildin'. Reject Wordpress because it's the 2020s -> reject anything mandating npm, gem, pip, lockfile web-scale dependency madness -> just hugo (single binary, wow) -> hugo + ox-hugo -> ouch, yet another custom templating language, and no backwards compatibility -> should I just Wordpress like it's 2005? -> NO, wait. Now I know programming. -> Voila! `sh
Read the rest
ite` [1] (org-mode content -> pandoc -> plain HTML-and-CSS website [2]). [1] https://github.com/adityaathalye/shite (dicussed here, that one time: https://news.ycombinator.com/item?id=34486596) Show HN: Shite – little hot-reloadin' static site maker from shell 141 points by adityaathalye on Jan 23, 2023 | 60 comments (The discussion will answer anyone's burning question about the project name :) [2] https://evalapply.org Third... Again... superfriend! 10000% same sentiment as yours: > that takes exact same files and produces output that I fully understand e2e, becoming the project I'm most proud of See my `shite`'s incredible documentation---animated GIFs and everything. Probably my second-best documented personal project (or tied for first-best with clojure-multiproject-example). Things that give me inordinate joy: - `shite` weighs in at ~300 Lines of Code (and why does it have 240 Github Internet Points, who are these insane people???) - it is truly "serverless" - I don't run a local dev server even - it hot-compiles and hot-refreshes on save - fully interactive local authoring (as well as live template modifications) - since Feb 2022, it broke (only very slightly), after I distro upgraded Ubuntu 22.04 LTS to 24.04 LTS, because pandoc changed its default handling of line breaks, breaking layout of hand-indented "verse" text. - Under 10 second full site rebuild, with 43 posts totalling over 100K words and over 40 more auto-generated pages (rss feed, various xmls, and per-tag blog post index pages). And I haven't even made it parallel yet. Probably will, if full rebuilds get longer than 30 seconds. - The resulting site scores top marks on lighthouse and even image-heavy pages render fully in under a second on 4G mobile internet. (zero analytics, or tracking javascript). - And my most favourite part: I've made Internet Friends because of the site! https://www.evalapply.org/about.html#standing-invitation It's hilarious --- I've done such sophisticated work for work, but this little piece of personal software is my pride and joy... It makes me grin almost every single day. May The Source be with you too! _\\ // (yes, I love mixing metaphors)
In Babel is why I keep blogging with Emacs
Ditto. I wanted to show JavaScript text art animation, and could "just" do this: *** ~setInterval~ and ~setTimeout~ worked just right These let us call functions that do exactly the thing we want, viz. punch /[[#the-aesthetic-of-text-art-and-its-animation][characters]]/ into our "live spreadsheet" medium, exactly the way the artist placed them in the original art source. These methods can make a CPU sing, but hey, the awesome art is worth every watt it, ah, draws. #+html: <div class="box invert"> #+html: <em>Random twitch loop <code>setTimeout</code> and recursion.</em> #+html: <div id="blink-demo"></div> #+html: </div> #+html: <script type="text/javascript">demoBlink();</script> #+html: <div class="box invert"> #+html: <em>Flipbook-like frame-by-frame animation loop with <code>setInterval</code>.</em> #+h
Read the rest
tml: <div id="glider-demo"></div> #+html: </div> #+html: <script type="text/javascript">demoGlider();</script> This works very nicely because I've structured my website as "every post is just a microsite". See: src: https://github.com/adityaathalye/shite/tree/master/sources/p... \_ (develop %|u+4) $ tree sources/posts/animate-text-art-javascript/ sources/posts/animate-text-art-javascript/ ├── animations.js ├── blink.ddw ├── DarkDrawSheetView.png ├── glider.ddw ├── HanukkahOfData2022ArtCopyrightDwimmertxt.png ├── HanukkahOfData2022ArtSliceCopyrightDwimmertxt.png ├── HanukkahOfData2022DarkDrawDrawingViewCopyrightDwimmer.png ├── HanukkahOfData2022DarkDrawSheetViewCopyrightDwimmer.png ├── index.org ├── loading.ddw └── spinner.ddw 1 directory, 11 files
In Babel is why I keep blogging with Emacs
The neat thing about org-mode for writing and publishing (I don't use it for "productivity") is that every time I have a new requirement, there is a solution that I can integrate into my existing writing workflow. And I get multimedia publishing "for free". Discussed here: https://news.ycombinator.com/item?id=43157672 Why and How I use "Org Mode" for my writing and more 217 points by sebg 7 months ago | 64 comments src: https://github.com/adityaathalye/shite/blob/master/sources/p...
In Babel is why I keep blogging with Emacs
It certainly is a joy! I'd generalise it to any reasonable plaintext format. Org mode keeps me locked in for this very reason. No need for Emacs... pandoc (which I use) builds my static site. It supports enough Org markup to let me compile header metadata, latex, footnotes, markup etc. as well as inline live JavaScript code and use it in-page, just like I'd do in a regular stand-alone HTML page. For example: a post with inlined static HTML and JavaScript, freely mixed-and-matched with org-native source block syntax. No plugins needed. Raw: https://raw.githubusercontent.com/adityaathalye/shite/refs/h... Pandoc-rendered live site: Compare Raw source with this section: https://www.evalapply.org/posts/animate-text-art-javascript/... Github-rendered in repo (not github pages): It is (surprisingly) good enough for most Org content, including ge
Read the rest
nerating a nice Table of Contents... Except for any footnotes, and inlined or hosted JavaScript source (understandably, security may be a concern). https://github.com/adityaathalye/shite/blob/master/sources/p...
In The Joy of Mixing Custom Elements, Web Components, and Markdown
Such opposite motivations. I built shite [1] because I want to author everything in org-mode [2], but I don't want publishing hardwired to my Emacs. Also I want HTML templates to be just... HTML (heredocs are rather useful!). Plus org-babel lets me pull tricks like this: I want to insert certain HTML fragments in some pages, arbitrarily. There is no sensible way to automate it. BUT, I can source my HTML templates inside any org file, and manually expand it in-line. Like so: #+BEGIN_SRC bash :results raw html :exports results source ../bin/templates.sh shite_template_common_org_inline_sales_banner "." #+END_SRC #+RESULTS: #+begin_export html <the neatly in-lined HTML> #+end_export That expands to this sales banner https://www.evalapply.org/index.html#standing-invitation (which is also expanded similarly in my hire.org
Read the rest
and now.org pages). Nifty!!! [1] https://github.com/adityaathalye/shite/ is my little hot-reloadin' site maker from shell. I write all of https://evalapply.org with it! [2] Recently discussed at HN: https://news.ycombinator.com/item?id=43157672 "Why and How I use “Org Mode” for my writing and more (2022)"
In Static Site Generator for Emacs Lisp Programmers
Bash Associative Arrays [1] are handy! Some examples of how I've used them: - my site builder (for evalapply.org): inject metadata into page templates. e.g. https://github.com/adityaathalye/shite/blob/b4163b566f0708fd... - oxo game (tic-tac-toe): reverse index lookup table for board positions: https://github.com/adityaathalye/oxo/blob/7681e75edaeec5aa1f... - personal machine setup: associate name of installed application to its apt source name, so we can check for the app, and then install package https://github.com/adityaathalye/bash-toolkit/blob/f856edd30... [1] I'd say "hashmap" is acceptable, colloquially. However, I don't think Bash computes hashes of the keys. (edit: fix formatting snafu)
In Today I learned that bash has hashmaps (2024)
I daily-drive Emacs, and write my website/blog [1] in org-mode, but I use pandoc to compile org to HTML [2]... This choice was critical for me. I did not want my publishing workflow to depend on Emacs! It's true that Emacs is the canonical Org-Mode compiler, but there are many other compilers, including Github pages. If it's typesetting you want, the support is widely available. If it is org-mode-powered workflows (like TODOs etc.), then support outside of Emacs is narrower, but still quite serviceable [3]. --- [1] built with OrgMode and pandoc: https://www.evalapply.org/ [2] pandoc as compiler FTW. https://github.com/adityaathalye/shite/blob/b4163b566f0708fd... __shite_templating_compile_source_to_html() { # If content has front matter metadata, it is presumed to be in a format # that the content compiler can safely process
Read the rest
and elide or ignore. local file_type=${1:?"Fail. We expect file type of content like html, org, md etc."} case ${file_type} in html ) cat - ;; md ) pandoc -f markdown -t html ;; org ) pandoc -f org -t html ;; esac } [3] Not just Emacs... https://www.evalapply.org/posts/why-and-how-i-use-org-mode/i...
In Org Mode Syntax Cheat Sheet (2017)
Pandoc can be your friend. My site maker [1] is built around it. I think a hundred or so well-chosen lines of your favourite scripting language can do wonders. Mine is ~300 lines of Bash because I over-engineered a thing or two for kicks. The core of it is maybe 50 lines. [1] https://github.com/adityaathalye/shite The README documents the architecture and rationale. Maybe it will help you figure out yours. Happy hacking!
In Ask HN: What's the simplest static website generator?

Showing the 15 most recent of 33 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.