← Back to blog
·1 min read·5 views

Migrating from Perseus and Sycamore to Leptos

rustleptossycamoreperseusfrontendwasmmigration

I have a private side project that I work on after hours. The whole frontend is written in Rust and, until recently, it was built on Perseus and Sycamore. I picked them because they gave me exactly what I wanted: a reactive frontend in Rust without JavaScript. Over time, though, things started getting suspiciously quiet.

Why Switch?

Someone on Discord asked whether Perseus was being actively developed. The maintainer answered plainly that it isn’t a priority right now. At the same time, another contributor was working on v0.5, which was supposed to bring Perseus up to the latest Sycamore, so there was some hope. A few months later, in July, someone asked for news about the merge. There was no answer.

For a hobby project that’s not a disaster, but I already had a lot of code and didn’t want to keep building features on a foundation that gets no fixes and has no clear plan.

Perseus is built on top of Sycamore, so replacing just one of them wasn’t an option. The whole frontend had to move to Leptos.

Is the Syntax Similar?

Partly. Under the hood both frameworks share the same core ideas: signals, fine-grained reactivity, and components as plain functions. If you know one, you’ll feel at home in the other pretty quickly.

The view! macro looks different, though. Sycamore uses a Rust-style notation: elements with braces, attributes in parentheses, dynamic values in ( ). Leptos is closer to JSX: angle-bracket tags and values in { }. That’s mostly mechanical work, not a change in how you think.

How Did the Migration Go?

One weekend. And that’s with a project that was already quite large. No weeks of fighting the compiler, no moment where I had to throw everything away and start over. Most of the time went into rewriting views, not into changing the architecture.

Takeaways

Your choice of framework matters, but what matters more is whether anyone is still on the other side. When a maintainer says outright that he has no time and the community goes quiet, that’s a signal worth acting on before the project starts holding you back. For me, that weekend was a good investment: I moved to a framework that looks alive, and I can get back to building the project itself.

K

Kacper

Software Developer