Don’t Unpack and Repack omni.ja[r]

If any step in your process to customize and deploy Firefox involves unpacking and repacking omni.ja[r], you’re probably doing it wrong. Any modifications you need to make to Firefox, whether it be changing the default profiles, changing the default preferences or even overriding specific files can be done WITHOUT repackaging omni.ja[r].

If you really think you have a use case for unpacking the omni.ja[r], let me know and I’ll try to prove you wrong.

Now you know…

Please note: I reserve the right to delete comments that are offensive or off-topic.

Leave a Reply to Mike Kaply Cancel reply

Your email address will not be published. Required fields are marked *

233 thoughts on “Don’t Unpack and Repack omni.ja[r]

  1. Well, generally I unpack omni.ja to change en-US locale to other locales… (3rd build, I don’t want to build the same edition for different languages)

  2. As of FF 21:

    We unpack omni.ja to be able to disable the firstrun import browser settings wizzard by editing migration.js:

    if (this._autoMigrate) {
    //var nothing = document.getElementById(“nothing”);
    //nothing.hidden = false;

    which is critical for us.

    We also unpack the another omni.ja to be able to edit greprefs.js to define a config file which we ship with our FF:

    pref(‘general.config.obscure_value’, 0);
    pref(‘general.config.filename’, ‘firefox-blah.cfg’);

    in which we instruct FF to get its config from an URL:


    so we are flexible and don’t have to reinstall FF every time when we change a single configuration/lockPref value.

    If this would be possible with CCK we’d be happy to use it instead of fiddling around with the omni files.

    • You can disable the migration wizard by creating a file called override.ini and placing in in the EXE directory (browser directory after Firefox 21). It’s contents are


      There’s no need to put the prefs file inside of omni.ja[r]. If you put that same file into the defaults/prefs directory, it will work just as if it was in omni.ja.

  3. What about enabling group policy management controlled access to various browser features? I have done it in the past to allow group policy to set preference values, and to add preference-controlled security around things like about:config, lightweighttheme installations, etc..

    • You would have to be more specific.

      There aren’t many things that need to be packaged in omni.jar. They can usually be done via an extension.

  4. Hello,

    until firefox-20.1 I used to extract and modify the greprefs.js file with fastjar (working on Debian/Linux) to lock a few user preferences and then repack the omni.ja file with the modified greprefs.js. Now, with version 21, I can’t extract the greprefs.js file, command “fastjar -f omni.ja -x greprefs.js” outputs “Ick! 0x124d1c” and I can’t lock user preferences anymore. Where do you put the modified preferences file? In Firefox’s installation directory or in users’ directories? And what should be the file name? prefs.js? I’ve tried to replace the original unmodified prefs.js in users directories with my modified version but it doesn’t work.

    Thanks in advance for your help.

  5. Hi again,

    found how to get it working with the prefs.js file and the firefox.cfg one.

    Sorry for bothering and thanks a lot for the explanations!

  6. I need to do the following customization:

    1. Change the icon on Windows taskbar

    2. Update chrome\toolkit\content\global\netError.xhtml to use a custom message

    3. Update components\nsUpdateService.js

    Is it possible without having to unpack and repack omni.ja? I’m using Firefox 21. Thanks.

  7. Hi Mike

    Today i found your blog and i have one question: for my windows live cd (bartpe) i need to change a lot in several files, as example defaults\preferences\firefox.js in omni.ja. How can i setup this without unpack/pack omni.ja? In this file i need 14 changes/additions.

    I had other questions but some of them are now solved. 😉 Why override.ini no longer work in EXE folder as example.

  8. I want to change the context menu order (open in new tab vs. open in new window).

    I did this by changing the brwoser.xul in \chrome\browser\content\browser inside the omni.ja until now.

    I know there are extensions to do this, but I don’t want to use them.

    Is there a possibility to do it without modifying the omni.ja?

    • Why would you not want to use an extension? Create a simple extension and placing it into the distribution directory is exactly how you would solve this problem.

  9. Hi Mike,

    I made all of my customization through creating a policies.js and override.ini files; 26 config options added to my mozilla.cdg file. Everything works great, but I need to restrict access to (file:\\) and about:config for my users. In the past this was accomplished by extracting Omni and modifying a .js file. The .js file that was used in the past does not exist in version 21 of FF. Do you know how I can restrict access to the config page and local hard drive access through the browser. The deployment is for terminal services.

    Thanks for any inforamtion you can provide.
    Dave B

    • I would recommend the CCK Wizard for blocking access to about:config.

      I also have an extension for blocking local file access.

      Both of these changes would be accomplished by putting extensions into the distribution directory. Please contact me at and I will send you the extension.

  10. Hi Mike,

    util FF20 we un- and re-packed omni.jar to change the permissions of saved Bookmarks (json and html) from 0600 to 0644 (e.g. we patch the doExportToFile-Function in “BookmarkHTMLUtils.jsm” for HTML export and the PO_backupBookmarks in places.js for export to json).

    Since last week i’m trying to figure out the best way to achieve this behavior without modifying omni.ja for FF21.

    First I tried to use “override” in a chrome.manifest, but as far i can see BookmarkHTMLUtils.jsm is only accessible by a “resource://”-URI which is not supported by “override”!?

    Do you have any hints how to modify files like BookmarkHTMLUtils.jsm and places.js either directly in the firefox-dir or by a FF addon?

    Thanks in advance for your help.

    • I’m curious as to why you need to change the permissons? Have you tried simply modifying the permissions using autoconfig or something like that?

  11. Please prove me wrong, because I’d honestly love an easier solution. I’m looking at unpacking/repacking omni.ja so I can edit nsBrowserGlue to get rid of the warning dialog whenever I load it in safe mode. I know you’re running in safe mode, Firefox — if I didn’t want it that way, I’d execute without the safe mode command line switch.

    Check for more detail.

  12. I have the latest version of firefox and despite an entire day searching and attempting to “lock” access to addons and extensions within the browser menu, I’m having no luck. Ive tried the methods listed here: and here: I think the location of the files I need to change or edit has been altered with more recent versions of the program than that used in the examples above.

    The reason I want to do block or remove access to the addons and extensions is to prevent the adult-filter I have installed from being simply disabled or removed.

    I’d really appreciate it if someone could explain in layman’s terms how to do this – the more explicit and clear the instructions the better as this is completely new to me (I guess that much is obvious).

  13. How about disabling the autocomplete=”off” nonsense that prevents the Password Manager in the browser from storing passwords?

    Basically, what I want is to be able to store the passwords regardless of what the HTML says. I have tried all extensions that advertise doing that, none of them work in all cases. The only true reliable way is to find all places in .js files in omni.jar that check the autocomplete tag in HMTL and comment them out.

    The real killer is the websites that do not actually use autocomplete=”off” trick. Instead, they allow you to store the password but they generate a random site name every time. This way you end up storing a new password each time you visit their site. The only way to solve that is to stick “if site=blah { site=foo; } in a very precise place in omni.ja.

    Having said that, there really ought to be a checkbox somewhere in the browser to force it to ignore these HMTL tags.

  14. I really hate all these idiotic SeaMonkey throbbers and logos. That is why I usually replace them in omni.ja with the Netscape’s logo and icons. How I can replace icons and all this crap without repacking omni.ja since ver. 2.19?

  15. I repack omni.ja mainly to remove “hyphenation\*” “jsloader” “chrome\pdfjs” and maybe “modules\commonjs\sdk” to rebuild a personal version of firefox. Right now, is not working very well anymore. I would like to know how the omni.ja is being built now.

  16. Hi,

    I use Seamonkey and unpack/pack omni.ja in order to edit chrome/toolkit/content/global/platformHTMLBindings.xml to get custom key bindings for cmd_scroll*

    Can you also prove me wrong that I don’t neet omni.ja? 🙂

    Thank you!

      • Hi,

        Thanks for your answer!

        I add the following for the browser (after ):

        in order to get vi-keybindings for moving within the browser windows.

        Kind regards,

        • I add the following for the browser after

          <binding id="browser">
                <handler event="keypress" key="h" command="cmd_scrollLeft"/>
                <handler event="keypress" key="j" command="cmd_scrollLineDown"/>
                <handler event="keypress" key="k" command="cmd_scrollLineUp"/>
                <handler event="keypress" key="l" command="cmd_scrollRight"/>

          (imagine the brackets…)

          in order to get vi-keybindings for moving within the browser windows.

  17. I need to unpackage the .ja file, but you say to tell you and you will prove that I have no need to. If there is no need to then is there a ways of getting the contents WITHOUT unpackaging it?
    There are things that I want to alter, but not in the .ja file itself. Because it’s for use as another purpose. What is there that I can use to unpackage it?

    • To unpackage it, you just unzip it. Many files in the there can be overridden or overlaid. It’s just a question of what you want to do.

  18. Users can put a userContent.css file in their profile to override CSS files present in omni.ja
    Is there a mechanism, similar to defaults/pref(erences), where installers can put
    CSS files in the program directory to override styles for all users of that system, without
    unpacking the omni.ja and without putting a userContent.css in all the user’s profiles?
    It would seem natural that the program reads all .css files present in some directory,
    e.g. the chrome subdirectory of the program directory, similar to what it does to .js
    files in defaults/pref(erences). But it appears it doesn’t.

  19. Hi Mike,

    First of all thank you for all the invaluable information on your website!

    Inspite of several hours of banging my head against the wall, i have still not solved one of the reasons i need to unpack and pack omni.ja.

    pdf.js uses a file call viewer.html that i want customize. I´ve tried in several ways to override it throug an extension, but firefox just wont cooperate with me.

    I belive that this is because pdf.js is a resource:// and not a chrome://

    Looking forward to being proven wrong.

    • You should be able to override it in chrome.manifest:

      override resource://pdf.js/web/viewer.htm PATH TO YOUR VERSION OF viewer.html

      Does that not work?

      • Mike,
        I tried your suggestion and it doesn’t work. In chrome.manifest of my extension, I have this line:
        override resource://pdf.js/web/viewer.html myfiles/viewer.html
        where myfiles is a folder where I overrides all firefox files.

        Can you please try it out? Let’s say we remove one of the buttons.


        • Sadly I was wrong. You can’t override resources URLs. Quite frustrating.

          I’ve looked through the PDF HTML and unfortunately there isn’t even a unique CSS attribute that could be used to modify the page.

          I’ve opened a bug and hopefully they will add a custom attribute in so that the page can be customized.


  20. Working on an unrelated problem to Hanif’s, as far as I can tell, override does not seem to work for any resource:// URIs. I can view the resource:// URI and the intended replacement file:// URI, but Firefox will not override it. Firefox will however override chrome:// URIs, if there is such an URI to the resource you wish to replace and if you can find that URI.

    Please note that Marian J had noticed the same, with regards to resource:// URIs. That makes at least three persons on this blog post, including myself, reporting problems with resource:// URIs. A user Wladimir Palant at the Stack Overflow has also said that you can only override chrome:// URIs.

    In my particular case, I wish to override “Mozilla Firefox/browser/omni.ja!/components/nsBrowserContentHandler.js” aka “resource://app/components/nsBrowserContentHandler.js” to restore a pre-FF20 behaviour, but Firefox has ignored my overrides. A solution to my problem would be most appreciated.

    Especially since Firefox 23’s /browser/omni.ja can no longer be unpacked (unzipped) correctly, even with Windows Explorer’s built-in ZIP handler, which was the last commonly known ZIP handler able to unpack /browser/omni.ja. 7-zip 9.30, PeaZIP 5.01, ExtractNow, and even the JDK 7u25’s jar.exe cannot unzip Firefox 23’s /browser/omni.ja. If there are any ZIP handlers still able to unpack FF23’s /browser/omni.ja, I would also appreciate learning of their names as a workaround until a better solution can be found. The other /omni.ja can still be unpacked by Windows Explorer’s built-in ZIP handler.

    • So it looks like in your situation you would have to write a new component to override nsBrowserContentHandler. What was the pref FF20 behavior?

          • Like @Hanif Bali, I’d like to replace the whole thing. But a more basic need would be to remove the print and full screen buttons. It would be nice if this could be done with a simple overlay, but it can’t. It might be accomplished by setting up a stream listener and injecting css when the content type is application/pdf, but I stopped short of trying that because it seems a little ridiculous that this would be the way to customize the viewer.

  21. Hi Mike
    We have a multilang xulrunner app and since xulrunner releases are delivered en-US only we used to combine the relevant parts of the specific firefox omni.ja (de, fr and it) into xulrunner’s omni.ja. For this we need to unpack xulrunner’s omni.ja, and add the other languages in and repack again. How can this be done w/o unpacking and repacking omni.ja?

  22. In former versions it was able to install FF on a server share and to create a file defaults/profile/cert_override.txt which contains all the self signed certificates used in the company.

    This file will be ignored completely in current version, so that each new user has to copy this file to his local profile manually. Extremely annoying.

    I don’t know, if this file would be respected by firefox, if it was in the omni.ja container. But if I knew, how to pack that container again, at least I could try.

      • Is there a way to pre-populate a companies self-signed certs on the Mac version of Firefox? I’m evaluating FF24.0esr. When I capture cert8.db and move it to “/Applications/” I get security errors. The rest of my default profile loads fine after I remove cert8.db.

        • Self signed certificates are actually considered “overrides” so you’re not really populating certificates per say.

          This features will be in the next CCK (CCK2)

  23. We currently dive into omni.ja (the one that sits in browser\) to edit the ‘nsContextMenu.js’ file. We alter the line with “context-setDesktopBackground” so that users cannot set a desktop background from inside the browser.

      • The common problem with all userChrome.css solutions is that there is no equivalent that operates for all users on the system.
        This is really something that should be fixed. Admins want easy solutions that they can apply to all users (at least by default) without having to resort to fixes like writing a custom extension.
        (especially because platform-specific solutions like Windows Group Policy are not supported)

        • I agree. That’s why my recommendation is to write userChrome.css via autoconfig which means that it happens for all users of the browser.

          I’m working on better solutions for this.

          • Hi Mike,

            Any update on this issue?

            I have the same problem on Firefox 45.1.0esr. can you please suggest something better for me I am not a fan of editing omni.ja file.

  24. Hi from Paris/Fr – sorry for my poor english.

    I need to provide users with a simple way to re-initialize the profile. I know ” firefox -safe-mode “, but users will have two choices ( rehinit or safe mode ) , that is for lot of them a showstoper ….

    So i duplicated the “global/content/AboutSupport.xhtml” in omni.ja and named it “global/content/ResetProfile.xhtml” , then i have suppressed things not in relation with the reset.

    Using “firefox -chrome url …” ( in shortcut ) works fine , also in url …
    I have planned to see how to add it in the menu , but missing time to learn how.

    I just read this article, and knowing that i have modified the omni.ja , i want to know if i can do better ( i am not a super developper ! ) , may be with an override somewhere ….

    thanks for your very interesting and useful web site.
    Regards, C.

    • What you’re describing could happen with a very simple add-on.

      If you put that URL in an add-on, you could still have the -chrome shortcut and you could also easily add a menu item.

      • Thanks for the reply.

        I will look to do this way, may be someone have made an empty add-on nutshell ?
        That could help when you dont know the how to create an add-on.

  25. I use seamonkey (which is more compact than firefox + thunderbird separately).
    Back before omni.jar, I used to modify the mailWindowOverlay.js file in messenger.jar and repack it (deflate compressed), as well as modifying fr.jar (which comes only partly translated) and repack that (again deflate compressed), and seamonkey would load considerably quicker than with the unmodified versions. When omni.jar came along, it loaded (somewhat) slower than my modified versions before.
    (I timed it, but some of the slowness could have been due to added features between versions.)
    The reason I modified mailWindowOverlay.js is because I always turn off display of external content (images, etc) in email, in preferences, and somebody decided to put about 4 lines in the mail window every time external content was blocked, instead of the previous discrete (easily ignored) icon in the status bar. So when my bug report was rejected as WONTFIX (several times), I did a cludge which always disables displaying external content.
    So unless a preference can turn off this undesirable behavior (I’ve been told no), from what you said on this page, I would have to create an extension. In that case I would prefer a global extension that doesn’t need to be activated for each profile. Could you give me pointers on how to do that ?
    (I would also like to do that for the modified language extension that I recreate every version. I do both of these modifications for others as well.)

    As for omni.ja, I would rather go back to the old multiple jar system, which could be sped up considerably by simply deflate compressing the *.jar files, without any reordering.
    That way I could avoid loading the partially translated language file.
    In any case, currently seamonkey pauses for about 1 minute before loading (even before I do any modification).
    Thanks in avance for any help.

  26. Hi Mike,

    I have to edit omni.ja because two capabilities are not exposed by about:config options.

    The first issue is: when dragging a link to a tab, the focus switches to that tab. That’s annoying if you are trying to build a set of links in one tab for later reading.

    Solution: edit tabbrowser.xml, comment out this line in two places:

    this.selectedItem = tab;

    The second issue is the number of elements in the go back/forward buttons (history). It is set to 15 by default; that’s too low. I set mine to 45 by editing browser.js like so:

    XPCOMUtils.defineLazyServiceGetter(this, “_ss”,
    “nsISessionStore”);, aPopupShowingEvent,

      • Similar to case1, before Seamonkey 2.19 I used to comment out several lines in mailWindowOverlay.js, to prevent a multiline banner from appearing to tell me that remote content had been blocked (as requested by configuration settings).
        This blocked all remote content in emails, invisibly to the user.
        With recent changes, it is more difficult but still possible to extract the file from omni.ja, but no longer possible to replace it with the modified file.
        What would you recommend to solve that ?
        Thanks in advance …

  27. Hi Mike,
    I hope you can help me in this one.
    I’m changing the omni.ja from Thunderbird, I think it could work the same as Firefox.
    I want to change the position of the Thunderbird Attachment pane.
    The way I’m doing it is by editing omni.jar: the file chrome\messenger\content\messenger\messenger.xul
    and look for this line near the end

    Move that line up by 12 lines, to just below the

    Do you know a way to have this file modified outside of the omni.ja?
    This really does need an extension but I don’t know how to do something like that.
    For now I just edit the omni.ja every time it updates.
    Thanks in advance for your help.

  28. I have a GWT application which has a textarea. When the user types a wrong spelling, it gets underlined in red. When the user right clicks on the wrong spelling, the popup menu provides some suggestions; The user clicks on one of the suggestions but the wrong spelling does not get replaced.

    The javascript console contains the following error: [18:54:12.843] NS_ERROR_INVALID_POINTER: Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIInlineSpellChecker.replaceWord] @ resource://gre/modules/InlineSpellChecker.jsm:273

    Please let me know how to fix this problem.

  29. Quote: “You definitely can override the netError.xhtml to have a custom message via a chrome override, and the same with the icon if you are simply replacing it.” Mike Kaply

    I need precise instruction in how to override chrome netError.xhtml and have a blank page put in it’s place. The reason I want to do this is because I have a vast number of add generating web address in my hosts file and when I visit many websites via Firefox I’ll have to view that rather ugly netError message and icon until I can replace it with a blank page.

    I tried entering the following command in console:
    override chrome://global/content/netError.xhtml data:text/html,Disabled
    And console’s responded: SyntaxError: missing ; before statement
    I’ve no idea what “SyntaxError: missing ; before statement” means or how to correct the command or if it’s even correctable and even if that command had been successful it would have only replaced the netError message with the word Disabled in it’s place.

  30. Before I updated from FF17 to 24 I could pack/unpack omni.ja to very simply modify the nsloginmanager.js to a changed behavior: saved passwords can be used but the dialog to save new passwords was suppressed (for the most sites).
    You often say, that something could (possibly) done with an extension. To learn how to write extensions is much overhead for these simple modifications, isn’t it? Why could the developers not use a standard packer?!
    Which (windows command line) tool can handle the damn format?
    Or how to plug in a changed nsloginmanager.js in Firefox? Thanks

  31. I was running Mozilla 7.0.1, which had all external files to make changes. I also have a closed network, no roaming profiles, and user accounts are deleted from Documents and Settings upon log off.

    I used the pref.js to set many about:config customizations
    I used bookmarks.html to hard set the same favorites for all users
    I used cert_override.txt to add for trusted connections to internal sites
    I used override.ini to set EnableProfileMigrator to False

    can you recommend a way to accomplish the above without unpacking the omin.ja?


      • So I used Winzip to unzip the omni.ja to the D: drive on a server. Under Omni>Defaults>Profile I added my bookmarks.html, cert8.db, and from a fresh FFX 17.0.11 install I configured the pref.js via about:config.

        I also created, under Program Files(x86)>Mozilla Firefox>defaults a folder named “profile” and added my bookmarks.html, cert8.db, and pref.js.

        I then zipped the folder back to, renamed it omni.ja, and placed that under Program Files(x86)>Mozilla Firefox – when I launch firefox I get the Mozilla Crash Reporter.

        If I do not edit the omni.ja file on a fresh FFX install, but leave the Program Files(x86)>Mozilla Firefox>defaults>profile (bookmarks, cert8, and pref,js) it will launch, go to my specified homepage, but other settings (such as cert8) don’t take affect

        Seems like I am corrupting the omni.ja somehow

        Any advice would be appreciated!

      • I found that I did not need any customization to the omni file – just adding those files to default/profile was enough (along with a well placed override.ini)


  32. OK, so I must admit that I am also one of those omni.ja modifying guys 😉
    Now I have stumbled over your advice and would like to do it correctly.
    I would like to change:


    Whenever I put the first one into some .js file into browser/defaults/preferences/
    like pref(“intl.accept_languages”, “de-DE,de,en-GB,en,es”); it gets completly
    ignored and I cannot change them any more in Content->Languages.

    And using pref(“helpers.global_mime_types_file”, “/usr/local/share/mime.types”);
    is even worse, firefox24-esr doesn’t start at all with this set.

    Everything else put into browser/defaults/preferences/ works great!

    • So the problem is that browser/default/preferences can be overridden by some Firefox preferences.

      My honest suggestion is that you put this in an AutoConfig file. That will guarantee they never get overwritten.

      You also might experiment with putting the preferences that aren’t working in defaults/pref. Or even weirder, change the name of your JS file. Make it start with an a or z. sometimes file loading can affect this as well.

  33. We are launching firefox using the command line -profile option. This appears to create a new profile but doesn’t apply /browser/defaults/profile settings. I was looking at modifying omin, but hoping you will have a better solution.

    • omni.ja can be a standard zip file.
      It works just as fast. The voodoo about loading in a certain order is just that, with the buffered large disks of today.

  34. Dear Mike. For a long time I unpacked onmi.jar and changed settings in all-thunderbird.js to prevent the Thunderbird from checking for updates (we have a large Windows domain deployment for students, staff and faculty). I re-package TB for Group Policy deployment. Is there a way to do this nowÉ

  35. and how do I un- and repack the omni.ja file?
    It looks like, it uses a slightly different zip-algorithm.

    And plz .. don’t ask WHY I want to un- and repack it. I just wanna do it.
    Or am I mistaken and firefox/thunderbird is not any longer free software?

    • Unpacking can be a bit tricky, but repacking is straight forward.
      Just use the standard zip format.
      Ensure that it is named omni.ja, that is what counts.
      Probably because of the large caches on today’s hard disks, it seems to load just as fast as the tricky format.

      As far as avoiding unpacking if possible (and easier), I think it is a good idea, but Mike has informed me that it doesn’t seem to be possible for my particular use case.

  36. Hi how can we enable debug logs fr specific js files? like how to enable debug mode for WifiWorker.js?

    we are getting below error, and want see detailed log for this

    05-10 13:03:44.328 18378 18378 E GeckoConsole: [JavaScript Error: “NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISettingsServiceCallback.handle]” {file: “jar:file:///system/b2g/omni.ja!/components/SettingsService.js” line: 119}]

  37. I want to change the Home/End key behaviours, and cmd-Left/cmd-Right combinations in Firefox on Mac OSX to go to the beginning/end of the line, rather than the beginning/end OF THE FRIKKING PAGE. Sorry to shout, the white hot rage got the better of me. I’m able to edit the OS key bindings with a simple text file, but several bug reports and 10 Firefox versions later, there is still no resolution. I can apparently change it by unpacking omni.ja, changing an XML file and repacking it. There was an app that used to do this by since v29 it has stopped working. Any tips?

  38. What if I want Firefox to automatically save any password I use to log-in without asking first? I think the only way to do that is to edit the nsLoginManagerPrompter.js file in omni.ja.

  39. Perhaps I am in the wrong place, since I found this post by accident and am not familiar with your site. However, since I have spend I long time in search of this, I will venture to ask: is there a way alter the keyboard accelerators (the underline letters indicating menu shortcuts) that does not require unpacking the omni.ja or downloading yet another extension? If there is no way, how exactly to do it through omni.ja?

  40. How would I go about removing the download progress indicator from the FF taskbar button (picture added at end for reference)? In all the research I’ve done, the only possible way to even MAYBE achieve this (I’ve had no luck, thus far), is to change a couple lines of the DownloadTaskbarProgress.jsm file that is found in one of the omni.ja files. I have tried just extracting the .jsm file with 7zip to make the appropriate changes, then using 7zip once more to replace the original .jsm with the newly modified version. However, this has had no affect on the taskbar download progress behavior. Any help and advice would be greatly appreciated.

    (the taskbarbutton on the right is the result of using the DownloadsWindow add-on)

  41. First, thank you for developing the rebranding wizard. It is very cool. I have one thing I appear to be unable to do with it. In the About dialog box I still get the FireFox logo directly above the version number. In this case version 31.0. I think it is the aboutWordmark.png file that is not working. Also, I think this is an .svg file when looking in omni.ja ( I know stay out of omni.ja I am happy too)! Also, I am not able to change any of the text so it currently says “TestBrowser is designed by TestCompany, a global community working together to keep the Web open, public and accessible to all. Sound Interesting? Get involved!” I would like to change this since it does not apply. Is this possible somehow?

    Also is CCK2 suppose to work with version 31.0. It is not working for me. I want to verify if it is me or if it is not compatible.

    Thank you!

    • Yeah, they completely changed the about dialog for Firefox 29 and I didn’t realize. I’ll need to fix that.

      Unfortunately it’s SVG now.

      As far as the text goes, that’s a Mozilla bug I’ve had opened for years. I never intended for the rebranding wizard to be used to ship a new product, so I don’t worry that the text on the about dialog isn’t working.

      As far as the CCK2 on FF 31 goes, it works for me. What specifically isn’t working?

  42. Hi Mike,

    I’m using Firefox 31.1.0. I’m attempting to prevent users from clearing their browsing history via the Firefox UI. Using a combination of your addon and others, the history sidebar is disabled, all Options > Privacy features are disabled, history related menu items are hidden, history related shortcuts are disabled, the Open menu icon is hidden, and the View > Toolbars > Customize is hidden.

    What’s still giving me a headache is the Library which contains the Downloads history, browsing history, and bookmarks. I would like to still have the ability to view all the original contents of the Library but disable the manual deleting of history calendars.

    Within DOM Inspector I finally was able to locate and delete the nodes to prevent browsing history deletion. It appears that I’d need to unpack and edit the omni.ja in order to change what DOM Inspector reports are the node popupset > menupopup with and id of placesContext.

    Is there a way to completely avoid omni.ja to accomplish this?

    • I’m looking into allow the CCK2 to modify other types of windows. That’s what you are running into here. The history window is a different UI, so the code to override the different keys and menus don’t work in that window/

      There are lots of different ways the user can clear history, though. It will be painful to find them all…

  43. I seem to be a bit late for the party, but anyway: I replaced to files chrome/classic/skin/classic/aero/messenger/icons/flag.png and chrome/classic/skin/classic/aero/messenger/icons/flag-col.png with my own version. What is the better way of doing this then repackaging the file?
    Thank you…

  44. I use seamonkey in linux and want to change the “quit” key command from CTRL-Q to something else. How can I do this without repacking?

  45. No big thing but I would like to edit about:home and add a link. I like having the blank address bar. I can extract the abouthome folder and make my edits and save it unpacked and set the resulting file AboutHome.xhtml as my homepage but then the addressbar isn’t blank anymore. I can’t repack omni.ja so Firefox v34 likes it. If I unzip omni.ja and then Imediately repack it with “zip -qr9XD omni.ja *” the file size increases from 12608242 bytes to 12609273 bytes, that with no edits .

    Anyway I want to enter about:home and serve up an edited page.

    • I do this in the CCK2 via a simple extension that listens to page loads and modifies about:home as it loads.

      How big are the changes you are making?

      • The changes are minor, I just wanted a link to Google and any place else enter it in the blank address bar, basically what Ubuntu has done in about:startpage, I like it, the couple of times I’m in Windows I would like the same.

        I didn’t know of CCK2 but just installed it and just have to figure how to use it.

        Thanks for the reply, still bugs me I can’t repack that file properly but I’m getting over it, somewhat.

        • The CCK2 won’t really do that, it just shows the code that does it (it’s in cck2.js).

          It’s a pretty straightforward thing to do if you want to learn how…

  46. In AC buzzers, the AC Mains voltage is applied to an electromagnet coil.
    Now, you’ve found the perfect classic car, perfect model
    – it just needs a little work. Well, biking going to work will save
    you a few more dollars and it is also environment- friendly
    as you don’t emit harmful gases while doing it. Lightning almost
    strikes at Laguna Seca e-Power electric
    motorcycle race, instead Moto – Czysz sizzles.

    The present circuit of the dc to dc cell phone
    charger is particularly designed to be used
    in conjunction with a 12 volt automobile battery, or alternatively it
    can be permanently installed in your car or motor bike as an emergency
    cell phone charger. Treadmills that are among the popularly used exercise machines today, were once used as
    power sources to lift buckets of water and to power grain mills.

  47. I want to stop the “Resend” warning box that pops up almost every time I use the “back” button.
    I’ve followed this guide but the repacking made the file very big at 1.5Gb.
    If I can’t fix it I’ll have to change to a different browser but I really don’t want to.,128564,128564

    Posted by: Zero3K
    Date: September 29, 2014 03:06AM

    I think I figured out how to remove it. To do so, do the following:

    1. Extract the contents of K-Meleon’s omni.ja to a directory.
    2. Go to its chrome\en-US\locale\en-US\global directory.
    3. Open in Wordpad.
    4. Delete the confirmRepostPrompt and resendButton.label strings that are in it and save it.
    5. Compress the contents of the directory as a ZIP and rename to omni.ja.
    6. Replace the one in K-Meleon’s directory with the one you just compressed.

  48. I want to edit the omni.ja file because…
    I want to change the orange firefox window menu icon (icon in ‘titlebar’ of application (firefox) window) to Grayscale to match my Linux / KDE desktop theme I created. All Black, light grey, grey…. Very little to no colors other that INSIDE the application windows.

    these icons, i belive are inside the omni.ja at path:

    Prove me wrong, Please.
    thank you in advance,

  49. Hello,

    I have configured firefox for minimal recordings : I don’t want cookies. The fact is, now, I have a popup asking me if I want to save my identifiers each time I log in gmail for exemple. I don’t want this neither so I tried to modify the nsLoginManagerPrompter file in the omni.ja archive. I think it is ok but when I replace the original omni.ja by the new one, firefox doesn’t open anymore. Actually, the problem comes from the rebuilding because I tried to replace the original omni by unmodified dezipped rezipped omni file and that doesn’t work neither.

    What is wrong?

    Thank you,

  50. Hi Mike.
    I am using FF 38.0.5
    I am wanting to edit the message on the screen that says ‘The proxy server is refusing connections’
    To say something like ‘This page is blocked, contact support’ or something like that

    In the omni.ja I have found chrome\en-US\locale\browser\netError.dtd
    Line 96
    I edit that line and save netError.dtd to C:\Program Files (x86)\Mozilla Firefox\browser

    In that same folder there is chrome.manifest
    Which just has one line that says
    Manifest components/components.manifest

    With the overriding line I need to add for it to use my own netError.dtd, I am not sure of the path to use?
    I have been trying different combinations like
    override chrome://global/locale/netError.dtd chrome://browser/locale/netError.dtd
    override chrome://en-US\locale\browser\netError.dtd chrome://browser/netError.dtd
    Also do I need to add any other lines


    • You shouldn’t just add things to that chrome.manifest.

      You should create your own extension with its own manifest or put that manifest in distribution/bundles (for now).

  51. How about setting the default bookmarks on Firefox 38? The only way I’ve found so far, according to google etc, is by repacking omni.ja.

    According to your post here:

    The way to customize it is to put it in that “browser/defaults/profile” folder, but that folder doesn’t exist at all in Firefox 38. And that post was 3 years ago.

    How is it done currently?

    Thank you!

    (Also, is there a way to show the bookmarks toolbar by default?)

    • You still put a file in browser/defaults/profile, you just have to create the directories if they aren’t there.

      It still works.

      As far as showing the bookmarks toolbar by default, you’ll need something like the CCK2.

      • I want to be able to read the source and make changes — things like
        having capabilities not being hidden in about:config. I can’t know what I
        might find that might enable me to understand things more, until I
        unpack and read it.

        Also — for the same reason I generally set the flag to have mozilla stuff unpack all the extensions before use — If I get a weird behavior or want to track down errors I see in the console — being able to click on the error message and be taken to the source is very convenient. I’ve fixed more than one problem on a website or w/an extension by being able to look at the code and find the problem myself.

        • That’s a totally OK thing to do (I do that as well).

          This post is mainly about people trying to modify Firefox by changing things and repacking the omni.ja. Most things can be done easier than that.

          • Another case, related to the above, I’m definitely going to have to figure out how to repack an omni.ja w/changes — I want all those security policies *visible* to me in
            about:config. The way the code is broken right now, I can’t even see 3rd party policies and how they differ from the built-in. Aside from that — am running a x64 Palemoon 25.0.1 that maps to FF 24.9 on AMO. Palemoon offers a x64 version, FF cripples windows users by configuring it to be a toy. I want to be able to set my
            memory cache to 3-5 GB and no disk cache.

            I run squid on my gateway so for disk storage — I want that to stay in 1 place so everyone can benefit). Most insane experience recently: I needed to D/L a 600MB ISO-CD — when I did, it took about 15-20 seconds — why? I’d D/L’d it 2-3 months prior — and it was still in my disk cache. It wasn’t stale — my proxy cache is config’ed to check timestamp and length… not the same, then it’s re-D/L-ed.

            I may not be giving you reasons that would be reasons for everyone — BUT, the hiding of data in people’s browsers makes them that much more ignorant and that
            much more likely to become a malware source. Some % of people would be more security aware if those were visible…..(sorry for the long post, but am annoyed that
            they make it so hard to have control over your own machine!)…

            I’d like to figure out how to keep NoScript active: it is deactivated in every new session — never was a prob in my FF 3.6.24 . So I may have to edit FF source code and/or the about:config settings to fix it.

            I also want to look where else they might be hiding things and unhide them. That’s the problem in having a binary-blob shipped to you — you can’t easily inspect and fix things. Certainly, though, if I was shipping this to someone else, I wouldn’t hide things in the first place — so at least, that reason might go away had they not decided to make understanding FF a game of hide+seek. But since they did — that right there seems like a valid reason to be able to edit omni.ja contents.

            • An add-on can probably be written to show those security policies. I always found it odd that they were hidden.

              • You might get them to display on a separate display, but there are hard-coded checks buried in omni.ja (chrome/toolkit/content/global/config.js) that look like:
                if (/^capability\./.test(prefName)) // avoid displaying “private” preferences;
                One is in:

                var gPrefListener =
                observe: function(subject, topic, prefName)
                if (topic != “nsPref:changed”)

                if (/^capability\./.test(prefName)) // avoid displaying “private” preferences

                The other is at:
                function ShowPrefs()
                var prefArray = gPrefBranch.getChildList(“”);

                prefArray.forEach(function (prefName) {
                if (/^capability\./.test(prefName)) // avoid displaying “private” preferences;
                With it hard-coded in the “binary-blob”, how can you override it … I don’t think you can.

                Linus gave strong reasons for not waning “binary-only” drivers in the kernel because they
                were not inspectable — and thus, not only a security risk, but also a means to force future linux
                users to use binary-only keys to boot from the new UEFI…er… no wait, that last one is already happening… oh.. yeah … Microsoft’s crypto keys count as binaries blobs…hmmm…too late.

  52. Hi Mike,

    as I wrote in another comment, I disapprove Mozilla’s decision to make the default search engines mandatory so they can’t be deleted by the user. The recommended way is to remove the references within the GUI, but if you’re unlucky, then after an update the Mozilla selection is back.

    To prevent the latter I set “” to false. However, this isn’t enough for a Firefox PE deployment. The Mozilla selection is always shown at the first launch. As a last resort I opened browser\omni.ja with WinRAR, went to \chrome\de\locale\browser\searchplugins\ and deleted all xml files except for google.xml which I replaced by an updated version. As a drawback of this method the original compression isn’t kept, the modified omni.ja is bigger in size.

    I’m curious if there’s a better way to block Mozilla’s search engines and override e.g. Google Search with a customized one. In the past this was a trivial task, now it has become quite tricky…

    • I just looked at Firefox 41 and does nothing at this point.

      I think your best bet is to set search preferences in a distribution.ini file and add search plugins to distribution/searchplugins/common.

      What exactly are you trying to do? Remove all Mozilla search engines and then set your own?

      • I remove the Mozilla search engines. I updated google.xml (with current favicon and different search parameters) and want to use that instead of Mozilla’s version. It seems that if there are 2 files named google.xml (for “Google Search”), Firefox recognizes and displays the one within omni.ja.

        I copy my customized/self-made search engines into the %Mozprofile%\searchplugins directory. The best would be, if no different search engines were shown in Firefox. The distribution.ini might work for a regular deployment, but I manually prepare Firefox’ folder structure and files to receive a PE build:

        • If you put google.xml on distribution/searchplugins/common, it should win.

          As far as overriding the default search engines, unfortunately that feature appears to be not possible anymore. That’s quite sad.

          • Hi Mike,

            Here’s my current approach in a nutshell:
            – unzip -oq omni.ja -d omntmp
            – cd omntmp\chrome\%lang%\locale\browser\searchplugins\
            – del/f/q *.xml
            – copy google.xml omntmp\chrome\%lang%\locale\browser\searchplugins\
            – zip -oqr9XD omni.ja *

            These steps are carried out in the script.
            A new script version on will follow.

            By the way, in the script you’re given credits for your great information resource on Firefox, please keep it up!


            • I think you’ve found the usecase where an extension can’t override things.

              Mozilla is doing this because the search engines are getting hijacked.

  53. Hi Mike,
    I’m running thunderbird 38.02 on ubuntu. Wonder how can I change the awful default icons without installing any theme nor modifying icons compressed at omni.ja folder.

    Tks in advance


  54. I wish to modify omni.ja because even though I have tried to make Firefox not show me advertisements, every time I open a supposedly blank tab it will show me advertisements in the form of a “shopping site suggestion”.

    Why does ‘jar xf /usr/lib/firefox/browser/omni.ja’ report ‘Ick! 0’?
    (Ubuntu 14.04, Firefox 42.0)

  55. I unpack omni.ja to add company_config_file.cfg to greprefs.js. After i read this thread i tried this file in defaults/pref as suggested here (with original omni.ja). But when i started firefox again with this Configuration all my lockPrefs did not work. I tested with firefox ESX 38.4

    I need this lockPrefs for different things, like proxy-settings, startpage, no updates, …
    User should not be able to change it. Any idea what i made wrong?

  56. Hi Mike, a while ago (see my comment from Nov 2014) , you helped me replace an icon for Thunderbird.
    This worked great and right now for version 38.4.0, it does work under Windows, but not under Linux. For some reason, when I use the exact same xpi addon file under Linux, the original icons are not being overwritten.
    The error console does not show anything that seems related either.

    Would you have any idea why the overrides don’t work in Linux?

    Here is my chrome.manifest:
    content betterflagicon ./
    skin betterflagicon default ./skin/

    override chrome://messenger/skin/icons/flag-col.png chrome://betterflagicon/skin/flag.png
    override chrome://messenger/skin/icons/flag.png chrome://betterflagicon/skin/flag.png


    I am not sure if it ever worked under Linux with older Thunderbird versions…

    Thank you!

  57. We need have a few requirement that need to be set in order for our software to work.

    We are using the ESR release 36.

    1. Set the Portable Document Format to use Adobe Acrobat in Firefox
    2. Set 2 plugins to always activate.

    Ive tried the CCK2, but have been unsuccessful.

    I would prefer to modify the mimetypes.rdf and deploy its via a GPO placing the file in the Program Directory, since I am not sure how to place it in the individual profile folder for each user.

  58. My question concerns Thunderbird, not Firefox, but omni.ja is present in that program also.

    I want to increase the number of folders displayed in the “Move to” > “Recent” list.

    My understanding is that this setting is stored in “omni.ja chrome\messenger\content\messenger\folderWidgets.xml”. Is there anyway to override this setting, or does omni.ja need to be edited?


  59. Hi,
    I wanted to display my own error page , whenever browser is not able to load page or any error occurs. How can i do it in mozilla firefox.

  60. Hi, I want to disable to tab dragging animation. I made a thread about it here:

    As I posted, I tried to delete 5 lines of code from tabbrowser.xml. I thought there would be no side effect of removing the ‘for’, but after chaning tabbrowser.xml (in firefox/browser/omni.ja), Firefox doesn’t start up. I see the process for 2-3 seconds and then it’s dead.

    Am I doing something wrong? I read that even though omni.ja is not a proper .zip format, because it’s optimized for look-aheads, rezipping it will still work, just more slowly.

    Or is deleting/commenting out the ‘for’ creating the problems? As I see it, it just pushes the background tabs while dragging a tab.

  61. I would like to completely remove the components/urlclassifier part.
    It recreates “test-*” files in the safebrowsing folder even if every safebrowsing pref available is disabled.
    Is that possible without editing omni.ja? Thx alot

  62. Hi,
    I want to disable the green Firefox taskbar progress animation in Windows 10, which I find very irritating and sometimes completely useless. It always shows up when you are downloading a file in Firefox. Changing taskbar settings in Windows itself will unfortunately not help. I have searched the web for settings within Firefox to change but I’ve not found a solution.
    In this forum article a member called jsher2000 (second post from bottom) suggests editing specific lines in the DownloadTaskbarProgress.jsm file in omni.ja.

    Is it possible to disable Download Taskbar Progress without editing omni.ja?

    Thanks for comments on this issue.

    • Yes. In theory you could create an extension that imported DownloadTaskbarProgress.jsm and then:

      DownloadTaskBarProgess._shouldSetState = function() {return false;}

  63. Firefox 46.0.1 o ignores cert8.db file in browser\defaults\profile
    It is “by design” in version 46.
    It seems then, that repacking with cert8.db would help?

    Editing each user cert8.db after she/he logs in, it too complicated.
    Why Firefox does not use system certificates anyway …

  64. Rebranding and modifying the settings of Tor browser, seems to need editing omni.ja. Don’t believe me? Check it out. The Tor browser has a lot of settings in an omni.ja file. To change some default behaviors in that browser you have to edit it. I have found no way around it.

  65. I’m looking to override the windows.json and ext-windows.js files in omni.ja with modified files. I am unclear reading over

    how exactly to do this in the your sept 2013 reply you seem to say this isn’t possible. Is the proper format along the lines of;

    override chrome://foo/content/bar/windows.json file:///windows.json

    where the new file is in the same director as the chrome.manifest file?

  66. I actually have a use case for Thunderbirds omni.ja. We had to modify login and address book functionality. It cannot be done without modifying omni.ja. I double checked our original developers research and even the Mozilla Developers confirmed there was no other way to do it. The issue is that the modifications that needed to be made occur at a lower level than the hooks allow for. And no, I no longer have a link to the forum post as this dates back over 10 years ago.

    • I wanna build a full graphic FF theme based mainly on PNG files.
      Custom icons for Toolbar navigation, menus/bookmark buttons, tabs and Scrollbar re-skin.
      Where else can i find the full Default theme to start my own new theme customization?
      Are there any full graphic theme builders programs compatible with latest FF versions?

      I wanna do something like in old times;)
      Remember the full skins for FF 3?
      Well that’s my target as a result.