11 October 2026

My Interview with Chris Johnson, the developer behind DJCJArcade

My Interview with Chris Johnson, the developer behind DJCJArcade

Welcome to the very first interview featured on this blog! Today, I’m thrilled to share an insightful conversation with Chris Johnson, the creator and developer of DJCJ Arcade—an exclusive MAME frontend built specifically for macOS. It was an absolute pleasure exchanging views, experiences, and technical ideas with Chris about the evolution of Mac arcade emulation, user experience design, and modern app development. Enjoy the read!

DJCJ

Hi Chris, thank you for taking the time to chat with me today! To kick things off, what motivated you to develop DJCJArcade from scratch as an exclusive frontend for macOS?

Chris: I’ve been using MAME in one form or another since the late 90’s. I’ve always been a Mac user and running MAME has generally been a bit tougher if you’re on a Mac. There were Mac builds like MacMAME (Thank you Brad Oliver) and MAME OS X (Thank you Dave Dribin) which included the actual MAME executable inside a GUI. Those faded away as MAME began to use the SDL framework. Of course MAME now has a more approachable interface inside of the app itself and some folks are perfectly satisfied with it and I have no problem with that. Philosophically, the MAME project is about historical preservation and documentation of the machines they have reverse engineered. And we know that usability and playability are “happy side effects.” I respect and appreciate the reason behind this stance. But that doesn’t keep me from wanting the MAME experience to be more approachable and more enjoyable. I used QMC2 for years and was always grateful that it existed. (Thank you, René Reucher; rest in peace.) Mr. Reucher fell ill for a number of years and stopped maintaining the project; Apple began transitioning to Apple Silicon, and running QMC2 started to become more difficult. Mr. Reucher returned to the project and did some updating, which was wonderful but he wasn’t able to get a native Apple Silicon version going 100%. I offered my assistance and some others did too. Some partially functional builds were passed around, but many parts of it didn’t work correctly and sadly, Mr. Reucher passed away. I believe it may have been you who eventually figured out how to fork QMC2 and make a full-featured Apple Silicon build which was awesome! This Apple Silicon port of QMC2 was definitely usable, but crashed in certain situations especially when I used my PS4 controller. I decided to download the whole repository and ask Claude to fix the bugs. I signed up for an Apple Developer account and installed xCode. I started giving Claude the crash reports and it made me a QMC2 build which ran more reliably. This was nice, but in the back of my mind I kept asking myself, “Is this it? Is this self-maintained QMC2 going to be the way I experience MAME in perpetuity? Even though there’s lots to like about QMC2, that question got me thinking. (To be continued in the answer to an upcoming question.)

What was your main inspiration for the app design? Was it based on the QMC2 frontend originally created by the late René Reucher - as you had mentioned? I can see many parallel ideas - in a very positive sense - am I correct?

Chris: I’m sure I derived some inspiration from QMC2. I don’t mean to throw shade at QMC2 when I say this, but to be honest, much of the inspiration that came from QMC2 was born out of my frustration with it. For many, if not most of its features, I would often think, “There’s got to be a better way to do this.”

QMC2

This is a good example. I like how powerful this is, but I also hate how obtuse it is.

Hahaha, I couldn’t agree more with this finding!

Chris: QMC2 made an attempt to allow you to manipulate the settings through this style of interface. However, it raises the question: was this interface designed because editing ini files was considered too hard or too complicated? If this was considered a solution to that problem, I think the cure may have been worse than the disease. What the heck do those buttons do? What does “reset to global value” mean? I know the answer to that now, but it took me a while to figure it out. And where in the ini chain are they affecting the settings? Where are those ini files on my hard drive? With this system, in a way, I’m worse off than I would be if I was just editing ini files in a text editor myself. At least then I would be learning how things actually work under the hood. Since, at the end of the day it’s all just ini files, I figured, “Why fight it?” Let’s just come up with a good way to deal with ini files and let’s get the right tools working so we can be comfortable operating “under the hood.” It was this and other similar experiences with QMC2 that got me thinking about a new and better approach to solve usability challenges.

For DJCJ Arcade, I probably used iTunes, Apple Mail, and Apple Messages as a guide for how I wanted the UX to be.

Please let me tell you that the app is truly fantastic - the functionality is spot on, the system integration feels native, and the performance is remarkably smooth. How did you approach the daunting task of writing such a comprehensive frontend from scratch?

Chris: Specifically as it pertains to “the system integration feels native, and the performance is remarkably smooth,” that was always the objective from the get-go. When you use QMC2, it’s obvious it’s not a native Mac app by looking at the pulldown menus and dialog boxes. There’s nothing wrong with that and, indeed, QMC2 runs on Windows too. That’s terrific, but it does come with compromises. Since I was kind of making this for myself, and I knew that I would probably be using a Mac for as long as Apple keeps making them, I decided that I wanted this front end to embody the Mac experience in any way I could. I wanted it to look aesthetically pleasing and to be as easy to use as possible. So that truly is the foundational philosophy of the app and guided every decision along the way.

Now I'd love to know: what are your top 3 favorite things about DJCJArcade? My personal top three are (1) the Launch Codes tab (actually quite the opposite of how QMC2 tackled it), (2) the Software list integration, and (3) your approach to integrating with Homebrew. What would be your top three?

Chris: No.1 - I’m very proud of the Launch Codes channel. While many of the app’s features are derivative, (collections are like playlists in iTunes,) the Launch Codes are truly my idea. Or at least I think they are. ;-) I always struggled to understand MAME’s ini files, their hierarchy, and the way they all work together. I can’t tell you how many hours I’ve spent tearing my hair out trying to figure out why a game is exhibiting certain behaviors and not being able to find the ini file that’s causing it. MAME’s ini system is complicated and I don’t love it but it’s the system we all have to live with. I had two main goals: 1.) Make it easy to edit ini files. 2.) Make the process intuitive so that as the user edits the ini files, he begins to naturally learn how they work. So Launch Codes are a way to help the user wrap their head around how the ini files work and what their hierarchy is, easily edit them and switch between different versions, and to be able to clearly see, with color-coded text, the final manifestation of how all the ini files work together to make the final configuration that will be in effect when the machine is launched. This manifestation can be seen both in ini format as well as the command line. This command line can be copied and pasted into terminal and launched manually if the user wishes to. And if something isn’t working right, the user could paste that command line into an AI chat and get advice on what to change.

So, we are having an identical no.1, and amazing that you came up with this idea! Next?

Chris: No.2 - I have some friends that I want to share MAME with. We all know that procuring ROMs is a journey in and of itself and expecting friends to try to manage ROM sets is a bridge too far for many. Plus, the complete set of ROMs & CHDs, Software list ROMs & CHDs, EXTRAs, and multimedia currently weigh in at over 4.45 TB and 99.9% of it is stuff the average person has no interest in. With DJCJ Arcade, you can create a collection and populate it with your friend’s favorite stuff. Then you can “Export Collection to Zip.” This will pluck all the pieces and parts out of the full collection as well as EXTRAs and multimedia, and create a set of folders that look and behave just like the full set except that they only contain the files necessary to support the machines you selected in your collection. This allows your friend to run the setup wizard and get up and running very quickly with just the stuff they want. I’m really happy with how this feature turned out, but it’s easy to not realize it’s there.

OMG - I even haven’t seen this before - immediately need to dive into this! Further to no. 3 - I’m even more curious now!

Chris: No.3 - It wasn’t an easy feature to get working, but I’m also very pleased with DJCJ Arcade’s full support for the video snaps in Mutimedia. Unfortunately, video snaps are encoded in H.264 High 4:4:4 Predictive which MacOS cannot decode by any native route, hardware or software, so the app embeds FFmpeg (decode only, LGPL, dynamically linked as frameworks) and plays the clips live. I was always very frustrated that even though QMC2 had a configurable path to video snaps, they never played. Those video snaps are terrific to have when browsing through the machines.

Coudn’t agree more! I remember that in QMC2 times, I had to re-encode the videosnaps so that they run properly in macOS - many thanks for this! Anything else?

Chris: No.4 - I know you only asked for three, but the other feature I’m really happy with is the “Launch Decisions.” With this, you can make tweaks to the settings in the moment without editing the ini files at all. Sometimes you want to run the machine full screen and sometimes you don’t. With Launch Decisions, you can just tick or untick a box and get what you want without getting into the ini at all. These Launch Decisions can be added, modified, deleted, or hidden in the settings. The default install comes with a few useful ones, but you can add your own or get rid of the ones you don’t like.

And of course, I even haven’t seen this idea, that’s brilliant for testing as well and clearly worth mentioning. - Now let me address two topics that may raise difficulties for some users (truly not for me): You expressly disclaim that the app is vibe coded and that you keep the source closed. First, how was your experience with vibe coding? Second, do you want to explain your decision to keep the code closed - at least for the time being?

Chris: I started my vibe-coding journey by rebuilding my website. I’ve had an ASCII art collection on the internet since 1994 and I always wanted it to have a relational database as its back end, but I lacked the programming chops to pull it off. In May of 2025, I started playing around with various chat bots and managed to get Grok to help me rebuild the site from scratch. It wasn’t easy, mostly because I didn’t know what I didn’t know. But also because AI vibe coding was relatively new. If I were starting that project now it would be WAY easier. Eventually, I launched the site which was very gratifying. I was able to achieve all of my objectives and I’m really pleased with how it turned out. That experience made me realize that, with AI’s help, many of the things I always wanted to do but never could were now possible.

…which brings us to DCJCArcade, I guess

Chris: For several months, I just imagined what I would like a MAME front end to be. I started a new git repository and started having a dialogue with Claude about it. I spent about a month having it help me write planning documents. I decided to think big. Just because an idea seemed ambitious didn’t mean I couldn’t document it. So that’s what I did. I just started explaining my “pie in the sky” ideas no matter how unattainable I thought they might be. I always asked Claude if it had any questions for me or if there was anything I was saying that needed clarification. It would always come back at me with lots of questions. Some of the questions had obvious answers, but most of them exposed gaps in my thinking about how things should work. I found this process really valuable. The more questions it asked me and the more clarification I could give about how things should work, the clearer the ideas became and the more successful the results were.

Very inspiring! How about your approach to closed source then?

Chris: The main reason that I would like to keep the source code closed for now is that I have seen too many examples where a bad actor steals someone’s work and presents it as their own, taking the credit (which I’m less worried about) and profiting from it (which is very much not okay.) This happens a lot on YouTube as well. I feel that, at this very early stage, no one really knows DJCJ Arcade exists yet, and very few people are using it. I think it would be wiser for DJCJ Arcade to get a name for itself first and get some semblance of a community using it and engaging with bug reports and feature requests on Github before opening the source.

Understood. Finally, what are your future plans for DJCJArcade? Are you considering expanding its distribution - for instance, via Homebrew integration, similar to MAME?

Chris: I never thought about Homebrew integration. That’s an interesting idea! I guess my future plans are to take great ideas and bring them to fruition. I feel like Mac users have suffered long enough and it would be fantastic if I could make the MAME experience better on the Mac than it is on any other platform. I think that’s achievable.

As far as specific additional features go, these are some ideas I’ve had. They are definitely not fully formed ideas and I’m not sure how feasible any of them are...
1 - Support for artwork and assets that are outside the realm of the “official” MAME EXTRAs and multimedia collections such as those you might download from https://emumovies.com/ and similar.
2 - The ability to launch an interface similar to attract mode for arcade cabinets. This could come in the form of a method by which DJCJ Arcade would automatically generate all of the Attract Mode configuration data from a collection.
3 - The ability to launch games in RetroArch from DJCJ Arcade.

That’s what I call a vision! Thank you so much for your time, Chris, and for sharing these insights! I am confident that many Mac users deeply appreciate your dedication and hard work in bringing DJCJArcade to life.

Chris: Thanks to YOU for your wonderful and informative blog, your interest in MAME on the Mac, all of the fantastic contributions you’ve made to the MAME community (MacOS and otherwise) and your willingness to check out DJCJ Arcade, give it a try, and make super-valuable suggestions to make it better.

No comments:

Post a Comment

Comments are welcome - spam and ads will be removed! Please leave a name or a pseudonym, thanks!