Sign in

Roman Liutikov

@romanliutikov.com
257 followers 77 following 71 posts

software engineer @ margelo, ex @whimsical, ex @pitch romanliutikov.com/blog

PostsRepliesMedia
Roman Liutikov @romanliutikov.com · 30/10/2025
State of ClojureScript 2025 Survey is live state-of-clojurescript.com If you ever wanted to know what's happening in cljs world, and using the language at work or for hobby projects, fill out the survey. And share it with others! Results will be shared in January next year.
state-of-clojurescript.com
State of ClojureScript 2025 Survey
010
Roman Liutikov @romanliutikov.com · 09/07/2025
Posted about my ongoing experiment to bring React Compiler to Clojure/UIx, link below spoiler: it works :) romanliutikov.com/blog/bringin...
romanliutikov.com
Bringing granular updates to React, the Clojure way | Roman Liutikov, Software Engineer
An eploration on building auto memoizing compiler for React in Clojure
050
Reposted by Roman Liutikov
Ingvar Stepanyan @rreverser.com · 29/06/2025
Largest attack on Ukraine last night yet, but yeah, clearly Putin is open to peace and Trump will personally solve this in uh how long ago was that supposed to happen? www.france24.com/en/europe/20...
092
Roman Liutikov @romanliutikov.com · 17/06/2025
drones drones multiple days in a row, funny how you get used to shots and explosions
110
Roman Liutikov @romanliutikov.com · 05/06/2025
Thanks!
020
Roman Liutikov @romanliutikov.com · 05/06/2025
Error boundaries have been supported in my implementation of server-side rendering almost from the beginning. Under the hood they are a try-catch, synchronously retrying the rendering with the captured error.
010
Roman Liutikov @romanliutikov.com · 05/06/2025
got React Context working across server and client components in my Clojure implementation of RSC while context is not supported in js implementations, in Clojure it aligns quite nicely with `binding` macro, so it would be a shame to not have this working across the boundary
260
Roman Liutikov @romanliutikov.com · 04/06/2025
An update on RSC port to Clojure: form actions, data fetching, batching, caching and error handling romanliutikov.com/blog/towards...
romanliutikov.com
Towards React Server Components in Clojure, Part 3 | Roman Liutikov, Software Engineer
A journey on bringing React Server Components to Clojure JVM, as a part of UIx library
1141
Roman Liutikov @romanliutikov.com · 02/06/2025
iirc Next also implements secure scope capturing, which is even more questionable, but at least the data is not exposed to the client. IMO all bound args should be stored on server, tied to user session.
110
Roman Liutikov @romanliutikov.com · 02/06/2025
How do you find the concept of partial application of server functions on the backend? I did implement it, but it fees like a huge footgun to me, given that bound values are exposed to a client.
120
Roman Liutikov @romanliutikov.com · 02/06/2025
Not great for perf, but probably negligible. EDN is a native wire format in Clojure, so developer experience here matters more than performance.
110
Roman Liutikov @romanliutikov.com · 02/06/2025
Interesting. In Clojure we use persistent data types to pass data around, and in my impl I’ve decided to embed the data (in EDN format) into RSC payload. This means double parsing Flight -> JSON -> embedded EDN -> Clojure types.
110
Roman Liutikov @romanliutikov.com · 02/06/2025
That’s what I do in Clojure impl as well. Both, client components and server functions have to be marked explicitly.
010
Roman Liutikov @romanliutikov.com · 01/06/2025
Nice! Any interesting observations on how RSC implementation in OCaml is different from JS?
120
Roman Liutikov @romanliutikov.com · 21/05/2025
rebuilt this React Router demo with my Clojure port of RSC, still wip but lots of stuff already working uix-rsc-movies.fly.dev
uix-rsc-movies.fly.dev
UIx RSC Demo
UIx RSC Demo page
061
Roman Liutikov @romanliutikov.com · 19/05/2025
Yeah its primary use case is data transmission between services and/or clients written in Clojure. For JS target it’s json based, but otherwise its binary and should probably support async values, though it’s an exotic requirement (outside of RSCs if I might guess)
000
Roman Liutikov @romanliutikov.com · 19/05/2025
Checkout Transit format, its extensible and supports rich data types encoding github.com/cognitect/tr...
github.com
GitHub - cognitect/transit-js: Transit for JavaScript
Transit for JavaScript. Contribute to cognitect/transit-js development by creating an account on GitHub.
110
Roman Liutikov @romanliutikov.com · 17/05/2025
I’ll be there sharing my experience with Clojure in WASM 👋
030
Reposted by Roman Liutikov
Stefan Judis @stefanjudis.com · 15/05/2025
It was about time, wasn't it? 😅 👇 But now, with Firefox 138 all major browser engines support import attributes to import JSON from within your ECMAScript modules. 👇 ✅ Chromium: 123+ ✅ Safari: 17.2+ ✅ Firefox: 138+ (released 2w ago) PS. This syntax works in modern Node.js, too!
// Import Attributes
import data from "./resource.json" with { type: "json" };
512334
Roman Liutikov @romanliutikov.com · 14/05/2025
ooh now I get it, ok, I got an impression that RSC's model is not limited to server->client but wasn't sure since everywhere I read it's explicitly mentioning that interleaving is a no no
100
Roman Liutikov @romanliutikov.com · 14/05/2025
afaik this is also doable in RSC, just that the server component must be passed as a prop to a client component
100
Roman Liutikov @romanliutikov.com · 14/05/2025
Having server as a shell with client components at leaves makes a lot of sense, and it's easy to understand. I don't know electric well, but this demo demonstrates the idea electric.hyperfiddle.net/tutorial/dir... and I think it's a valid use cases as well.
100
Roman Liutikov @romanliutikov.com · 14/05/2025
I'm working on Clojure port of RSC, more info in these blog posts romanliutikov.com/blog/towards... romanliutikov.com/blog/towards... not sure if it makes sense to differentiate between backend languages for rsc, but it's interesting to see how those concepts are shaped by different platforms
1102
Roman Liutikov @romanliutikov.com · 13/05/2025
Clojure port of React's server components is coming along nicely, this update brings streaming SSR, route prefetching and more romanliutikov.com/blog/towards...
romanliutikov.com
Towards React Server Components in Clojure, Part 2 | Roman Liutikov, Software Engineer
A journey on bringing React Server Components to Clojure JVM, as a part of UIx library
131
Roman Liutikov @romanliutikov.com · 09/05/2025
Someone asked me to print a couple of pages recently, I spent an hour figuring out how to connect and then print on both sides of a paper correctly 🤦
030
Roman Liutikov @romanliutikov.com · 09/05/2025
Thanks!
010
Roman Liutikov @romanliutikov.com · 08/05/2025
maybe that's my bubble, where do you get the data from?
110
Roman Liutikov @romanliutikov.com · 08/05/2025
is that mentality still holds true among devs who came to frontend in the past ~5 years? I'm under impression that folks just don't think about it anymore and use frameworks to get their jobs done
100
Roman Liutikov @romanliutikov.com · 08/05/2025
yeah that's what I mean, should add an example with props passing, thanks I was thinking more about Electric Clojure framework here, which allows arbitrary composition github.com/hyperfiddle/...
github.com
GitHub - hyperfiddle/electric: Electric Clojure: full-stack differential dataflow for UI
Electric Clojure: full-stack differential dataflow for UI - hyperfiddle/electric
100
Roman Liutikov @romanliutikov.com · 08/05/2025
thanks! good point, I'll redact that missinfo
000
Roman Liutikov @romanliutikov.com · 08/05/2025
in this case with clojure/jvm the implementation becomes more straightforward because of shared memory concurrency available on JVM, + immutability it almost feels like ideal execution env for React's model
000
Roman Liutikov @romanliutikov.com · 08/05/2025
thanks! Yeah, I wish there would be a formal spec for implementers, but anyway it's a real fun to see how tech in language X can be applied and transformed in language Y
100
Roman Liutikov @romanliutikov.com · 07/05/2025
😅 thanks!
010
Roman Liutikov @romanliutikov.com · 07/05/2025
Started working on Clojure port of React’s Server Components. The first pass is done, things looking good so far, more details in the blog post romanliutikov.com/blog/towards...
romanliutikov.com
Towards React Server Components in Clojure, Part 1 | Roman Liutikov, Software Engineer
A journey on bringing React Server Components to Clojure JVM, as a part of UIx library
481
Roman Liutikov @romanliutikov.com · 22/04/2025
holy moly, o3 is able to decompile a pile of generated JS from cljs source back into perfectly readable and working program, with a single minor issue the code uses a bunch of macros that generate lots of code: 150 LOC of cljs comes out as 450 LOC in js gist.github.com/roman01la/6b...
gist.github.com
OpenAI o3 decompiles JS generated from cljs sources back into ClojureScript code
OpenAI o3 decompiles JS generated from cljs sources back into ClojureScript code - decompiled.cljs
000
Roman Liutikov @romanliutikov.com · 20/04/2025
Worked on a fun little project to make a coding sandbox out of Modal's serverless platform and VS Code Server. Modal is great: scales fast, has access to GPUs, usage based billing sandbox.learn-modern-clojurescript.com
010
Roman Liutikov @romanliutikov.com · 06/02/2025
how do you even find energy to write blog posts? :)
120
Roman Liutikov @romanliutikov.com · 06/02/2025
Spent half of the day working in Cursor Composer on a small simulation to test Goal Oriented Action Planning for game AI. Maybe I'm using it wrong, but the further I went, the slower it made progress. demo goap.roman01la.workers.dev code github.com/roman01la/mi...
140
Reposted by Roman Liutikov
ading.dev @ading.dev · 31/01/2025
I got Linux running in a PDF file using a RISC-V emulator. PDFs support Javascript, so Emscripten is used to compile the TinyEMU emulator to asm.js, which runs in the PDF. It boots in about 30 seconds and emulates a riscv32 buildroot system. linux.doompdf.dev/linux.pdf github.com/ading2210/li...
12311129
Roman Liutikov @romanliutikov.com · 31/01/2025
The hook is using resize observer to watch for element size changes, I don’t think it may cause performance issues.
100
Roman Liutikov @romanliutikov.com · 28/01/2025
Does it work together with Cursive? Sounds like they could conflict 🤔
100
Roman Liutikov @romanliutikov.com · 28/01/2025
It’s really sad that Cursive is one person closed source project
010
Roman Liutikov @romanliutikov.com · 28/01/2025
I have only two things in mind: 1. IDEs should be able to consume JS/TS from cljs projects to provide autocompletion and docs, similar to how Java is treated currently in Cursive for example 2. Google Closure compiler lagging behind is annoying
210
Roman Liutikov @romanliutikov.com · 28/01/2025
State of ClojureScript 2024 survey results state-of-clojurescript.com
state-of-clojurescript.com
State of ClojureScript 2024 Survey
120
Roman Liutikov @romanliutikov.com · 27/01/2025
👀 deepsickkk github.com/ggerganov/ll...
github.com
ggml : x2 speed for WASM by optimizing SIMD by ngxson · Pull Request #11453 · ggerganov/llama.cpp
Motivation This PR provides a big jump in speed for WASM by leveraging SIMD instructions for qX_K_q8_K and qX_0_q8_0 dot product functions. Surprisingly, 99% of the code in this PR is written by De...
000
Roman Liutikov @romanliutikov.com · 27/01/2025
Building a complex rich app? No need for it. A website with dynamic islands? Do you *really* need all that complexity?
000
Roman Liutikov @romanliutikov.com · 27/01/2025
The whole “use next/ssr” drama is so annoying. Vercel is not doing any good not to the community nor to businesses, sigh www.reddit.com/r/reactjs/s/...
reddit.com
From the reactjs community on Reddit: X/BlueSky: React recently feels biased against Vite and SPA
Posted by Jimberfection - 94 votes and 58 comments
110
Roman Liutikov @romanliutikov.com · 27/01/2025
I love how easy it is to replicate things that require Babel plugin in JS with a macro (user space) in Clojure. Just updated cljs-worklet library to support React Native Reanimated 3.x github.com/roman01la/cl...
github.com
GitHub - roman01la/cljs-worklet: Run ClojureScript functions on a worklet thread in React Native
Run ClojureScript functions on a worklet thread in React Native - roman01la/cljs-worklet
000
Roman Liutikov @romanliutikov.com · 25/12/2024
Merry Christmas 🎄
070
Roman Liutikov @romanliutikov.com · 17/12/2024
hear me out, making hooks order depended was a terrible design decision in React
051