Telebugs REST API is coming along nicely.
A few customers are already testing it before the public release. If you’re interested in trying it, send me a DM.
P.S. Documentation is already available online.
Devil's in the details.
The counter was stretching the Grouping Details icon abnormally. I never liked how it looked.
Changed it to a clean badge treatment. Feels much more balanced now.
Switched all native browser dialogs in Telebugs over to <dialog>.
The native ones are simple and require nothing extra. The modern approach just makes it easier to style them and keep the experience consistent with the rest of the app.
Felt like the right move for where the project is now.
I'm removing checkboxes that save instantly and replacing them with proper toggles.
I used to mix both patterns, and it created this subtle inconsistency: some things saved on click, others didn't.
Now I'm being strict about it:
Checkboxes = forms you submit
Toggles = actions that happen immediately
Border radius on buttons was the last thing still doing its own thing.
I moved it into a single CSS variable and made the treatment more subtle. Now every border follows the same rule instead of having its own opinion.
Before & After 👇
The final inconsistency is often the one you stop noticing, until it’s gone.
I chose yellow backgrounds and orange buttons for the modals in Telebugs, even though those colors weren’t used anywhere else in the UI.
Asked three different AIs what they thought. They all gave the same answer: don’t do that. Stay consistent.
I’m changing it now.
Got a support email that stopped me for a second.
Someone was confused why an error still showed “1 minute ago” days after it happened.
Turned out the relative timestamp had been cached the very first time the report was opened. After that, it never updated again.
Just fixed it by moving relative times to the client. Now they stay accurate and keep updating automatically, no matter how aggressively we cache the rest of the page.
As I was editing this testimonial, my 4-year-old daughter walked in and saw it:
> Papa, who's that?
> That's my customer
> That's your customer? He's really happy
He is 😜
Sometimes an “improvement” creates problems you don’t see until real data hits it.
A customer reported that after updating to 1.15.1, some of their events started failing with 500 errors.
The culprit turned out to be non-ASCII characters (things like box-drawing characters and emojis).
The change in 1.15.1 was meant to improve ingest reliability, but it introduced a path that didn’t handle binary data correctly in SQLite.
Fixed in 1.15.3. Grateful for the clear report.
Last week, a customer nearly left Telebugs because of a mistake I made at the design level.
Their queue database grew to 95GB in a single day. Their app was processing ~40,000 jobs daily, and I had designed the main ingestion job to carry large payloads directly in the job arguments. On SQLite, that combination became toxic - even with cleanup running on schedule.
Here's what went wrong, why SQLite made it worse, and the fix 👇
Monday morning. Wall of red errors after the weekend deploy.
You fixed the root cause... now you have to click Resolve 47 times?
Telebugs 1.15.0 fixes that: bulk resolve/unresolve in one click (works in project tables + All Errors). Also ~128× faster reports.
https://t.co/5O0JiStvWI
Hey folks 👋
Quick update from my side.
I keep getting Telebugs demo requests from random Gmail addresses. I reply asking about the project and company so I can spin up a proper instance... and then nothing (crickets)
Demos are free, but every one costs me real server time and money.
So I’m adding a small step: if you’re not on a business email, you’ll need to do a quick verification first.
Just trying to keep things sustainable while still offering free demos to people who actually want to use Telebugs.
Thanks for understanding.
Hit this while parsing crash reports in Telebugs:
> Hash.from_xml(xml)
# => "You don't have rexml installed. Please add it to your Gemfile"
Not a bug. Since Ruby 3.0, rexml is a **bundled gem**. It still ships with Ruby, but Bundler won’t auto-load it anymore.
The reason makes sense: lets the core team push security updates faster without tying them to full Ruby releases.
But for Telebugs, I care about ease of maintenance. Adding another explicit dep (even a "stdlib" one) goes against keeping things lightweight and simple to run long-term.
So I switched the backend:
ActiveSupport::XmlMini.backend = "Nokogiri"
Faster + I already had it. One less thing to think about.
If you're on Ruby 3+ and using Hash.from_xml in Rails, this is worth knowing.
Anyone else surprised by this change?
🎉 Exactly one year ago today, I launched Telebugs 1.0.0.
For years I wished there was something simpler, more focused, and truly performant - a self-hosted error tracker I could fully own and trust. After nearly a decade working on error tracking, I finally built it.
What started as a personal project has become something much bigger.
⚡️ #2 on Product Hunt (and #3 Developer Tools of the Week)
⚡️ 14+ releases (now on 1.14.x)
⚡️ Dozens of teams running it in production every single day
⚡️ Hundreds of messages from people who actually depend on it
I’ve been genuinely moved by the notes from people who took a chance on this from day one. You made year one special 🥹
Telebugs isn’t just an error tracker anymore - it’s become the simple, private, self-hosted tool I had always wanted: helping you catch bugs faster, own your data, and ditch SaaS subscriptions for good.
**Here’s to an even better year two**
I’ve got some exciting things coming (including features the community has been asking for). I can’t wait to keep shipping **with** you.
Thank you - truly - to everyone who deployed it, tried it, gave feedback, or just cheered from the sidelines.
If you’re running @TelebugsHQ (or thinking about it), drop a comment and tell me how it’s going. I read every single one.
Much love,
Kyrylo
20 seconds to load a single error report.
A customer who doesn’t write Ruby had enough of the gateway timeouts.
He opened Claude, traced the slow SQLite queries himself, found the exact culprits (bad indexes on frames + breadcrumbs loaded twice), and sent me a perfect patch.
Two composite indexes + one tiny controller fix later...
20,232 ms → 157 ms. 128× faster.
This is wild. Thank you, you’re a legend! 🙏
“Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.”
For months that “all” filter in the @TelebugsHQ error table felt necessary… until it just became noise.
So I removed it.
Added bulk resolving instead, and now you can select a few errors and resolve them right away. The table feels so much cleaner and actually useful. Way better flow.
Sometimes the best feature is the one you delete.