I've been using htmx for three years now, and it's completely unlocked new ways of building software for the web, especially if you use a server-side templating language.
But more importantly (as this "Game Boy" option reveals), the head honcho is really responsive with the items in the store. I had purchased a coffee mug a few years back and complained on Twitter that they need to sell larger mugs instead of only offering little tiny baby mugs that only hold ~8 ounces of liquid. The next day, he added giant 48-ounce monsters to the store and I've been drinking out of that mug every day since.
HTMX's whole vibe is amazing. It's good tech, kept simple, useful in gobs of situations, but doesn't take itself too seriously. I've used it in professional and side projects since intercooler.js, and still love it. Here's a crazy unicorn-laser-eyes mug[0] that evokes the vibes of NROL-39[1]. I adore it.
I personally find react overly engineered for my projects - vuejs (+quasar on top) is just great. Granted a little boring perhaps, but it just works, behaves as you'd expect, and doing anything just isn't that difficult.
Thank you to the HTMX-folks for keeping software fun! I've been a happy HTMX user and Grug essay forwarder since it first made the rounds here on HN. This was an instant purchase :)
HTMX is awesome. I've replaced several OSS web apps on my home server with HTMX + Go + PostgreSQL replacements. The results are lightweight, responsive, work great on desktop and mobile alike, all with the absolute minimum complexity required. The codebases are easy to understand and modify, and so far I'm going months between updates (mostly just minor bugfixes for my applications). I fully expec my mature apps will go years if not decades between required upgrades.
Are any of these open source? I've gone down the go/htmx/pg path lightly a few times and I haven't loved the feel of it, but maybe I'm doing it wrong. I think just server side templating just starts feeling icky in go so maybe I'm just missing a good pattern or library.
- Standard library http package for the API server implementation
- Standard library template/html package for generating the dynamic parts of the webpage content
- Static web content is embedded within the Go binary (https://pkg.go.dev/embed) and served through server routes
- api served from /api route, htmx webpage served from /
- no ORM, mostly using standard library database/sql package for DB transactions, maybe reaching for a query builder library for more complex queries like complex search functionality
- Local S3 compatible object store for dynamic binary data like user-uploaded images and video. Local filesystem can be fine for small scale stuff.
For my home server I have authn/authz happening at the OS/infra layer, but if you need multitenancy you can pretty easily integrate an OAuth/OpenID authn/authz middleware for login with Google or whatever.
That's great but I believe it's still over-engineered. Unless it's a web site that can tolerate no downtime at all during schema updates, SQLite in WAL2 mode is more than enough. Moreover, in Postgres version upgrades can't be done without significant downtime (or setting up replication and performing a complex dance), so even that isn't so cut and dry.
For some of the simpler sites sqlite would have been fine, but I do need Postgres anyway for some other stuff on my server so the overall burden of standardizing on Postgres only is less than having to do tuning for two different databases. In particular sqlite has worse defaults due to backwards compatibility, so you have to do a lot of upfront config for every table and DB.
Postgres version upgrades are basically painless, at my workplace our upgrades complete in so little time our users don't notice, and we have more data than probably 99.9999% of companies out there (mature company in aerospace industry).
Well if you already have Postgres then yes, sounds fine. I don't really agree that SQLite needs tons of tweaking -- setting journal_mode to WAL/WAL2 is the only real thing worth doing, everything else I would consider optional.
Version upgrades for SQLite are basically a no-op though, that's kinda one of the reasons why it's so great to run in production (and deployment a maintenance being mostly a no-op as well, apart from setting up backups I guess).
I don't actually suggest that everyone should run their production on SQLite, but it's genuinely worth considering especially for small-ish projects.
I personally find Postgres WAY easier than SQLite simply because of the deployment story. I do a lot of hotfixes and dangerous stuff on personal projects, and having two databases complicates that tremendously. I like being able to run hot code on prod.
For the record, this is not the same reason I like postgres for actual production code
hello all, we are releasing htmx 4.0 on the Game Boy and Gameboy Color (thank you rcy for submitting)
it is a real, honest-to-goodness mario-bros inspired GameBoy game with four levels over three biomes ending in a slop factory where you battle final boss warren buffering (an online character I beef with, we are friends)
if you beat him it unlocks the source code for htmx 4.0
game was written by Stephen Mitchell (aka scum) by hand, using GBStudio w/heavy customizations, hoping to get an essay by him up soon talking about the creation of the game
Oh hey, I made GB Studio, really cool to see it being used for this :) I've got some nice features in progress for the next version https://www.youtube.com/watch?v=q8UKwV1gJAI
Did you use the built in GB studio sound engine? If so that's my code :) Always enjoyable when it pops up in places like this. Looks like a fun project.
The Chromatic is an awesome experience to play. The HTMX 4 game has an auto-loader which immediately drops you into the game at your last checkpoint. Since the Chromatic has no boot screen, you're back in play within a second of powering on the system.
Is it a real physical cartridge? How do you get the source code off the cartridge at the end? Or does it give you a passcode to a git repo or…like an NFT with access to the source?
While I am not particularly a fan of HTMX, I do absolutely adore how Carson and the team always have such a great sense of humor with the project.
I used HTMX in a few projects, and the library worked well enough for what I needed, but I found it to be a bit too limiting compared to accomplishing the same task in Vanilla JS (my go-to).
The box and cartridge art feels... AI-generated. There's a significant lack of intentionality in e.g. the backgrounds or the details on the car. The letters on the sides of the cartridge feel wonky too.
If its's really the case, that would be sad for a game that is about fighting slop.
But more importantly (as this "Game Boy" option reveals), the head honcho is really responsive with the items in the store. I had purchased a coffee mug a few years back and complained on Twitter that they need to sell larger mugs instead of only offering little tiny baby mugs that only hold ~8 ounces of liquid. The next day, he added giant 48-ounce monsters to the store and I've been drinking out of that mug every day since.
https://x.com/scumitchell/status/1886825775560528069?s=20
[0]: https://swag.htmx.org/collections/octohorse
[1]: https://en.wikipedia.org/wiki/USA-247
- OpenAPI API spec and using https://github.com/oapi-codegen/oapi-codegen/ to generate the types, server interface, and client library
- Standard library http package for the API server implementation
- Standard library template/html package for generating the dynamic parts of the webpage content
- Static web content is embedded within the Go binary (https://pkg.go.dev/embed) and served through server routes
- api served from /api route, htmx webpage served from /
- no ORM, mostly using standard library database/sql package for DB transactions, maybe reaching for a query builder library for more complex queries like complex search functionality
- Local S3 compatible object store for dynamic binary data like user-uploaded images and video. Local filesystem can be fine for small scale stuff.
For my home server I have authn/authz happening at the OS/infra layer, but if you need multitenancy you can pretty easily integrate an OAuth/OpenID authn/authz middleware for login with Google or whatever.
https://github.com/gsxhq/gsxui
https://github.com/jackielii/structpages is what I might call a framework that GSX sits nicely in.
Also one ai haven't tried: Templ.
https://github.com/a-h/templ
That's great but I believe it's still over-engineered. Unless it's a web site that can tolerate no downtime at all during schema updates, SQLite in WAL2 mode is more than enough. Moreover, in Postgres version upgrades can't be done without significant downtime (or setting up replication and performing a complex dance), so even that isn't so cut and dry.
</ ... >
Postgres version upgrades are basically painless, at my workplace our upgrades complete in so little time our users don't notice, and we have more data than probably 99.9999% of companies out there (mature company in aerospace industry).
Version upgrades for SQLite are basically a no-op though, that's kinda one of the reasons why it's so great to run in production (and deployment a maintenance being mostly a no-op as well, apart from setting up backups I guess).
I don't actually suggest that everyone should run their production on SQLite, but it's genuinely worth considering especially for small-ish projects.
The difference is only in the deployment/maintenance.
And considering the context he stated, zero downtime really doesn't seem like something he's worrying about.
I personally find Postgres WAY easier than SQLite simply because of the deployment story. I do a lot of hotfixes and dangerous stuff on personal projects, and having two databases complicates that tremendously. I like being able to run hot code on prod.
For the record, this is not the same reason I like postgres for actual production code
it is a real, honest-to-goodness mario-bros inspired GameBoy game with four levels over three biomes ending in a slop factory where you battle final boss warren buffering (an online character I beef with, we are friends)
if you beat him it unlocks the source code for htmx 4.0
game was written by Stephen Mitchell (aka scum) by hand, using GBStudio w/heavy customizations, hoping to get an essay by him up soon talking about the creation of the game
carts were produced w/the expertise of Jarason Banes who also did the cover design. Cover art is by Ash (https://www.fiverr.com/ae1996/) who also did the soft-cover art for https://hypermedia.systems
Hope you find it enjoyable if you get a copy and at least find it funny if you don't :)
Got really good at using it by the end of the project. You can listen to the trailer music here. Let me know what you think.
https://www.youtube.com/live/9ubSJGyB21Q?si=sz-8pxPs6zxVYMfY...
Love HTMX, can't wait for my https://brickboy.xyz/ to arrive so I can get to work!
https://modretro.com/products/chromatic-tetris-bundle
you can find cheaper ones on amazon/temu too
There's a source code reader at the end of the game, tbd if there are transfer abilities, I haven't beat it yet
I used HTMX in a few projects, and the library worked well enough for what I needed, but I found it to be a bit too limiting compared to accomplishing the same task in Vanilla JS (my go-to).
Your client does not have permission to get URL /en-cad/products/htmx-4-the-game from this server.
If its's really the case, that would be sad for a game that is about fighting slop.