01
02
03
.layout = .center, .layer = .grid(14, 1, .palette(.grid_color))
.transform = .direction_scale(.down, .px(4), 1.05), .border = .simple(.palette(.tint)))
codex-engine rendered in 0.00ms
A
toolbox
for the Web
Senet includes a Frontend [0], Backend [1], and CLI [2]. Yet ships with zero dependencies.
Out of the Row production defaults, and +100 UI Components.
THIS entire website, is just a mere ~290kb .
Powered By
Used By
Vaporization
Vaporization is a tool that allows you to generate UI from data such as
structs,
strings,
numbers, and
arrays, or even
markdown.
Vaporization cuts, down on boilerplate, and repetition.
Vaporizing structs returns forms with, error handling, tooltips, and validations.
Vapor/React Form Comparison
Below is a code line comparison of a Vapor form, and a React form. The React version uses Zod, React-Hook Form, Tailwind, and shadcn/ui.
~120 Lines
vaporize.zig
~560 Lines
react-hook-zod-shad.zig
Templates
A framework so simple, even
Claude built the following with just the docs!
Senet, has been tested, by real users and is currently running in production, the goal was to create documentation that is easy to read, and easy to navigate. But also, can be fed into LLMs, so that one can query, and create.
.width(.percent(100)).padding(.tb(64, 64)).layout(.x_even).border(.top(.hex("#E4E4E4")))
Vapor
Is a Compile-Time UI Engine, which takes a programmer first approach to building UIs
ZIG → WASM → UI
Reverb
Is a simple, yet powerful, backend framework for Zig. Zero runtime allocations, High performance, Express like.
Metal
Metal a full featured cli tool for deploying, building, and managing Senet Applications.
.dots(0.5, 8, .black).shadow(.card(.black))
vapor.zig
1
// All normal Zig code
2
const
Vapor = @import(
"vapor"
);
3
4
// No useState gymnastics
5
var
counter: i32 =
0
;
Vapor Code Sample
Vapor lets you build user interfaces using a simple, what you see is what you get approach. The code on the left shows two core concepts that make Vapor special: automatic UI updates and flexible styling.
Notice how the counter updates?
We use a plain variable counter
for the state, no special hooks or functions. Text
automatically updates when counter changes.
The Inline Style Method (Chaining) For quick or unique styles, you can "chain"
modifiers directly onto the component. This is fast, readable, and keeps the styles right next to the component they affect.
0
Reverb
Reverb is a backend web framework that is built on top of
Loom.
Reverb,
has a focus on performance, built-in defaults, and a simple API.
reverb.zig
1
const
std = @import(
"std"
);
2
const
Reverb = @import(
"reverb"
);
3
4
fn
ping
(ctx: *Reverb.Context) !void {
5
try
ctx.
STRING
(
"Hello World!"
);
Simple Routing & Powerful Middleware
Send data to client, and database with one liners. Automatic handling of errors, middleware, and more.
reverb_middleware.zig
1
const
std = @import(
"std"
);
2
const
Canopy = @import(
"canopy"
);
3
4
const
User =
struct
{
5
name: []
const
u8,
websocket.zig
1
const
std = @import(
"std"
);
2
const
loom = @import(
"loom"
);
3
const
Server = @import(
"reverb"
).Server;
4
const
Context = @import(
"reverb"
).Context;
5
const
Websocket = loom.WebSocket;
Builtin WebSockets
Setup websockets with ease, and use them to communicate with anyone.
Senet has a built-in WebSocket server.
Vapor also has a built-in WebSocket client.
Community
Resources
Projects
SENET
Lace up 🤘