The TrackJS Blog
Sharing our experience building maintainable software, product development, debugging, and other interesting ideas.
The TrackJS Blog
Recent Articles
Catch JavaScript Errors from your Shopify Theme
Did JavaScript break my store? Monitor errors in your Shopify store with TrackJS and ensure the answer is "no"!
Why We Only Support JavaScript
We are unlikely to add additional language support to TrackJS. And it's not just because of our name!
The Dangers of Using VC Funded Companies
Learn from our mistakes: be careful when using VC funded companies as vendors or important parts of your stack.
5 Best Frontend Error Monitoring Tools
Compare the strengths and weaknesses for Frontend Error Monitoring tools. We'll look at the focus, features, and pricing of the top contenders so you can pick the platform the works best for you.
Profitability is Important
Unprofitable companies, like Flexport and Splunk, are a risk for their customers because they can radically change or close down entirely. What about TrackJS?
Saved Filter Notifications
Alerts and notifications have been part of TrackJS since the very beginning. Our standard notification options reflect our desire to keep things simple. Over time though, our customers have asked...
The State of Client-Side JavaScript Errors
As JavaScript has grown more prevalent on the web, so have JavaScript errors. Here are the top JavaScript errors from across the web, aggregated by browser, framework, and issue.
Avoiding Ad Blockers with Forwarding Domains
Large tech companies are monetizing and exploiting customer data in increasingly unpalatable ways. It’s no surprise that users are fighting back. It’s estimated between 25% and 50% of users are em...
Logging Errors in Web Workers
Release 3.8.0 of the TrackJS browser agent added support for Web Workers, which adds some awesome new observability to the background tasks of your web applications.
Hard-Won Lessons Building Maintainable Web Applications
I’ve built web applications for 15 years. Some have succeeded and flourished, others have crashed and burned. But I’ve learned some hard-won lessons along the way: techniques that correlate with m...
TrackJS for Node
TrackJS error monitoring, on your servers. We’re thrilled to announce official support for Node environments and the 1.0.0 release of our Node agent.
May 2020 Product Updates
The TrackJS team is hard at work polishing the product to make it even better at tracking JavaScript Errors. Here’s what we shipped this Spring.
Debugging Stories and Comfy Pants
There is one big advantage to us all working from home: comfy pants. No more dress code, no more business casual. You might not be wearing pants at all! Bugs don’t care if you wear pants, but your ...
Parsing Query Strings in .NET Core
We recently needed to parse and modify some query strings while building Request Metrics. Query string parsing has never been pleasant in .NET, has it improved in .NET Core?
Quarantined for COVID-19
These are strange and interesting times. Our best wishes to all the developers and communities around the world affected by the COVID-19 epidemic.
Building Request Metrics
We’ve been working on something big. We’re building Request Metrics, a new service for web performance monitoring.
January 2020 Product Updates
The TrackJS team is hard at work polishing the product to make it even better at tracking JavaScript Errors. Here’s what we shipped in January.
A New Look for TrackJS
It’s a new year and TrackJS has a new look. It’s smaller, it’s simpler, and it feels friendly–just like TrackJS. These minor refinements to our brand do a better job at emphasizing what we’re best...
November-December 2019 Product Updates
Two months in one! We’re wrapping things up for the year, but wanted to give you all an update on all the great things we’ve shipped in the closing of 2019:
Powerful Ignore Rules for Noisy JavaScript Errors
Ignoring noisy and external errors is important to understanding the health of your client-side applications. Third-party scripts, user extensions, content crawlers, and non-impactful errors create...
October 2019 Product Updates
We’ve got a big update about to launch for Ignore rules, but we still had some time to improve the little things last month. Here are all the things we launched:
A Dumpster-Fire Alert for Your JavaScript Errors
Do you work with an app that’s a dumpster-fire of errors? Wishing for an appropriate alert when you need to fight down the flames? Look no further friend. Today, we’re creating a Dumpster fire noti...
The Ongoing State of JavaScript Errors
Today, we’re releasing TrackJS Global Error Statistics to the public. This aggregated production data is a useful measure of the state of client-side JavaScript errors and the quality of the web. W...
What is Developer Time Worth?
It’s remarkable to me how many developers have no idea what their time is worth. I speak with a lot of developers, and when I mention my work on TrackJS, I frequently hear “I could build that”. Yea...
September 2019 Product Updates
The TrackJS team was hard at working pushing out new features and improving UI responsiveness. Here are all the things we launched:
Faster Elasticsearch Query Performance
We store all of our JavaScript error data in a large Elasticsearch cluster. This lets our customers slice and dice their error data in realtime, and perform full text searches over it. We push El...
TrackJS Weekly Site Quality Benchmark
TrackJS gives your team visibility into how websites behave in production and the tools to understand bugs quickly. You can track your error rate over time and measure your progress. But how does y...
August 2019 Product Updates
We’re a bit light on features this month because we’re working on a new site quality report. More on that next month. In the meantime, we have some helpful additions:
Lessons Learned From A Buggy React Upgrade
React v16 is innovative. It comes with better error handling and new features like Error Boundaries, Fragment, Portals, Lazy, Memo, a new Context API, Hooks, Suspense, and concurrent rendering. I h...
Debugging: "Failed to construct 'Request': Invalid Argument." in Edge
Nothing changed in your code. All of a sudden, a tidal wave of errors start happening for Microsoft Edge users. What the heck happened? On August 28th, 2019, many TrackJS customers saw a sudden su...
Best Practices on JavaScript Page Weight
Web sites continue to bloat with oversized images, custom fonts, and too much JavaScript. The huge amount of poor performing JavaScript on many sites drags desktop browsers and crushes low-end mobi...
How to Correctly Wrap a JavaScript Function
Wrapping JavaScript functions lets you add common logic to functions you do not control, like native and external functions. Many JavaScript libraries, like the TrackJS agents, need to wrap externa...
Remote Debugging on the Script & Style Show
Todd and David discuss tools and techniques to debug remote devices, such as phones and kiosk computers.
July 2019 Product Updates
The TrackJS team is hard at work streamlining the system and giving you even better tools to capture, understand, and fix the errors on the web. Here’s what we’ve been up to lately:
How to Avoid Ad Blocker Errors
The web is full of ads, and many users install ad blocker extensions to deal with them. But ad blocker extensions can break websites in strange and unintended ways, which often show up as errors in...
Separate Your Monitoring
Your monitoring, instrumentation, and observability systems should be separated from your primary system infrastructure for resiliency and visibility. You already know monitoring is important, but ...
Metered Logging is Anti-Developer
A fictional story about software development. Sarah pulled up her LogCorp dashboard to start debugging. Customers were having sporadic issues checking out from the Acme site, but no one knew why. ...
June 2019 Product Updates
The TrackJS team is hard at work streamlining the system and giving you even better tools to capture, understand, and fix the errors on the web. Here’s what we’ve been up to lately:
Debugging Remote Browsers with RemoteJS
The most frustrating bug I ever fought only showed up on a remote device. I was working on an AngularJS component, and for some irritatingly-unknown reason, it would not render on a Samsung Android...
Debugging: Slow Network Requests and "Cannot read property 'id' of undefined"
We understand the value of JavaScript error monitoring here at TrackJS. Consequently, we run TrackJS on all of our own web properties to log our JS errors. We’re dilligent about fixing errors as th...
May 2019 Product Updates
The TrackJS team is hard at work streamlining the system and giving you even better tools to capture, understand, and fix the errors on the web. Here’s what we’ve been up to lately:
When to Fix JavaScript Errors
The web has a lot of background radiation: known errors, unsupported browsers, unstable networks, and misbehaving plugins all create noise. How do you sift through this noise to know when your Java...
Building TrackJS Filters: React without the SPA
We recently released a significant update to the way users filter and explore their error data. I want to discuss how we built it, the tools we used, and how we’re doing things “differently” than e...
April 2019 Product Updates
The TrackJS team is hard at work streamlining the system and giving you even better tools to capture, understand, and fix the errors on the web. Here’s what we’ve been up to lately:
TrackJS Filters: Find Important Errors Before Your Users Do
Dealing with noise is one of the biggest challenges when monitoring JavaScript errors on a busy site. Old browsers, misbehaving extensions, and adblockers can all cause erroneous or irrelvant erro...
Site Search with JavaScript - Part 2
Last week, I wrote “Adding Search to Your Site With JavaScript” over on David Walsh’s blog. It covered the basics of how we added search to the TrackJS Docs Site with client-side JavaScript and how...
February 2019 Product Updates
The TrackJS team is hard at work streamlining the system and giving you even better tools to capture, understand, and fix the errors on the web. Here’s what we’ve been up to lately:
January 2019 Product Updates
We didn’t release much in January because we’re working on a couple of “big things” that I think you’ll really love. More on that next month. Still, we polished up a few things:
December 2018 Product Updates
We took things easy over the holidays, changing things less frequently than normal. We hope you all had a happy and relaxing end of year. Still, we finished a few things:
The Event Stream Debacle
Unless you were hiding under a rock, you probably heard about the “event-stream situation” on NPM this week. TLDR: the original maintainer of the event-stream package was tired of maintaining it. ...
November 2018 Product Updates
The TrackJS team is hard at work streamlining the system and giving you even better tools to capture, understand, and fix the errors on the web. Here’s what we’ve been up to lately:
Debugged: Debugging Empty String
Empty String. An infuriatingly vague error message that leaves few clues about what’s going wrong. A customer recently experienced a lot of these, and asked for our help debugging it. This is that ...
Agent as a Module
We recently released a new version of the TrackJS agent as a JavaScript module. This change was often-requested and long-overdue. It will make it way easier for you to include TrackJS in your appli...
Application Versions
These days it’s common to release new versions of a web application daily, or even multiple times a day. At any given time there could be multiple versions of a code base running live in productio...
October 2018 Product Updates
The TrackJS team is hard at work streamlining the system and giving you even better tools to capture, understand, and fix the errors on the web. Here’s what we’ve been up to lately:
Goodbye {Track:js}. Hello TrackJS!
{Track:js} is gone. The name is anyway. We’ve removed the last vestiges of it, and we are now TrackJS. Hello! The name change has been part of a larger rebranding effort we’ve been working on to u...
Moving to Mailgun
At TrackJS we pride ourselves on our pragmatic approach to software development. We’re cautious of making changes - every change must be weighed not only by its reward, but also its risk. We pref...
Thriving Small
TrackJS is a small software business, and a really successful one in my opinion. We get to help developers all over the world, at companies big and small, understand their JavaScript and build bett...
Adding Value
I recently appeared on Dave Rael’s Developer on Fire podcast. The show focuses less on technical minutiae and more on the developer as a person, and their approach to adding value. I got to talk ...
The Siren Song of Component Libraries
Large web applications are almost always built by multiple teams. When the scope or scale of an application grows, there’s just no way a single team can be responsible for the entire thing. How yo...
Impermanent UIs: the Fleeting Frontend
“The only thing constant is change.” A silly platitude, but if you’re a frontend developer you can empathize. If it’s not JavaScript frameworks that are changing, it’s the language itself. If it...
Backwards Compatibility
I built my first website in 1995. It was a simple affair consisting of markup I wrote with notepad.exe. Deployment involved FTPing the files to GeoCities. The code is long gone, but that site wo...
Error Status
The ability to set the status of an error is our most commonly requested feature. Customers want to mark errors as fixed, or one team member wants to let the rest of the team know they are investi...
Search Improvements
One of our biggest challenges is helping customers make sense of their JavaScript errors. Web applications produce a staggering number of errors, but not all of them are relevant. We have great t...
Even Better JavaScript Error Reports
Four years ago, we launched TrackJS as A Better Way to Track JavaScript Errors and introduced developers to the Telemetry Timeline. Many JavaScript errors are difficult to understand without the co...
Common Redux Bugs
Redux is an amazing JavaScript library that has become mainstream because of its simplicity, tiny 2kb size, and excellent documentation. Redux assists developers to manage state in JavaScript appli...
Learning from GitLab: Making Production Obvious
We recently took some time to take stock of our practices and procedures following the outage at GitLab. The GitLab outage started when a developer made the easy mistake of entering a command on th...
Adventures in Elm
We’ve been hearing a lot about Elm lately, especially how it claims to prevent errors. Our newest contributor, Matt Granmoe, will explore it, how to get started, and some thoughts on error preventi...
New Feature: Error Groupings
It’s common to have JavaScript error messages that are almost identical, but differ by a url segment or identifier. These can be noisy, creating dozens (or hundreds) of different groupings for the ...
Internet Explorer 11 Crash on JSON.stringify
Internet Explorer 11 crashes when JSON.stringify is called on an HTMLFormElement that contains duplicate named inputs. This is particularly concerning because radio inputs will certainly have dupli...
Analyzing JavaScript Errors and Browser Updates
Our friends at ZingChart asked to do some data crunching on some of our data. They wanted to understand if evergreen browser releases impacted error rates overall. We were happy to provide them wit...
Debugging JavaScript in Production
The web is a hostile place and our JavaScript apps will inevitably break. Browser changes, invasive plugins, unstable networks, or just plain bugs—something is going to go wrong. When it does, we n...
What's new in TrackJS?
We’ve been busy building new features and wanted to take a few minutes to highlight some of them. Often we’ll soft launch a feature without much fanfare to make sure it’s working as intended, so s...
TrackJS × 3 Event
TrackJS turned three! It’s been amazing to help you build better JavaScript apps and pushing the boundaries of the web. We’ve learned so much from you all and want to share it.
[Video] Highly-Effective JavaScript Developers
A few weeks ago, I was at the NDC Oslo conference and I met some amazing folks. The videos are online from NDC Now and I wanted to share this one from Jonathan Mills with you. It’s got some fantast...
Tracker TypeScript Definitions
We just released a TypeScript Definition file for our tracker! I know that many of you use and love Typescript. I must admit, I have been skeptical that it would be adopted. I really like writing J...
Monitoring JavaScript Memory
I was chatting with Dominik Kundel from Twilio, who had built a cool application to manage the coffee lines at NDC Oslo. You could SMS your order in and they displayed tons of analytics about the c...
Tracking Unhandled Promise Rejections
Ever since jQuery introduced deferreds, developers have used promises to manage asynchronous control flow. (I know, I know, promises pre-date jQuery, but that’s when they went mainstream). In the ...
[Video] Fast and Resilient Web Apps
The videos from Google I/O 2016 are online and there is some great content there. My favorite so far is this one from Ilya Grigorik on resilient web applications. It does a fantastic job explaining...
Sharing Error Reports
A few weeks ago, we quietly released the ability for your to share your error reports publicly. We think this is really powerful, because it allows you to spread information and get feedback on you...
Debugged: "nsresult: 0x805e0006" on Firefox
In Mozilla Firefox, a request to load an external origin was attempted and externally blocked. The request could have been canceled by a browser extension, such as an adblocker or antivirus, or bec...
The Perils of Loading External JavaScript
Loading external JavaScript is like waiting until runtime to compile an external dependency. A lot can go wrong. It’s difficult to escape the need to load external JavaScript on many of today’s web...
[Video] JavaScript Forensics
Over the past year, I’ve been touring software conferences and sharing some techniques for finding and debugging some of the most common errors on the web with a talk I call “JavaScript Forensics”....
JavaScript Debugging with Sourcemaps
With the proliferation of JavaScript transpilers, sourcemaps have become an integral part of the front-end development. If you’re using Angular 2, React, Om, Elm, or others, there are huge advanta...
Announcing TrackJS Ignore
We’re happy to announce TrackJS Ignore Rules. The web is a noisy place, and you need tools to filter out the messages and browsers that you don’t care about. We built a simple rule engine to allow ...
Googlebot's JavaScript Indexing Doesn't Matter (Yet)
Until recently, a client-side web-application couldn’t care about SEO. The spiders that Google uses to index content didn’t know how to handle the complexities of Angular or Ember. When Googlebot c...
Introducing Trends
One of the hardest parts of client side error tracking is giving the customer meaningful signal from a sea of noise. The internet is a hostile place, and errors occur for all kinds of reasons. We...
Crossorigin Scripts and Corporate Proxies
We recently discovered an issue with our suggested installation of the tracker client. Specifically, that we were using protocol-relative URLS and using the crossorigin attribute:
Script Error: JavaScript Forensics
Script Error: The arch nemesis of JavaScript error monitoring. As soon as you start monitoring client-side problems, it emerges. It cloaks the true nature of your front-end errors behind its veil o...
Privacy-Enhanced Source Maps
We love exploring the latest build tools and techniques to improve our code. Crunching, minifying, and combining code can help make our applications faster, but it also makes it really hard to debu...
The Bar Demo
So you’re at the bar and someone asks, “What does your software do anyway?”. How do you respond? How do you condense your technical feats into a response concise enough for the alcohol-fueled mind ...
Error Monitoring in Sencha ExtJS from OhmzTech
We’re thrilled to announce an official TrackJS Integration with Sencha ExtJS, developed with the good folks at OhmzTech. This simple wrapper will funnel the fantastic error detail into TrackJS and ...
Outages and Our Way Forward
We’ve had infrastructure problems lately, and I’m really sorry if they impacted you. Production monitoring helps you understand when problems are happening–but only when your monitors are working. ...
Scaling TrackJS with Elasticsearch for Fun and Profit
We’ve been using Elasticsearch here for awhile. We’re thrilled to share our experiences with them, and the larger community. We wrote up a blog post with them
An Apology for Our Errors
In the last few weeks, you may have seen an error trying to get to our UI. We’re really sorry about that, and we wanted to share what’s been happening and what we’re doing to fix it.
Debugged: "Attempted to assign to readonly property." iOS 8 TypeError
A webkit bug that shipped in iOS 8 beta 5 and appears to have been partially included in the launch of iOS 8 and 8.1 is affecting many of our customers. It does not seem to impact all iOS8 uniforml...
Entrepreneur 2 Entrepreneur: Todd Gardner on Bootstrapping
Todd was interviewed by Tech.mn on bootstrapping and revenue:
Todd Gardner from TrackJS on STL Code Cast Show
Todd Gardner was interviewed earlier in September by JJ Hammond and Gus Emery on JavaScript, the future of native, and legos. Check it out:
Filtering JavaScript Error Reports at Cornell
Cornell continues their series on using TrackJS by showing how they filter out noisy, unactionable errors from their reports.
TODO: Error Handling in EmberJS
EmberJS is an open-source JavaScript application framework, self described as “A framework for creating ambitious web applications”. In this integration, we’ll be using the EmberJS TODO app from T...
Legitimate and Illegitimate JavaScript Errors
The Hotel School at Cornell continues to do great things with TrackJS. They’ve written up their thoughts on identifying legitimate errors that’s very interesting.
Cornell School of Hotel Administration: “Hello TrackJS!”
The development team out at the Cornell School of Hotel Administration recently added TrackJS to their development process. Looks like we’ve done some good things for them, check out their review:
TODO: Error Handling in BackboneJS
BackboneJS is an open-source JavaScript application framework, often used for single-page applications. In this integration, we’ll be using the BackboneJS TODO app from TODOMVC.com as our example a...
Building the TrackJS Documentation with Daux.io
The TrackJS 1.0 documentation was terrible. It all started so simple–there wasn’t a lot in the beginning. But as we grew and handled more situations, our “one page” docs were becoming quite the tom...
TODO: Error Handling in AngularJS
AngularJS is a popular open-source JavaScript application framework, often used for single-page applications. Let’s figure out how AngularJS handles errors and what it let’s us do to debug them. We...
A Major Upgrade to the JavaScript Tracker
We’ve been working hard to release a major upgrade to our JavaScript tracker. Version 2.0.0 introduces several things you’ve been asking for, and some big ideas of our own. We’re thrilled to share ...
Hiding Noisy JavaScript Errors
One thing we’re constantly striving to maintain at TrackJS is a high signal-to-noise ratio. Logs filled with meaningless errors hide significant problems from developers and admins. If there’s too...
Searching for JavaScript Errors
We just launched some more great stuff to find and fix your errors! You have this now, log in now and check it out!
A Better Way to Track JavaScript Errors
JavaScript is amazing; you are building amazing and creative web applications that no-one conceived a few years ago (except maybe Jeff). But as our webapps get larger, they get more complex, harder...