Chrome Extension - Kinetic Grid Fixes, UI Customization

Hello,

Observing that there have been several long-outstanding bugs with Kinetic that have yet to be addressed in 2026.100, I thought a novel approach to the issue might be interesting;

This chrome extension serves as a man-in-the-middle, hijacking Epicor’s main.js mid-stream from the server to you, and making some changes on the fly that are only possible by correcting upstream (Epicor, #pleasefix) - as this performs some sensitive man-in-the-middle behavior, I’ve posted the source / GitHub below.

NOTE: the extension will reload all of your Epicor tabs when you activate it. (In order to hijack main.js)

This extension aims to fix:

  • Grouping issues - Kinetic’s performance tanks when utilizing grouping above a certain number of rows (varies according to your computer’s hardware, browser, OS settings, etc.) - this mainly appears to be due to memory usage/leak/lack of GC.
  • Blank grid issues when scrolling
  • Grid “twitchiness” when scrolling (jumps up/down when clicking things)
  • Combo-Box popups requiring two clicks to actuate when the viewport width is <480px (combo box switches to use Kendo UI’s adaptive popup mode and fails to trigger actions the first click)

Added Stuff for funsies:

  • Disable theming
  • Choose specific colors
  • Fine-tune control padding / spacing - allow for larger font/text or smaller without scaling the browser zoom

This extension also provides a decent platform for us to do a sort of “Epicor Ideas” thing, where we can fully cook the idea and showcase it, maybe fully baked ideas would get some more traction with Epicor.

Here’s the source code, which is AI written and proof-of-concept status:

Screenshots with spacing/padding set to minimums, from Epicor Education (Left: With extension, Right: Stock)

Can we please add a Legend badge to Gabes account :grin:

Either that or we create a monthly Pot that encourages that is awards to contributions like this.

https://www.patreon.com/create

This is so neat. Great job Gabe!!

I love that we are able to do this… And I hate that we have to. If it is this trivial of a fix, why can’t Epicor do it?

Well, I watched his journey iterating and guiding the ai. It wasn’t exactly trivial, but it wasn’t rocket surgery either.

In other words, @GabeFranco just makes it LOOK easy.

Reese Witherspoon What Like Its Hard GIF by 20th Century Fox Home Entertainment

Wow I need to try this out for our MRQ and FWB issues. Thanks!

Well Done Applause GIF

Ladies and gentlemen, round of applause for our local wizard… :man_mage: :magic_wand:

My theme dreams are now a reality.

Nice job Gabe! Great extension! Thanks for sharing.

Been thinking about the same. Would be nice to refine a method that patches using the object model to make ‘fully-baked’ a reality. My fear is that traction, if at all possible, may only be likely if we can show a near-exact diff to the mainjs source code.

In other words, monkey-patch specific methods like your wrapProviderPrototype, but do so by:

  1. push generic patch loader via function to avoid the need for a browser extension.
  2. loader: finds target object constructors at runtime via object model & matching args
  3. caller: loads straight-up js patches from disk via func > IIFE or simple expression eval
  4. patches fire either: before, over, or after targeted proto method via config convention.

So the actual patch (what we want Epicor to see) is distinct from the loader/extension/hack etc and mapping to the actual mainjs fix is direct or at least very straight forward at a glance.

I’ve got a POC for patching event actions and worked on one for components. Happy to share.

Would be great to end up with a couple of top-level patch script loader functions and then let folks go wild with tiny patch scripts experiments (in pilot/edu of course ;-). resulting in a shared library of viable patch scripts. perhaps someday commit to a shared repo w issue log, before n after docs, code diffs, and there you have it, maybe ‘they’ will come.

/$0.02

Thanks for listening. Keep up the great work!

Keep in mind that the main.js we see is the post-webpack minified build, so if we tried to generate a “diff” style patch against main.js, in the end that likely wouldn’t be any more useful to Epicor than a well-written call out of logic issues against particular methods; Prism should be able to work it’s way back from that to their internal source and apply patches as needed. I ensured to provide that documentation on the github repo.

This extension was born from a discussion at Epicor Insights w/several other EpiUsers/Customers and Epicor, voicing our concerns about grid performance issues (and other issues that seem to not be taking precedence for bugfix over other feature branches/releases). During that discussion I proposed that the grid performance issues were not insurmountable and offered to provide a fix. Ball’s in their court to take the demonstrated correction and upstream it.

Of course we’re not talking full diffs. They’d have to OSS their source and we PR for that.

Just mean clean before n after gridProvider.adjustVirtualScrolling() using your example.

It sounds like a cool idea!

Ideally, we push for something like that to be implemented upstream as well (Extend the concept of BPMs into the client - pre/base/post hooks on the various methods - this way we avoid the use of an invasive extension that requires debugger permissions.

It sounds a little far-fetched, but hey, they did it on the server end with the business objects, it makes the same amount of sense here if they want to stick to their niche of being highly-to-extremely extensible.

Fixing grid scrolling is a great improvement! In particular, I’ve mapped scrolling to the keyboard for ergo reasons, and boy howdy do epicor grids lose their freakin minds when they’re spammed with uninterrupted scroll input.

The upper level max-width constraints are another really easy annoyance to fix in the browser. Overriding max-width in .page-content, .ep-view, and .ep-view-fixed-header banishes that problem.

v3.23.0 live on chrome extension store;

  • Created a toggle for multi-line column headers, which allows more information density in the grid in “minimum spacing” mode

  • Adjust minimal padding mode to affect more Kinetic Components, adjust sizing/spacing at minimal to allow for more information density by auto-sizing text areas to fit content, making tags smaller, etc.:

Note: Looks like these changes to grid rendering broke the grouping fix (grouping doesn’t render now) - will fix tonight and build in a test script so it doesn’t break again!

Angry Bobs Burgers GIF

Hey, it got smaller! That’s all I asked the AI to do, not make it pretty!

I’ll fix that next version :stuck_out_tongue:

Hey I aint complaining about free work, I was just expressing my OCD