[HN Gopher] My website is one binary (2022)
___________________________________________________________________
My website is one binary (2022)
Author : smartmic
Score : 42 points
Date : 2025-07-25 10:47 UTC (12 hours ago)
(HTM) web link (j3s.sh)
(TXT) w3m dump (j3s.sh)
| Quitschquat wrote:
| I do this with CLOG, save-lisp-and-die
| liampulles wrote:
| I wrote a Go program to generate my blog (which is just a static
| site hosted on Github pages). I made it so that I could write
| blog posts with a "widget builder" DSL, which is a good
| compromise for me between customizabiity for individual pages vs
| being able to write 95% of everything with markdown.
|
| Example of DSL:
| https://github.com/liampulles/liampulles.github.io/blob/mast...
|
| Blog post with more info, and my site:
| https://liampulles.com/moving-blog.html
| lelanthran wrote:
| My blog[1] is also generated from nothing but markdown, but I
| leaned on pandoc heavily for this:
| https://gist.github.com/lelanthran/2634fc2508c93a437ba5ca511...
|
| ---------------------
|
| [1] www.lelanthran.com
| yboris wrote:
| Awesome! I'm curious if you considered _Hugo_ and if yes, why
| you preferred to build your own Go website generator :)
| cookiengineer wrote:
| Just FYI:
|
| The meta viewport tag disallows zooming/using your website. I
| had to switch to Desktop mode on my Android phone to be able to
| read half the content that was overflowing and not visible.
| paranoidxprod wrote:
| From one of these user's most recent posts here
| https://j3s.sh/thought/blogs-rot-wikis-wait.html:
| p.s. i'm working on a new wiki to replace my website with -
| something new, from the ground up. git.j3s.sh/abyss -
| stay tuned
|
| I wonder if they'll still be using a similar approach for the new
| site.
| j3s wrote:
| it's still in the works, but here's the plan:
|
| - written in golang, one binary
|
| - custom markup lang
|
| - very short urls (https://j3s.sh/$pagename)
|
| - pages are saved as text-files-written-to-disk with git
| autocommits (similar to mycorrhiza[0])
|
| - "blocks" that process parts of pages differently - similar to
| edna[1]
|
| - pages editable via web interface (rudimentary phone support)
|
| - autolinks between pages
|
| - simple picture upload interface (^V with a pic in clipboard
| will upload the pic + paste appropriate markup)
|
| - single user system, intended as a personal knowledge base
|
| this system will replace https://j3s.sh and
| https://abyss.j3s.sh eventually -- all old links will redirect
| to the new wiki. it's been quite an undertaking, but i think
| the end result will be worth it :3
|
| [0]: https://github.com/bouncepaw/mycorrhiza
|
| [1]: https://edna.arslexis.io
| lelanthran wrote:
| See my comment upthread; I'm very curious why PHP would not
| have worked for you.
| j3s wrote:
| because i don't enjoy working with PHP
| lelanthran wrote:
| I'm not seeing the point here, TBH. What use-case does this
| author's single-binary satisfy?
|
| 1. You just want to serve static files from your blog? Install a
| webserver and knock yourself out in your editor, creating html
| and css (and maybe js) files.
|
| 2. You want to serve static files, with some dynamic crap stuffed
| inside here and there like the examples given in the article?
| Install the mod_php or equivalent for your webserver, and go mad
| with the editor.
|
| 3. You want fully generated content? Install one of the many
| backend frameworks in any language you want to use, and then go
| mad in your IDE.
|
| What use-case does "one binary I wrote in Go" satisfy that isn't
| covered above? From everything I gleaned from the article, the
| PHP solution is even easier, while still technically being "one
| single binary".
|
| EDIT: as an example of over-engineering, here is the authors code
| for a specific use-case: func ipHandler(w
| http.ResponseWriter, r *http.Request) {
| w.Header().Set("Content-Type", "text/plain")
| fmt.Fprintf(w, r.Header.Get("X-Forwarded-For")+"\n") }
| ... http.HandleFunc("/ip", ipHandler)
|
| And here is the equivalent in PHP:
| header('Content-Type: text/plain'); echo
| $_SERVER['REMOTE_ADDR'];
| malwrar wrote:
| Easier to deploy? No need for packaging everything or
| installing runtime stuff, just copy one file on your server and
| run it.
| indigodaddy wrote:
| Redbean is another good candidate for accomplishing this.
| dlachausse wrote:
| I think a lot of younger developers don't realize that there
| was a time where you simply FTPed your files up to a
| directory on a web server. If you wanted to live dangerously,
| you could even edit them live on the server through a shell
| account.
| hkon wrote:
| sigh
| Veen wrote:
| It solves the author's use case, which the article explains at
| some length.
| bob1029 wrote:
| > What use-case does "one binary I wrote in Go" satisfy that
| isn't covered above?
|
| In .NET land, one of the top reasons to go all-in with a single
| exe web server would be performance. Kestrel can be
| _unbelievably_ fast if you remove all of the layers of
| indirection like IPC and hosted SQL. I 've got dynamic HTML
| pages that render in <100uS and that includes managing session
| state and other queries into SQLite.
|
| Concerns like accidentally showing up on the front page of HN
| or even petty DDOS attempts can be often be ignored when you
| are able to serve content this quickly.
|
| The other major reason I like it is having everything in one
| type system and debugger experience. I can set a breakpoint
| _anywhere_ and inspect _everything_.
| jbreckmckye wrote:
| But Go is so _simple_!
|
| (Points to a myriad of Go functions that do in eight or nine
| lines what other languages do in two)
| acuozzo wrote:
| I'm not defending Go here, but simplicity can also be used to
| describe not having to incur the cost of (often leaky)
| abstractions when things go wrong under the hood or when you
| need to do something different from the intended use-case(s).
|
| For instance, PyTorch is simple until you have a __need__
| (e.g., rfft/irfft with bfloat16) to drop to CUDA and, in so
| doing, break autograd and all kinds of other things. Now you
| need to write a Torch extension and handle Meta/Fake tensors
| and the like if you want it to work with torch.compile. A lot
| of the simplicity goes right out the window.
|
| If you run into this a lot, then you're doing something
| sufficiently weird for the simpler solution to, well, not be
| simpler.
| dlachausse wrote:
| I think a lot of it is just for the author's own fun,
| enjoyment, and amusement. Also, golang is probably their
| favorite hammer. It's not efficient for me to smoke a brisket
| myself or make furniture by woodworking, but I enjoy it. Not
| everything has to have any more purpose than that.
| j3s wrote:
| bingo. i'm not trying to claim that everyone should do this
| in go -- it's just a language that i like to use. by all
| means, use ruby, or PHP, or Elixir, or whatever else you
| like!
| throwmeaway222 wrote:
| So I guess one docker image is also one binary...
| j3s wrote:
| i have some thoughts about this >:)
| https://abyss.j3s.sh/hypha/docker
| OptionOfT wrote:
| A Docker container can launch a single process or multiple
| processes [0] (please don't do this, use docker as the
| separation & health checker).
|
| In the former case we have a single executable. We can now
| choose to statically compile all dependencies with musl.
|
| We can also statically compile all the assets (HTML, images)
| into the binary.
|
| Then you take your Docker image and build a FROM scratch image,
| copy in your binary and you've got a super-lightweight
| container.
|
| [0] https://www.bugsink.com/blog/multi-process-docker-images/
| xandrius wrote:
| Anytime I see someone writing without any capital letters, I stop
| and close the page. I understood that they care more about
| themselves (the writer) than the reader, so I let them write
| without my reading, as they signaled they don't care about it.
| Respectable.
| imperialdrive wrote:
| it is likely an informal, stylistic choice, nbd honestly
| quesera wrote:
| How do you feel about people who speak with accents?
| lelanthran wrote:
| > How do you feel about people who speak with accents?
|
| You think people with accents do it on purpose?
|
| How do _you_ feel about people who talk to you in a fake
| accent for no reason whatsoever?
|
| This looks like the same thing.
| quesera wrote:
| Looks like it, but it often is not.
|
| Affectation is one thing, but the behaviour you describe is
| as much cultural and contextual as it is affectation. Just
| like an accent.
|
| Very very much not worth thinking about too hard, except
| for its anthropological implications. IMO, of course.
| fragmede wrote:
| good to know. so now you've closed this page now and gotten
| back to work? i wonder where else you read things on the
| internet
| simpaticoder wrote:
| I believe that similar concerns/aesthetics drove the development
| of https://redbean.dev/
| indigodaddy wrote:
| This is actually a great post. Love the idea of single binary and
| low dependencies to keep things as lean as possible.
| usixk wrote:
| Pleasantly surprised how jovial this post was. Thanks!
| sha16 wrote:
| I was using Python's Pelican static site generator for some time
| until I wanted to further customize the template fragments of a
| theme. Started running into issues and even helped fix a bug with
| the build command. Eventually I couldn't be bothered and wrote my
| own static site, except with Nextjs instead of plain HTML. Didn't
| take long and I don't have to mess around with awkward jinja
| templates anymore.
| vunderba wrote:
| Similarly I started out with Pelican but eventually needed more
| fine control over the site using MDX/etc. so I migrated my site
| over to Astro and have been pretty happy with it.
| daitangio wrote:
| Yes hugo+template+isso (my Giorgi.com setup) has some hidden
| dependencies but you can get a fancy site in very little time. A
| dynamic web site is exciting to design, but require a lot of
| effort... I suggest to use Python Django: it has a tutorial for a
| blog!
| exiguus wrote:
| I like the idea, but I don't like that the result is not
| accessible. For example, there are no headlines, lists, or
| paragraphs--just a huge pre, or if you remove the 'thoughtbody'
| class from the p element, you can see how well a screen reader
| can read it.
|
| I also have extensive experience with static sites, starting from
| using just Apache Directory Listing (Footer, Header, SSI), to
| writing my own in Perl, Ruby on Rails, Go, and TypeScript, using
| frameworks like Astro, Next, or Zola. Apart from the Apache setup
| and some Perl scripts, all of them had one thing in common: I
| used Markdown because it is easy to transform into HTML, which
| means it is accessible.
| j3s wrote:
| agreed, accessibility is something i'm hoping to fix with my
| wiki rewrite! that and phone formatting x_x
| exiguus wrote:
| I really like the (let's call it) 'ASCII look'. I would be
| delighted if you could share an update with the mobile-
| ready/accessible version.
| minroot wrote:
| It's true, static sites are low energy.
| Twey wrote:
| Rather than a compiled blob generated from a language propped up
| by Google (a company famed for killing beloved projects) that is
| compiled and therefore unmodifiable and unrecoverable if the
| source or toolchain is lost, it feels like these goals would have
| been better served by writing it as some POSIX-compatible sh
| scripts, or even a (pre-packaged/no-build) JavaScript bundle --
| we've been trying to kill that thing for decades, and it's still
| kicking!
| dang wrote:
| Related:
|
| _My website is one binary_ -
| https://news.ycombinator.com/item?id=44345752 - June 2025 (1
| comment)
|
| _My website is one binary (2022)_ -
| https://news.ycombinator.com/item?id=37964917 - Oct 2023 (168
| comments)
|
| _My website is one binary_ -
| https://news.ycombinator.com/item?id=30937515 - April 2022 (67
| comments)
___________________________________________________________________
(page generated 2025-07-25 23:02 UTC)