Firefly III with James Cole

Firefly III with James Cole

Jul 25, 2026

Scott Keck-Warren James Cole

In this episode, Scott talks with James Cole, creator of Firefly III, an open source personal finance manager. James explains why he built Firefly III after graduating college with student debt, how the rule engine automates transaction categorization, importing bank data with CSV files and third-party connectors like enable banking and GoCardless, and how to get started without importing years of history.

Links:

James's Links:

Scott's Links:

PHP Architect Social Media:

Subscribe to our magazine: https://www.phparch.com/subscribe/

Partners

This podcast is made a little better thanks to our partners.

Displace

Infrastructure Management, Simplified Automate Kubernetes deployments across any cloud provider or bare metal with a single command. Deploy, manage, and scale your infrastructure with ease. https://displace.tech/

PHPScore

Put Your Technical Debt on Autopay with PHPScore https://phpscore.com/

CodeRabit

CodeRabbit - Cut code review time & bugs in half instantly with CodeRabbit. https://www.coderabbit.ai/

Music Provided by Epidemic Sound https://www.epidemicsound.com/

phpc #php #communityCornerPodcast #podcast #FireflyIII #PersonalFinance #OpenSource

Transcript

Scott Keck-Warren Scott Keck-Warren 0:10
Hello developers, and welcome to the PHP Architect Community Corner, where we have conversations with members of the web development community. I'm your host, Scott Keck Warren, and today we're talking with James Cole about Firefly 3. James Cole started developing Firefly 3 more than 10 years ago. Since its inception as a small personal finance tool, it has grown to one of the most popular PHP personal finance tools around. When not working on Firefly 3, James is a security architect for a Dutch IT security company working on secure network protocols. He lives in the Netherlands where he spends his free time apart from Firefly 3 on cycling and photography. Thank you so much, James, for finding some time to talk to us today.
James Cole James Cole 0:49
Of course. Very nice to be here. Thanks.
Scott Keck-Warren Scott Keck-Warren 0:51
Yes, absolutely. So I think like I want to start out and just ask you, what is Firefly 3 and what is the problem that it's kind of solving?
James Cole James Cole 1:01
Well, so the problem that it started solving when I started Firefly 3 was, as most developers do, I think, my own. So basically I got out of college from the university with a pretty hefty student debt. Sorry. And I had no way of really managing that debt. You know, there's GnuCash or GnuCash. There are all kinds of tools, but not really something simple, something with a chart, something with, you know, categories and budgets. So I started developing it myself. And at the time, I wasn't really allowed to, I wanted to put it somewhere online. I wanted to use Git and GitHub was free if you made it open source. So I made it open source and that's basically where we are right now. And for me and for the people that use it, it solves the problem of having a fairly transparent view of your finances without becoming too much of an accountant. application. So it tries to be a simple, a clear view without too much fuss, giving you insight in your finances.
Scott Keck-Warren Scott Keck-Warren 2:06
Yeah. And so I'm, the reason that like I came across it is that like me and my partner are, we always have like these like cycles of like, oh, we should do better at budgeting, right? We should budget better. We should budget better. And then we always go out and we look at all these websites and the websites are like, oh yeah, you can like join up and do this. But like a ton of them, first of all, don't support partners. There's no, there's like, it's like one user. And then like the ones that do, they like, they cost money. And then we sign up for one and then it just like slowly gets worse over time until it's unusable. And like the thing I was always, I was like, oh, this fits the bill because like I can just do whatever I want to it. 'Cause I know PHP and I know how to access the database and I can just get whatever I want out of there. So it's like a really cool like solution, but I think it's approachable for my partner who's not technical essentially. So.
James Cole James Cole 2:53
Yeah, yeah, no, that makes sense. And that was also something that I was always going for. So it's true that it's not entirely multi-user yet. So I've got some work to do there as well. But also you see that paid financial apps, at least I'm always very skeptical, right? So you're paying for an application to manage your finances. So you're one zero behind already because you're paying more money and the problem's not really solved yet. Plus there's always the feeling that I have, you know, is this program not trying to rope me into their ecosystem and keeping me there? So what incentive does a paid program have to help me solve my financial problems? Because when I do, I would stop using it. So I've always been skeptical of paid programs, although I must say that Mint and others are actually pretty good. So no hard feelings there. But for me, you know, doing this for free and bringing this out for free was always a part of why I started it.
Scott Keck-Warren Scott Keck-Warren 3:50
Yeah. Yeah. And, and like, I, I come at it from like a, like we, 'cause so I, I'm, I was in the same boat you were where I had a bunch of financial debt coming out of college. And then that's when I was like, oh, like I have to budget every penny. You know what I mean? I was like, really?
James Cole James Cole 4:04
Yeah, exactly.
Scott Keck-Warren Scott Keck-Warren 4:05
Yeah.
James Cole James Cole 4:06
Yeah.
Scott Keck-Warren Scott Keck-Warren 4:06
Yeah. And, or else I was just like losing, you know, I was like, why did I spend $50 in takeout food the last week? Yeah. And, but it was like just like a constant like thing for me. And so like, I was like, big into this for a while, which is trying a bunch, but it was always like somebody, like some small company started up, they were amazing. And then they got bought by the bigger player and then they became crummy. And it was just like that. And so like, this is nice because you don't have to worry about that kind of problem, I guess is, yeah.
James Cole James Cole 4:33
No, it's true. I remember when I started Firefly 3, I was very adamant about not having data importers and having people do everything manually because, you know, when you have to enter your transactions, at least that was it for me, you really feel where the money is going, you know, you have to keep entering these transactions and you're, oh crap, I really paid that for this. Wow. Okay. So that's also a lesson in itself and it's very overbearing to do that to your users. So at some point also, because it was a technical challenge, I started building the data importer and the first moment it worked, I started using it myself, you know, wait, this is actually really easy and it works to help and keep an eye on your finances. You can automate stuff, which is something I'm always a fan of. And from there, you have to keep it light somehow, right? So what you're saying when you're working on your finances, it's not a nice thing to do. It's not the right word, but there's an obligatory feel to it. You know, you have to fix this. You have to do this, which is true and which is fair. But still, if you at least can make the experience a little less friction, with a little less friction, then Yeah, you help people with their finances. Yeah.
Scott Keck-Warren Scott Keck-Warren 5:53
So, so, and so I keep meaning to ask, but I keep talking about something else. So like, where did Firefly 3 come from? Like, why are we, why are we at Firefly 3?
James Cole James Cole 6:01
Very good. So no, I started a few years ago with just Firefly and I named it Firefly, I think because it was also an F for finance. So let's go. And I think after a year or something, I started programming Firefly 2 in Groovy, which is a Java dialect. Because at the job I had at the time, we were doing a lot of Groovy and it sounded cool and let's see what happens. But it was pretty much a terrible choice for a web app. I'm not sure if I'm picking on people now, but I thought it was a terrible choice. So I basically started over again in PHP and built 5 by 3. I named it 3 because I thought the 3 eyes would look cool. And basically that's where we were at the time. I remember for a while I tried to keep the version number at 3.something.something, but when you also have to, you know, or you want to adhere to SemVer or something similar, then that doesn't really work. But the name kind of stuck and you see Firefly and Firefly 3 used interchangeably, but I tend to be a stickler for Firefly 3 and use that. But yeah, that's basically where it came from.
Scott Keck-Warren Scott Keck-Warren 7:11
There's, there's definitely like an, like an, uh, search engine optimization piece to it. Like, I don't think many people are sitting on Firefly III. You know, so it's probably like a really good, good way to like get, get found on stuff. Um, so like—
James Cole James Cole 7:22
Works as well. Yeah. Yeah.
Scott Keck-Warren Scott Keck-Warren 7:24
Yeah. Yeah. Okay. Um, and so, so let's say that like, I'm, I'm interested in using this for, for myself and my partner. Right. Um, and so I have access to, you know, compute essentially. And so the idea kind of is like, I'm going to download this to my compute and set up a database and let it run. And then, and then what do I have to do after that? Like, what is, what is like the next steps after I do the installation?
James Cole James Cole 7:47
Well, there's a few. What most people do is try to import a lot of history. So, you know, let's go back 3 years, let's go back 5 years, put everything in Firefly and see what I can learn from all that data. But in my experience, that doesn't really bring a lot of knowledge. You know, you've got the same financial data you had already, just with fancier graphs or charts. So that doesn't really work. So what works for most people is start at any moment, doesn't really matter. Go back at least, at most a month. So let's start, let's say that you started the 1st of July or maybe the 1st of June, and then just keep it up. You keep entering transactions or you keep importing transactions. You create budgets and categories and tags and whatever you want on the fly as you go along. And that helps you both grow into Firefly 3 and grow into your own finances. If that's the kind of proactive and attentionful way that you're looking at your money, then, well, the application should grow on you and the features that it has should grow on you as well. But also you get a clearer, a more and more clear picture of your finances.
Scott Keck-Warren Scott Keck-Warren 8:52
Okay. And so like if I was importing the data, like what would that look like? Do I go to my bank's website and download? Because like there's like OV something or other, right? There's like some standard format. Yeah. Yeah.
James Cole James Cole 9:05
So there's a few solutions right now. It started all with a CSV file. So basically comma-separated value file. That most banks offer. And there's a little repository with basically configuration files. So you can tell the importer what to expect in a file, which field is what, how to import stuff. That's something that there is. But there are also third-party connections. So basically you can use Enable Banking or you can use GoCardless or a variety of others. They will connect to your bank and then download the transactions directly. So you do have to trust a third party to do the processing for you. But you can use a lot of services to connect to your bank and then import the transactions into 553. So it's a pretty smooth experience. You can automate it, you can set up a cron job to do it for you every night or twice a day or whatever you want. And then use the built-in rules to make sure that everything has the right description and the right category and stuff like that. So with your first question, if you start setting it up, you set up the data importer and you just let it run. It should slowly start importing your transactions, show you what's happening, and you've got to do some fine-tuning when it comes to transaction descriptions and stuff like that, but slowly but surely your account would be there.
Scott Keck-Warren Scott Keck-Warren 10:24
Yeah, I find that like, that's always like the hard part of these is getting started and like, and I agree with you, like you don't want to go and say like, I'm going to pull in 5 years worth of data because there's just going to be so much, especially like for us, there's just like so many like, what was this? I have no idea. You know what I mean? Just like, airport coffees and just random stuff like that. You just can't even figure out for the life of you. Um, so that's all really— yeah. So that's, that's all really interesting. We'll be right back with James after this word from our partners. As a programmer, you know that code reviews are critical, but are also time consuming. CodeRabbit acts as your AI copilot, providing instant code review comments and potential impacts of every pull request. Beyond just flagging issues, CodeRabbit provides one-click fix solutions and lets you define custom code quality rules using AST grep patterns, catching subtle issues that traditional static analysis tools might miss. CodeRabbit reviews 1 million pull requests every week across 3 million repositories and is used by 100,000 open source projects. CodeRabbit is free for all open source project repos. Get started today at phpa.me/coderabbit. That's phpa.me/coderabbit. So is, is like, what is like the one feature that you're most proud of within Firefly 3?
James Cole James Cole 11:39
I think the rule engine is something that I'm pretty proud of. So at some point people said, yeah, I want to automate transaction descriptions, categories, source destination account information, stuff like that. So basically there's a bunch of triggers that you can set up. You know, a description is A, the source account is B, the amount is less than this or more than that. And then Firefly can do actions, you know, set the category, set a tag, delete a transaction, copy the transaction stuff like that. And that makes it very easy to, you can do a quick entry kind of a thing. You know, you have a keyword that you put into the description and the system will apply all of the categories and tags that you want. You can, like I said, clean up data imports. And it started as a very simple thing where you could only set or test the category, you know, after the description, but it's the rules are becoming more and more complex. And despite that, it works pretty well for most people to automate data cleanup and imports.
Scott Keck-Warren Scott Keck-Warren 12:43
Yeah. And like, from my perspective, like that's always like a big, like it has, it's a requirement for any of these kinds of like tools is that like, I have to be able to go, okay, well, when my Capital One bill comes in or my credit card bill comes in, it goes into here automatically. Right. Like, and cause like otherwise you're just categorizing that every month annoyingly.
James Cole James Cole 13:02
Yeah. And that's how it started for me as well. Also with the idea that, you know, if I do this myself, I know what I'm doing financially. But also at the end of the day, or at the end of the month, basically, depending on how often you want to do this, these kinds of recurring expenses, even if it's groceries, you know, every day or every other day, it gets very tiresome to categorize them every day, to update these descriptions every day. And if you can automate something like that, it doesn't take away from the control that you have over your finances and still gives you ease of use and, yeah. Yeah. Yeah.
Scott Keck-Warren Scott Keck-Warren 13:39
So, okay. So like, what is a good way that like, this is obviously an open source project. It sounds like it's a labor of love for you. Like, what are ways that people can help and support the project?
James Cole James Cole 13:51
Very good. So I'm right now, I'm looking, I'm building a new layout. So I've used a dashboard admin kind of a template. It was a, it's the same layout that Pi-hole uses, by the way. So if it looks familiar, you know why. It's a standard open source template that everybody can download and everybody does. And it gives you basically the building blocks to build a dashboard, a layout with cards and everything. I'm rebuilding it, reimagining it. And right now it's the old one with a new lick of paint. So that's something that people are always free to help on to see if we can, well, basically jazz it up, see if we can use the API instead of internal points in the code, see if we can use, well, more advanced ways of connecting to the database basically. Because there's still a lot of spaghetti code in Firefly 3. But also for the data importer, if you get it up and running, if it works for you, tell me how. The truth is that importing data into Firefly with all the banks that are out there, with all the systems that are out there, it's still pretty complex. Everybody basically still has their own setup and it's difficult for me to see and to find out how people are using this. So the more you tell me, the merrier, because that helps me improve the product as well.
Scott Keck-Warren Scott Keck-Warren 15:09
Yeah, and I'll be doing that. Like my plan is to get it going here shortly. And so I will definitely try to give some information on that. Do you have issues open on GitHub that people could pull from if they want to help?
James Cole James Cole 15:22
Yeah, yeah. There's plenty of bugs open. There's a few big epics that I'm working on that are more informative. But yeah, there's plenty of small and large issues that people can pick up on. So that's absolutely possible.
Scott Keck-Warren Scott Keck-Warren 15:36
Yeah.
James Cole James Cole 15:37
Okay.
Scott Keck-Warren Scott Keck-Warren 15:37
So I do have to like, unfortunately let you go for today. It's been great, really great talking to you. Is there anything that you want to direct our listeners to before we let you go for today?
James Cole James Cole 15:46
Well, the CEO optimization was a thing that hit me. So if you just Google Firefly 3 or Firefly III, you should be able to find either the website or the GitHub project. Just go there, read up. If you have questions, I have tons of ways, tons of ways to to get in touch, send me an email, go to GitHub, whatever you want. And well, check it out. Thank you very much. Yeah.
Scott Keck-Warren Scott Keck-Warren 16:10
Thank you so much for your time.
James Cole James Cole 16:11
Yeah, absolutely. Thank you. And see you next time.
Scott Keck-Warren Scott Keck-Warren 16:15
Yeah, absolutely. I have to say another heartfelt thank you to James for all of his time, as well as for you for listening. If you're not already a subscriber, make sure you subscribe with whatever your preferred method is and make sure you leave us a comment as it does help other people people find us. Also, you can turn the automatic downloads on, which is really beneficial to everybody. Um, this is available both in an audio version on our website as well as a video version on our YouTube channel. This is Scott Keck Warren for the PHP Architect Community Corner signing off and reminding you to keep watching, keep reading, and keep coding.