You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: www/content/essays/alternatives.md
+45-27Lines changed: 45 additions & 27 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@ tag = ["posts"]
13
13
+++
14
14
15
15
[htmx](/) is only one of many different libraries & frameworks that take the
16
-
[hypermedia oriented](@/essays/hypermedia-driven-applications.md) approach to building web applications. I have
16
+
[hypermedia oriented](@/essays/hypermedia-driven-applications.md) approach to building web applications. I have
17
17
said before that I think the [ideas of htmx](/essays) / [hypermedia](https://hypermedia.systems) are more important than
18
18
htmx as an implementation.
19
19
@@ -22,8 +22,9 @@ Here are some of my favorite other takes on these ideas that I think are worth y
22
22
## Unpoly
23
23
24
24
[Unpoly](https://unpoly.com/) is a wonderful, mature front end framework that has been used heavily (especially in the
25
-
ruby community) for over a decade now. It offers best-in-class [progressive enhancement](https://developer.mozilla.org/en-US/docs/Glossary/Progressive_Enhancement)
26
-
and has many useful concepts such as [layers](https://unpoly.com/up.layer) and sophisticated
and has many useful concepts such as [layers](https://unpoly.com/up.layer) and sophisticated
27
28
[form validation](https://unpoly.com/validation).
28
29
29
30
I interviewed the author, Henning Koch, [here](@/essays/interviews/henning_koch.md)
@@ -32,14 +33,14 @@ You can see a demo application using Unpoly [here](https://demo.unpoly.com/).
32
33
33
34
## Triptych
34
35
35
-
[Triptych](https://github.com/alexpetros/triptych) is a set of [three proposals](https://alexanderpetros.com/triptych/)
36
+
[Triptych](https://github.com/alexpetros/triptych) is a set of [three proposals](https://alexanderpetros.com/triptych/)
36
37
to bring more generalized hypermedia controls directly into the HTML specification:
37
38
38
39
* Allow more [HTTP Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) to be used directly from HTML
39
40
* Allow buttons to act as stand-alone hypermedia controls
40
41
* Allow hypermedia controls to target any element on the page for replacement
41
42
42
-
It is [in the process](https://github.com/whatwg/html/issues/3577#issuecomment-2294931398) of being introduced to the
43
+
It is [in the process](https://github.com/whatwg/html/issues/3577#issuecomment-2294931398) of being introduced to the
43
44
[WHATWG](https://whatwg.org/) for inclusion in the HTML specification.
44
45
45
46
The project includes a [polyfill](https://github.com/alexpetros/triptych/blob/main/triptych.js) that can be used today
@@ -49,7 +50,7 @@ to implement applications using the proposal today.
49
50
50
51
[fixi.js](https://github.com/bigskysoftware/fixi) is a minimalist implementation of
51
52
[generalized hypermedia controls](https://dl.acm.org/doi/fullHtml/10.1145/3648188.3675127) by the htmx team, focusing
52
-
on being as small as possible and [omitting](https://github.com/bigskysoftware/fixi#minimalism) many of the features
53
+
on being as small as possible and [omitting](https://github.com/bigskysoftware/fixi#minimalism) many of the features
53
54
found in htmx.
54
55
55
56
It is intended to be as small as possible (~3.5k unminified & uncompressed, ~1.3k compressed) while still being readable
@@ -58,79 +59,96 @@ and debuggable, so it can be included in a project directly without requiring an
58
59
## Datastar
59
60
60
61
[Datastar](https://data-star.dev/) started life as a proposed rewrite of htmx in typescript and with modern
61
-
tooling. It eventually became its own project and takes an [SSE-oriented](https://data-star.dev/guide/getting_started#backend-setup)
62
-
approach to hypermedia.
62
+
tooling. It eventually became its own project and takes
63
+
an [SSE-oriented](https://data-star.dev/guide/getting_started#backend-setup)
64
+
approach to hypermedia.
63
65
64
-
Datastar combines functionality found in both htmx and [Alpine.js](https://alpinejs.dev/) into
65
-
a single, tidy package that is smaller than htmx.
66
+
Datastar combines functionality found in both htmx and [Alpine.js](https://alpinejs.dev/) into
67
+
a single, tidy package that is smaller than htmx.
66
68
67
69
You can see many examples of Datastar in action [here](https://data-star.dev/examples).
68
70
69
71
## Nomini
70
72
71
-
[Nomini](https://github.com/nonnorm/nomini) is a hypermedia implementation that embraces writing JavaScript in the original and intended way, as a simple enhancement to mostly-static pages. Its goal is to add a minimal layer of LoB on top of HTML to allow for powerful server-driven web apps with easily implemented client-side features. Additionally, it is currently the smallest library existing that gives both reactive variables and partial page swaps (~2.8k minified, ~1.4k minzipped).
73
+
[Nomini](https://github.com/nonnorm/nomini) is a hypermedia implementation that embraces writing JavaScript in the
74
+
original and intended way, as a simple enhancement to mostly-static pages. Its goal is to add a minimal layer of LoB on
75
+
top of HTML to allow for powerful server-driven web apps with easily implemented client-side features. Additionally, it
76
+
is currently the smallest library existing that gives both reactive variables and partial page swaps (~2.8k minified, ~
77
+
1.4k minzipped).
72
78
73
-
In essence, Nomini is a tiny reimplementation of Datastar or a combination of Fixi and Alpine.js, intended to be a minimal, pragmatic building block for reactive server-driven UIs.
79
+
In essence, Nomini is a tiny reimplementation of Datastar or a combination of Fixi and Alpine.js, intended to be a
80
+
minimal, pragmatic building block for reactive server-driven UIs.
81
+
82
+
## µJS
83
+
84
+
[µJS](https://mujs.org/) is a small (~5k) dependency-free library that implements many hypermedia ideas and includes
85
+
pre-fetching, SSE, idiomorph-based morphing and many other [great features](https://mujs.org/documentation).
74
86
75
-
## Alpine-ajax
76
87
77
-
Speaking of Alpine (which is a common library to use in conjunction with htmx) you should look at
78
-
[Alpine AJAX](https://alpine-ajax.js.org/), an Alpine plugin which integrates htmx-like concepts directly into Alpine.
88
+
## Alpine-ajax
79
89
80
-
If you are already an Alpine enthusiast, Alpine AJAX allows you to stay in that world.
90
+
If you are a fan of [Alpine](https://alpinejs.dev/) (which is a common library to use in conjunction with htmx) you
91
+
should also look at [Alpine AJAX](https://alpine-ajax.js.org/), an Alpine plugin which integrates htmx-like concepts
92
+
directly into Alpine.
81
93
82
94
You can see many examples of Alpine AJAX in action [here](https://alpine-ajax.js.org/examples/).
83
95
84
96
## Hotwire Turbo
85
97
86
98
[Turbo](https://turbo.hotwired.dev/) is a component of the [Hotwire](https://hotwired.dev/) set of web development
87
-
technologies by [37Signals](https://37signals.com/), of [Ruby on Rails](https://rubyonrails.org/) fame. It is a polished
88
-
front end framework that is used heavily in the rails community, but can be used with other backend technologies as well.
99
+
technologies by [37Signals](https://37signals.com/), of [Ruby on Rails](https://rubyonrails.org/) fame. It is a polished
100
+
front end framework that is used heavily in the rails community, but can be used with other backend technologies as
101
+
well.
89
102
90
103
Some people who have had a bad experience with htmx [have enjoyed turbo](https://news.ycombinator.com/item?id=42615663).
91
104
92
105
## htmz
93
106
94
107
[htmz](https://leanrada.com/htmz/) is a brilliant, tiny library that takes advantage of the fact that anchors and forms
95
-
already have a [`target`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#target) attribute that can target
108
+
already have a [`target`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#target) attribute that can target
96
109
an `iframe`.
97
110
98
-
This, in combination with the `location hash`, is used to allow [generalized transclusion](https://dl.acm.org/doi/fullHtml/10.1145/3648188.3675127#sec-7).
111
+
This, in combination with the `location hash`, is used to
0 commit comments