Mastro.{js,ts}
mastrojs.bsky.social
Mastro.{js,ts}
@mastrojs.bsky.social
The simplest web framework and site generator.
Runs on Deno, Node.js, Bun and in your browser as a VSCode extension.

https://mastrojs.github.io 🧑‍🍳

#noBuild #noBloat #noMagic
🍀
November 14, 2025 at 6:31 AM
And if the real-time collaboration is more important, perhaps github.com/inkandswitch...
GitHub - inkandswitch/tiny-essay-editor: simple markdown editor w inline comments, on latest automerge stack
simple markdown editor w inline comments, on latest automerge stack - inkandswitch/tiny-essay-editor
github.com
November 13, 2025 at 6:44 PM
Congrats! Feels like devs are slowly waking up to how bad Next is.
November 13, 2025 at 6:27 PM
Perhaps gitit by jgm of pandoc fame? github.com/jgm/gitit
GitHub - jgm/gitit: A wiki using HAppS, pandoc, and git
A wiki using HAppS, pandoc, and git. Contribute to jgm/gitit development by creating an account on GitHub.
github.com
November 13, 2025 at 6:18 PM
Air or Pro?
Meaning can you hear the fan spin or is it just frying itself in quiet desperation?
November 13, 2025 at 6:11 PM
Markdown files where you can comment and suggest edits? Like in a pull request? Sounds like GitHub, GitLab, Codeberg or Forge or whatever those are all called?
November 13, 2025 at 6:09 PM
This looks really cool! And very similar to my mastrojs.github.io just in Rust instead of JS/TS. Will need to take a closer look!
Mastro: the simplest web framework and site generator
No bloat, no magic, no config. Mastro gets out of the way, so that you can focus on building awesome websites.
mastrojs.github.io
November 13, 2025 at 5:11 PM
Thanks for all your work @patrickbrosset.com and team! Baseline really has been a game changer when quickly looking up support.

And cannot repeat enough for devs who haven’t realized: there is Baseline Newly Available, and Baseline Widely Available.
November 13, 2025 at 3:26 PM
This. If you can start with a clean slate, it’s amazing how simple you can get away with: mastrojs.github.io
Mastro: the simplest web framework and site generator
No bloat, no magic, no config. Mastro gets out of the way, so that you can focus on building awesome websites.
mastrojs.github.io
November 13, 2025 at 7:01 AM
That’s funny. I thought the pitch of StackBlitz was “ever wanted to run that project without installing it” and now you do the reverse?

But I sympathize, I also thought I would generate static sites inside the browser in vscode.dev way more. But turns out the CLI is just too familiar nowadays.
Mastro: the simplest web framework and site generator
No bloat, no magic, no config. Mastro gets out of the way, so that you can focus on building awesome websites.
mastrojs.github.io
November 13, 2025 at 6:59 AM
True. Then again, you might not need React.
November 13, 2025 at 6:54 AM
Congrats!
Hope this will lead to a client-side RUM script that’s not 1MB (something last time I looked, I couldn’t find).
November 13, 2025 at 6:48 AM
I would just hate if some regulator mandated browser engine choice but forgot about the add-to-homescreen UX.
November 12, 2025 at 7:43 PM
Did you also get a hydration error? 🫠
November 12, 2025 at 7:26 PM
To be fair, that’s something a linter usually catches.
But what’s the status of “sideEffects: false" in package.json or a similar mechanism?
November 12, 2025 at 7:25 PM
should have done HTML and CSS
November 12, 2025 at 7:22 PM
Yes, that with the rational numbers resonates more with me. It all depends on your choice of equality. The refactored program should be equivalent to the previous one, if equal means that it produces all the same outputs for the same inputs.
November 12, 2025 at 6:21 PM
haha, I feel we’re straining the analogy. all I can say with certainty is that if you have a monoid, applying the identity element (e.g. multiplying by 1) does the same thing as the “nop” assembly instruction: nothing.
November 12, 2025 at 5:58 PM
Or as the imperative programmers say: a noop.
November 12, 2025 at 5:49 PM
More powerful browser on iOS would be nice. But what’s holding PWAs back is that nobody knows how to install them on iOS.
November 12, 2025 at 5:26 PM
You’re welcome! With all the abstractions it can be hard to see the forest for the trees.
November 12, 2025 at 9:46 AM
Ah yeah, sounds you need to do myString || null somewhere. Either before sending to the GraphQL server or when setting the useState. And if it’s then uncontrolled you can do value={myString || “”} to do the reverse.
November 12, 2025 at 9:17 AM
Thanks a lot! If you have any more questions, let us know!
Mastro: the simplest web framework and site generator
No bloat, no magic, no config. Mastro gets out of the way, so that you can focus on building awesome websites.
mastrojs.github.io
November 12, 2025 at 7:11 AM
Ah, un/controlled the React concept. But warnings from what, a linter? Or a TypeScript error? In TypeScript, null and undefined are not the same thing, so you’d need useState<string | null>(null);
November 12, 2025 at 6:53 AM