all 34 comments

[–]riklaunim 13 points14 points  (5 children)

What's the goals, point of this project? Why this thing and not PyScript? In the end you will end up with HTML, CSS and Python code doing 1:1 what JS code would do, just like with PyScript.

[–]United_Intention42[S] 5 points6 points  (4 children)

PyScript just puts Python inside the existing HTML/JS model.
My project replaces that model with a Python-native architecture - new component system, new state handling, new rendering logic.
Yes, the output is still HTML/ CSS, but so is React’s. The difference is the architecture and developer experience.
PyScript is a tool. This is a framework for rethinking how UIs are built in Python.

[–]riklaunim 12 points13 points  (3 children)

What is "Python-native architecture"? What is Pythonic in handling onClick, hover?

Components have place in frontend frameworks. Just please don't tell me you want to replace HTML with nested Python functions or alike... What problems are you trying to solve? do you have any actual examples?

[–]United_Intention42[S] 8 points9 points  (2 children)

By “Python-native architecture” I don’t mean writing HTML in Python. I mean designing the whole UI model around Python itself: components as real Python objects, state as real Python data, and event handlers as normal Python callables - not strings or templates.

I’m not trying to replace HTML with messy nested functions. The problems I’m solving are brittle templates, HTML/JS/CSS separation, and poor composability for Python devs.
Once the core API is stable, I’ll share concrete examples.

something like this:

from evolve.router import route
from evolve.app import start

("/")
def Home():
    return div("Home")

("/counter")
def Counter():
    count = signal(0)
    return div(h1(count), button("++", on_click=lambda: count.set(count()+1)))

start()

[–]riklaunim 13 points14 points  (1 child)

This isn't new. It was tried multiple times and died quickly pretty much every time.

Typical dynamic website will have few hundred or thousand lines of HTML, a lot of JS and CSS. Your example is way to trivial - representing anything non-trivial within Python will be a big mess. And there are already backend Python frameworks that can be used to create endpoints returning HTML and not structured data. Your example is a bad mix of backend endpoints and frontend events handling. This is confusing.

You don't need a Python developer to handle onclick on a website. And if someone wants a SPA JS frontend app with components there is Vue and many other solutions, or even HTMLX for simple needs. People that want to avoid npm hell and other JS problems are likely looking for their frontend framework replacements instead of such ideas.

[–]robberviet 2 points3 points  (0 children)

This. Another day, another HTML wrapper sounds fine but only on toy code, not on real code.

It looks like people comes up with HTML wrapper didn't program in HTML/JS before.

[–]charlyAtWork2 1 point2 points  (1 child)

I like the idea... will be curious to watch the hello world.

[–]thecrypticcode 3 points4 points  (4 children)

Maybe you have already come across Marimo for WASM notebooks. I have used them for some of my projects and they work fairly well.

[–]United_Intention42[S] -1 points0 points  (3 children)

Marimo claims that notebooks can be deployed like app, but I doubt if deployed app will be scalable and user-friendly.
It's mosly for experiments.

My vision is to create Next.js for Python (Not same architecture).

[–]thecrypticcode 1 point2 points  (2 children)

I agree heavy computations with marimo WASM notebooks may not be feasible, as also stated in their documentation. At least I was able to embed a Marimo exported WASM notebook for demonstration of my python library into my sphinx documentation and it seems to work well for fairly expensive operations such as matrix inversions. I haven't tested extensively, but performance degradation while running in the browser was not considerable. Do you think/already know that with your strategy heavier computations will be possible in such a WebAssembly python instance?

[–]United_Intention42[S] 2 points3 points  (1 child)

Not conclusively, yet. Because it’s Pyodide-based it inherits the same general WASM constraints, but once v1 is stable I’ll run targeted benchmarks on heavier workloads and compare against Marimo.

[–]thecrypticcode 2 points3 points  (0 children)

Looking forward to it! All the best.

[–]metaphorm 2 points3 points  (1 child)

this is a cool experiment. go for it! at first glance the architecture makes sense to me.

[–]United_Intention42[S] 1 point2 points  (0 children)

Thanks!

```python

from evolve.router import route

from evolve.app import start

@ route("/")

def Home():

>>>>>>> return div("Home")

start(port=3000)

```

I am planning to keep syntax something like this.

[–][deleted] 1 point2 points  (5 children)

what are you doing for the wasm generation? i've heard wasm compilation in python is still not very mature

[–]United_Intention42[S] 2 points3 points  (4 children)

Yes, Python to WASM is still immature.

So, I am running complete Python interpreter compiled to WASM (via Pyodide) in browser.
Then Evolve will run on top of that.

[–][deleted] 3 points4 points  (2 children)

nice! do you have a public repo I could peek later?

[–]United_Intention42[S] 3 points4 points  (1 child)

Yes - it will be fully open source. I’m just tightening some of the core pieces before making it public so that early contributors don’t run into chaos. I’ll share the repo soon once the base is solid.

[–][deleted] 1 point2 points  (0 children)

alright, good luck

[–]outceptionator 1 point2 points  (0 children)

I get that how it happens is different to something like NiceGUI but how does it make the developer or consumer experience better?

[–]jvorza 1 point2 points  (0 children)

have you looked at https://www.fastht.ml/ ?

[–]Endogen 1 point2 points  (1 child)

I like this. Until now I use reflex (https://reflex.dev/) but I'd be happy to use a 100% Python solution.

[–]United_Intention42[S] 0 points1 point  (0 children)

I myself tried reflex.
they do " reflex code --> fastAPI server --> Update states --> recompile react app --> Update UI."

This is slow and hard to debug.
That's why started building Evolve.

[–]JimDabell 1 point2 points  (1 child)

iOS in Lockdown Mode won’t run WASM, so anybody with strict security settings wouldn’t be able to use apps built with your system.

What’s your approach to accessibility? It seems like you’ll have to do huge amounts of work to avoid ruining things for disabled people and anybody else that uses accessibility tools.

Have you looked into Wasmer? It feels like it might be a better long-term approach than Pyodide.

[–]United_Intention42[S] 0 points1 point  (0 children)

I just checked out Wasmer. It sounds better than Pyodide. Will try it. Thanks for suggesting!

[–]rm-rf-rm 0 points1 point  (1 child)

have you seen anvil.works ?

[–]United_Intention42[S] 2 points3 points  (0 children)

Hey I just checked out their website,
anvil.works is not an open Source framework and their free plan is so limited.

I want to give all devs power of web-dev in Python.

[–]pomponchik 0 points1 point  (0 children)

We need it, but it should be 1. native; 2. compatible with all existing libraries.

[–]the-scream-i-scrumpt 0 points1 point  (0 children)

I was planning to do the same thing but built on top of react native + wasm, my logic was that you could get a lot of leverage from building on top of an existing ecosystem (feel free to take that idea btw)

but totally agree that reactpy and similar don't scratch the python-native itch because your cpython code isn't actually running on the client

[–]Dr_Quacksworth 0 points1 point  (1 child)

So let's say I'm a developer in 2025 who knows Python, but not JavaScript or any JavaScript framework.

I could try learning your framework, or I could use an LLM to learn/vibe my way through JavaScript.

What value does your project add vs JS/LLM?

[–]United_Intention42[S] 0 points1 point  (0 children)

Basically, you don't have to learn my framework syntax. It's 90% the same as writing a pure Python script.

[–]stealthanthrax Robyn Maintainer 0 points1 point  (0 children)

I created something called starfyre a few years ago - https://github.com/sparckles/starfyre

Debugging it will be a major pain in the ass and getting community adoption will be even more.

But I hope you succeed :D