The 2025 edition of JSHeroes (their 7th!) took place on May 29–30 in Cluj-Napoca, Romania. Koen, a member of our team, attended for the sixth time, and shared his debrief with us. Here it is!
For those who haven’t been, what is JSHeroes?
JSHeroes is a single-track, community-driven JavaScript conference that places a strong emphasis on the human side of technology. While it features ample coverage of frameworks and tools, its true value lies in the carefully curated mix of technical deep-dives, practical insights, and meaningful hallway conversations that resonate long after the event concludes.
What sets JSHeroes apart?
The atmosphere. It’s friendly, humble, and genuinely welcoming. Whether you’re a seasoned dev or just getting started, there’s space for you at JSHeroes. The beanbag-powered alternative stage opens up the floor for fun off-topic discussions like “Will AI actually take our jobs?”
Cluj itself adds a lot to the experience. A comfortable venue and hotel, amazing food and drinks, and there’s something about Romanian hospitality that makes this conference feel more like a reunion than a work event.
– Koen
The Talks
One of the things I like about the single-track format is that it forces you to step outside your bubble—you end up hearing about things you might not have picked out yourself, and that’s often where the magic happens.
– Koen
Day One: Back to Reality
The first day focused on something I’ve struggled with after pretty much every conference: you hear about all these shiny new frameworks, tools, and features, but then you return to your day job… and you’re back in the trenches, maintaining a legacy app or dealing with browser support constraints. That disconnect is real. It is refreshing to see the spotlight on topics like improving existing codebases, gradual upgrades, and making the most of what you already have.
– Koen
Day Two: Modernizing the Stack
“Day two shifted the focus to modernizing the web stack. We looked at how some familiar tools—like RPC and Express—are evolving, and how new browser features like scroll-driven animations and CSS layers are making native solutions more powerful than ever. The closing talk zoomed out to explore how streaming, server-side rendering, and AI might reshape how we build for the web. Whether you’re sold on that future or still skeptical, it definitely sparked a lot of interesting discussions afterward.”
– Koen
Koen’s Must-Watch Highlights
All talks will be available on YouTube, but here are Koen’s personal must-watch picks:
Opening Talk: The Code Etymologist – Andrei Pfeiffer
Andrei is one of my all-time favorite speakers. This year he brought a smart and engaging take on the role of documentation in modern development teams. He drew a great parallel between oral tradition (where stories slowly morph over generations) and undocumented codebases, where critical knowledge lives only in the heads of a few team members.
He also pointed out a subtle contradiction: agile practices often discourage heavy documentation, but in practice, that can leave teams guessing about things as basic as:
-
“Which Node version are we using?”
-
“What environment variables are required?”
These aren’t theoretical issues—they slow people down every day.
Some great practical tips he shared:
-
Use tools like Zod to validate
.env
files using JSON schemas. -
Clearly separate what your data is from what it should be (TypeScript values vs. types).
-
Enforce the Node version for your project using
engines
inpackage.json
, together withengine-strict=true
.
Cascading Layers of !mportance – Miriam Suzanne
If you’ve ever wrestled with CSS specificity or found yourself yelling at !important
, this talk was a breath of fresh air. Miriam Suzanne took us deep into how the CSS cascade actually works—and why the new @layer
rule is such a game-changer.
It started with a reminder of how the browser applies styles—from default styles, to user preferences, to author styles—and how !important
can flip that whole order around.
Then came the real star: Cascade Layers. By layering styles intentionally, you can control specificity in a way that actually makes sense.
A few key takeaways:
-
Layer your styles based on trust: third-party libraries, design systems, and finally your own overrides.
-
Unlayered styles override layered ones, so don’t skip the
@layer
rule entirely. -
Layers aren’t only for the global level—they can be useful inside components too: great for managing button states, themes, and overrides cleanly.
The talk was packed, but clear—and if you want to go deeper, the slides are well worth a scroll.
🖌️ Credit for the cool live sketches goes to Oana Zaulet, who drew them during the talks!
The question you might have in mind: Will Koen attend next year?
Six years in, and Koes hasn’t gotten tired of JSHeroes. If anything, it’s become one of the few events he looks forward to every year— So yes—chances are, you’ll see him there!
What about you?
– An insight by Koen Vaes