omerss2311
Tamnoon - Realtime web apps with any frontend and 0 effort :)
Hey all!
A little background for this: as much as I love Elixir, I suck at UI design. Not even CSS - I just can’t make a nice UI without my comfy Joy UI components. And I’m sure I’m not the only one ![]()
I wanted to get into web dev with Elixir, but the more I looked into it the more it seemed just… extra. I’m just a high schooler making web apps, I don’t need big crazy frameworks with databases. And I’m sure I’m not the only one :)))
So I made Tamnoon - a library (/framework i guess?) to make realtime web apps effortlessly without all the bells and whistles. It’s basically a glorified cowboy websocket server, and it’s pretty much fully extensible, so you can do anything you want with it really.
I aimed to make it as simple as possible and abstract everything away, including the boilerplate - so you can write clean readable code with 0 distractions.
By default it is capable of holding a state for each client (similar to agents) and also implements basic pubsub functionality with channels. (currently no built-in database support since I do not get along with databases
)
The guides in the documentation basically cover everything you need to know, so check them out if you’re interested! Tamnoon v0.1.1 — Documentation
I would love to hear if you tried it out, and in general any thoughts / questions about it ![]()
Hope you have a great day!
Most Liked
LostKobrakai
It took me a while to understand what Tamnoon does tbh. I don’t think the comparison to “big crazy frameworks” does you a favor here, as Tamnoon is providing but a tiny sliver of what you’d generally do with those big frameworks.
I really like the idea though. What Tamnoon provides on top of its dependencies is basically CRUD + pubsub of state on the server to clients connected via websockets + extension points for custom actions. This sounds like a great prototyping option when all you care for on the server is that it can hold and manipulate some shared state while working on the frontend.
I might want to look at Bare Websockets | Benjamin Milde, which would allow you to use plug for the websocket portion of tamnoon as well. So Tamnoon could work with both cowboy and bandit as underlying webserver.
omerss2311
0 setup, 0 boilerplate, 0 complexity. It’s also specifically made for this whereas with phoenix it’s more general purpose, which while it can be very beneficial also means tons of unnecessary boilerplate.
for example, to create a chat app you simply add Tamnoon to your supervision tree like so:
{Tamnoon, [[initial_state: %{last_message: ""}]]}
and that’s literally it for the backend. just have the frontend show new messages as the last_message value changes, and send this json for sending new messages:
{
"method": "pub",
"channel": "clients",
"action": {
"method": "update",
"key": "last_message",
"val": "the new message"
}
}
PS. Sorry if the formatting is bad, I’m just on my phone rn







