Over the past decade, the team at Rec Room poured itself into building a fun and welcoming place for people from all walks of life. Over 150M players made over 500M friends and logged a cumulative 68,000 years in Rec Room. Despite the friendship and love our community has shown us, we couldn't make the business work. With a heavy heart, on June 1st, 2026, we're closing our doors.
I joined Rec Room early as we formed our user-generated content (UGC) org and never left. I started by building Circuits, our in-game multiplayer-synchronized scripting system, and eventually grew into the principal tech lead for the 60-person organization. When we decided to shut our doors, I was offered the chance to stay on and help with the transition.
Sunsetting a beloved product is a problem most people never have to solve, and there isn't much written about it by people doing the work. So for anyone who finds themselves walking a similar path, here's what it takes to give a beloved product the ending it deserves.
The business and backend teams handled accounts and economy. For the client side, my mental framework was simple: "Rec Room will be an example of an ending done right." Our players put their heart and soul into the product. They took ideas which only lived in their heads and brought them to life. How could we make those creations live on in a way that made our players proud?
The obvious answer was exporting UGC content in standard file formats. Those files would be here long after Rec Room was gone. Many of our players are young. I imagined them opening their creations a decade later and feeling a spark of joy: "I made this!" More industrious players may even find a new life for their creations by importing them into other platforms.
Jamie McDuffee put the UI in place before the export tools existed behind it: a shell of what players would see and do. In parallel, our chief creative officer drafted the message to the community. The words players read and the tools they used were shaped by the same intent.



Years earlier, I'd learned to write the internal blog post for a feature before any code. This forces you to describe the player's experience in concrete terms: what they see, what they do, what they walk away with. The tech then has something to serve. Running the shutdown this way framed engineering decisions around player inputs and outputs from day one, rather than retrofitting them at the end.
A graceful ending is fundamentally about the player experience. The way to build that is to start with what the player feels and let the tech follow.
The systems we'd built over the years were complex, and the people who built them weren't around. As we dug into room export, we kept hitting things no one on the team fully understood.
In my role as a principal tech lead, people assume I always have answers. "He knows how everything fits together." "He's seen problems like this before." For years I've waited for the time to come when that would be true, but that moment never arrives. Instead the job is more about showing up and saying, "I don't know, but we'll figure it out together."
Once you accept that you don't have answers, the next question is how to make progress anyway. We didn't do any grand planning for this work. Instead, we used iteration as a guide, following a rough progression that allowed us to tackle unknowns from simple to complex:












This progression was tested when we hit the UV generation code. It was riddled with undocumented math and non-specific variable names like mat and offset. We also had to work through a jungle of material options that accumulated over a decade. Each of our three stress-test rooms had unique material challenges and were too complex to debug directly.


















When you hit unknowns you have to adjust course. The real rooms were large and made isolated debugging difficult, so we built a test room with a representative set of configurations. I grabbed a desk next to Adam Dormier and we worked through the issues over three days. We'd export the test room, compare it to the game, change one thing, and repeat. We fixed inconsistencies one-by-one until we had a pipeline that could handle anything we threw at it.



Late in the project, Adam and I discovered materials were still broken for legacy rooms. Rooms built before 2020 had a different versioning system, and we'd need to port it into the export pipeline. The alternative was leaving a few years of creations behind. We'd always known this was a problem and costed the work at 1-2 weeks back when we were a full studio. With the deadline closing in, we sat down together and worked through it from morning until dusk on the last day before launch. It worked on our test rooms, but we couldn't guarantee stability everywhere, so we shipped it as an optional toggle in case it caused issues.
We launched room export a week after the "School's Out for Rec Room" announcement. Our observability stack was already disabled for cost reasons. To compensate, we were hands-on with players. We opened a Discord channel for export feedback, another for bugs, and a final one for general discussion. The export developers read every message in these channels over the next couple of weeks.
By reading every Discord message, the work became something human. We were grateful for every player who ever built anything in Rec Room and this was our last chance to show it.
A couple of us focused on bugs while the others handled top requests. We prioritized the bugs using a heuristic of ease and volume. We fixed most bugs that multiple players experienced. If only one player experienced a bug, we only fixed it if it was easy. With a small team, responsiveness from the reporter became our tiebreaker. A player who replied quickly to follow-up questions was easier to help, and we leaned into that.
The feedback was overwhelmingly positive, but one point we saw consistently was that players wanted to export their avatars in addition to their creations. It made a lot of sense. Exporting your creations was great, but it didn't reach every single player the way the avatar did. The avatar is a piece of your soul in digital form.
To do right by our players, we needed to build one last export feature.
Avatar export followed a similar progression. We were able to use AI code generation to get a pipeline in place in one shot by referencing room export as context. The code had some basic flaws and it wasn't pretty structurally but enough to get us going. We rewrote the AI's output to match the style, resolved basic shader hiccups, and then used more specific prompting to create shaders which baked Blender versions of our materials. In particular, having one working shader to use as context for the next ones was a huge help. Avatars only required exporting a single object so the test matrix was smaller than rooms, and the plan scaled accordingly:






We built Avatar export with the community. Developers communicated directly with players in Discord, posting screenshots of our progress from the Unity editor. This ensured we provided everything players needed. It also made the work fun. We shared the excitement of building something new one last time.
If there's one thing I hope you take away, it's that an ending is the same as any other project: start with what the player feels, accept that you don't have all the answers, ship the smallest thing that works, and let the people you're building for tell you what's missing. We started from the player and iterated into a graceful shutdown.
A decade is a long time to spend on one product, and I didn't expect the last chapter to look like this. But there's something clarifying about working without a next quarter. You're just trying to do right by the people who showed up.
Thanks to Jamie McDuffee, Adam Dormier, and everyone on the team who stayed to build the off-ramp. It's been an honor to work on a product that has meant so much to so many people and I hope the export tools crystallize some of that magic for years to come.

P.S. If you liked this post, and you'd like to hire some of our talented team, please check out Rec Room Grads.