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…


244 responses to “Don’t Unpack and Repack omni.ja[r]”

  1. xunxun Avatar

    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)

    1. Mike Kaply Avatar
      Mike Kaply

      You can install language packs as extensions and then change the locale by changing the preference:


      1. Although he does have to do a l10n-repack if he’s trying to distribute installers for multiple locales from a single build.

  2. I unpack omni.ja to set my own bookmarks…

    1. Mike Kaply Avatar
      Mike Kaply

      You can set your own bookmarks adding a bookmarks.html to defaults/profile.


      1. It never worked for me – I need set bookmarks for bookmarks toolbar. It is working for you for bookmarks toolbar as well? Thanks

        1. Mike Kaply Avatar
          Mike Kaply

          Yes, you can customize the bookmarks.html file to have any number of bookmarks (and bookmarks on the toolbar) and then for a new profile, it will create those bookmarks.

          You can also use the CCK to create bookmarks as well.

          1. Thanks a lot!

          2. How to set bookmarks with favicons? I need bookmarks with favicons on bookmark-toolbar on very first run. Any idea?

          3. Mike Kaply Avatar
            Mike Kaply

            Take a look at this bookmarks.html file:


            In particular, the data URLs. You can create a default bookmarks.html with the data URLs for the icons and place in defaults/profile. It will then get used when new profiles are created.

  3. 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.

    1. Mike Kaply Avatar
      Mike Kaply

      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.

      1. Thanks for your instant help, works great. Lesson learned!

  4. 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..

    1. Mike Kaply Avatar
      Mike Kaply

      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.

  5. 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.

  6. 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!

    1. Mike Kaply Avatar
      Mike Kaply

      That was going to be my suggestion. Glad it worked.

  7. 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.

    1. Mike Kaply Avatar
      Mike Kaply

      Are you doing this today with omni.ja? Usually changing the Windows icon requires messing with the executable.

      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.

      Why do you need to update nsUpdateService.js?

      1. Hi Mike, I need to customize the error messages on Firefox 26. I saw this post here. What do you mean that we could customize the errors by doing a “chrome override” please explain me how to do that, thanks.


        1. Mike Kaply Avatar
          Mike Kaply

          Essentially it means that you can tell Firefox use this file instead of this other file. This post has a little info:

          You’d need to figure out which files you want to replace and then user override statements to tell Firefox to use their version. Taking apart this add-on will show you more:

          1. Thanks for the wonderful post . I am trying to do similar thing with the android firefox app . Can the file be stored in some other folder than chrome/content , like base/resources ? Is there any file protocol to access such files then ?


          2. Mike Kaply Avatar
            Mike Kaply

            I have no experience at all with repackaging Firefox android.

  8. Peter Avatar

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      You have a number of options.

      My recommendation would be to use an autoconfig file:

      You could also just create a new JS file in defaults/prefences and put your changes there.

      Note that for Firefox 21, the location is now browser/defaults/preferences

  9. 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?

    1. Mike Kaply Avatar
      Mike Kaply

      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.

  10. Dave B Avatar
    Dave B

    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

    1. Mike Kaply Avatar
      Mike Kaply

      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.

      1. Hi Mike,

        when I block access to about:config by the CCK, the user is still possible to restart the firefox with disabled add-ons and so the user can avoid this.

        Do you have a solution?


        1. Mike Kaply Avatar
          Mike Kaply

          I assume you mean the menu item under Help?

          I’m fixing this in the CCK2.

          1. Okay, nice! I mean this menu item…

            It will be also possible to block access to file-URLs by CCK2?

          2. Mike Kaply Avatar
            Mike Kaply

            I have a separate add-on that does this. I’m considering whether or not to make it a part of the CCK.

  11. Marian J Avatar
    Marian J

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      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?

  12. 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.

    1. Mike Kaply Avatar
      Mike Kaply

      I’ve written a post on how to disable safe mode:

      Do you still want to have safe mode but not have the dialog show up?

  13. andrew Avatar

    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).

    1. Mike Kaply Avatar
      Mike Kaply

      Can you let me know what adult filter you have installed? I can help you then.

  14. Commander Avatar

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      Is there really no way to do that via an extension?

  15. Netscapist Avatar

    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?

    1. Mike Kaply Avatar
      Mike Kaply

      I’ve done an extension just to do that – rebrand (

      I even created an add-on that rebrands SeaMonkey to Netscape:

      Although I haven’t tested it lately.

      1. Netscapist Avatar

        Thank you! It works for me. I just replaced default icons in /usr/lib64/seamonkey/chrome/icons/default/ and some icons and throbbers in your xpi file with my ones and some dtd files were edited. Now I’ve got the fully workable customized extension. I hope you can forgive me for this ‘hack’. 🙂

  16. PetterRams Avatar

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      Why do you remove pdfjs instead of just turning it off? And why do you remove other things?

  17. James Oliver Avatar
    James Oliver


    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!

    1. Mike Kaply Avatar
      Mike Kaply

      Tell me specifically what you change and I’ll try…

      1. James Oliver Avatar
        James Oliver


        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,

        1. James Oliver Avatar
          James Oliver


          binding id=”browser”

          of course 😉 the angle brackets were removed.

        2. James Oliver Avatar
          James Oliver

          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"/>[/code]

          (imagine the brackets…)

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

        3. Mike Kaply Avatar
          Mike Kaply

          Unfortunately that entire answer got lost because of the angle brackets :). Can you email the information to me? –

  18. DrWhite Avatar

    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?

    1. Mike Kaply Avatar
      Mike Kaply

      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.

  19. 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.

    1. Mike Kaply Avatar
      Mike Kaply

      No, there really isn’t a way to do that, but you could use something like autoconfig to write a userContent/Chrome.css for all users:

  20. Hi, I need to reload the page after 10 seconds when I receive “server not found” error. Thanks.

    1. Mike Kaply Avatar
      Mike Kaply

      Is this something you’ve done in omni.jar before?

      1. no, i haven´t.
        I need to customize my “server not found” error page.
        Is it any easier way to do it??

        1. Mike Kaply Avatar
          Mike Kaply

          You can override the server not found message. Can you be more specific as to what you are trying to do?

          1. Hi Mike, I can´t override the server message because Firefox can´t reach the server. I just want to put a friendly message instead of default Firefox´s message. The Firefox clients are on my intranet. Thanks a lot!!

          2. Hi Mike, can I solve the problem without unpacking and repacking omni.jar??

          3. Mike Kaply Avatar
            Mike Kaply

            Can you give me the text of the specific message you want to change?

          4. yes, of course!.

            “…..Address Not Found
            Firefox no puede encontrar el servidor en
            The browser could not find the host server for the provided address…..”


  21. Hanif Bali Avatar
    Hanif Bali

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      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?

      1. 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.


        1. Mike Kaply Avatar
          Mike Kaply

          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.


    2. Did you make it work, Hanif?

  22. 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.

    1. Mike Kaply Avatar
      Mike Kaply

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

      1. Adam Moore Avatar
        Adam Moore

        But this doesn’t explain how to modify the built in pdf viewer without repacking omni.ja

        1. Mike Kaply Avatar
          Mike Kaply

          How exactly do you want to modify the built in viewer?

          1. Adam Moore Avatar
            Adam Moore

            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.

          2. Mike Kaply Avatar
            Mike Kaply

            Unfortunately there’s no easy way to do this. Nothing in the HTML uniquely identifies the PDF viewer. I’ve opened a bug to try to make this easier:


  23. 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?

    1. Mike Kaply Avatar
      Mike Kaply

      I honestly don’t have an answer to this one. I’ll try to get an answer.

  24. 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.

    1. Mike Kaply Avatar
      Mike Kaply

      There are two omni.ja files now, one in the EXE and one in browser.

      1. 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.

        1. Mike Kaply Avatar
          Mike Kaply

          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)

  25. 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.

    1. Mike Kaply Avatar
      Mike Kaply

      There’s definitely no need for that. You can use userChrome.css or a simple extension to hide that menu (it’s quite common).


      1. 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)

        1. Mike Kaply Avatar
          Mike Kaply

          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.

          1. Chirag Dave Avatar
            Chirag Dave

            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.

  26. 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.

    1. Mike Kaply Avatar
      Mike Kaply

      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.

      1. 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.

  27. 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.

  28. Mike Miken Avatar
    Mike Miken

    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,

    1. Mike Kaply Avatar
      Mike Kaply

      The first one would be tricky to do with an extension. The second one probably could.

      1. 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 …

        1. Mike Kaply Avatar
          Mike Kaply

          This could be done with an extension, but it would be quite painful. I think you’re stuck on this one.

  29. 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.

    1. Mike Kaply Avatar
      Mike Kaply

      The XML didn’t come through. Can you email me or paste it without brackets?

      1. splitter id=”attachment-splitter” collapse=”after”
        resizebefore=”closest” resizeafter=”closest”
        vbox id=”attachmentView”/

        1. Mike Kaply Avatar
          Mike Kaply

          You could write a simple Javascript extension that moved this bar around.

  30. Aniruddha Avatar

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      You should open a bugzilla bug for this. –

  31. 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.

  32. Hi Mike,

    tanks for your great comments and information about firefox, but still I have a problem I can’t fix:

    In FF 17 ESR I did edit the mimeTypes.rdf like you discribe here ( by putting the edit file to the /defaults/profile directory. It works fine.

    In FF 24 ESR this doesn’t work anymore. Firefox ignores the mimeTypes.rdf in this directory.
    Do you have an idea?

    1. Mike Kaply Avatar
      Mike Kaply

      Starting with Firefox 21, this location has moved to browser/defaults/profile.


      1. Oh, perfect… thank you for the information!

  33. 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

    1. Mike Kaply Avatar
      Mike Kaply

      Unfortunately since nsLoginManager.js is a component, it’s not that simple…

  34. 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?


    1. I should add that I am moving to 17.1

    2. Mike Kaply Avatar
      Mike Kaply

      So the two changes in particular it looks like you need omni.ja for are the cert_override.txt and the bookmarks.html (and maybe prefs.js).

      I assume you put these in the defaults/profiles directory in the omni.ja.

      You actually don’t need to unpack the jar to do this.


      Let me know if you have other questions.

      1. Thanks! I will try it out and let you know!

      2. 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!

      3. 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)


  35. 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!

    1. Mike Kaply Avatar
      Mike Kaply

      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.

  36. 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.

  37. hi mike,
    how to pack omni.ja after changes in linux. There are 4 to 5 folders.

    1. 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.

  38. 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É

    1. Mike Kaply Avatar
      Mike Kaply

      AutoConfig is the right solution for you:

      You can very easily change preferences in Thunderbird or Firefox.

  39. foobar Avatar

    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?

    1. andré Avatar

      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.

  40. 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}]

    1. Mike Kaply Avatar
      Mike Kaply added support for that.

      You can turn set the preference wifi.debugging.enabled to true.

  41. Daniel Reeders Avatar
    Daniel Reeders

    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?

    1. Mike Kaply Avatar
      Mike Kaply

      This should be really straightforward to do without editing the omni.ja.

      What was the app that used to do this?

      1. Daniel Reeders Avatar
        Daniel Reeders

        It should be — but it really isn’t! The app was called KeyFixer.

      2. Daniel Reeders Avatar
        Daniel Reeders

        Any ideas, Mike? I’m on a Windows machine at work and Mac for home and laptop, and I use Firefox primarily for Zotero (aka my brain, as a researcher). Having no way to reach end/beginning of line with a keystroke — having the home/end keys behave completely differently between platforms — is completely maddening.

        1. Mike Kaply Avatar
          Mike Kaply

          So I think this should be really easy to do.

          This page:

          Provides the basics on creating a simple extensions. Then you would just find the accesskey you wanted to change in the Firefox source code:

          So you would change it in an overlay like this:

          <key id="goHome" modifiers="accel"/>

          1. Mike Kaply Avatar
            Mike Kaply

            If you can find me the XML you were told to change, it would be very straightforward.

  42. Tamás Avatar

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      I’m surprised there’s not an add-on that does this. It could certainly be done that way. What are the specific lines you change?

    2. Mike Kaply Avatar
      Mike Kaply

      You could probably override the functionality in the loginmanager prompter.

  43. 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?

    1. Mike Kaply Avatar
      Mike Kaply

      Sure. You can write a simple XUL overlay that changes a given accesskey.

      This page:

      Provides the basics on creating an extensions. Then you would just find the accesskey you wanted to change in the Firefox source code:

      And add it in an overlay like this:

      <menuitem id="menu_print" accesskey="T"/>

      1. Thank you!

  44. cck@inno Avatar

    How to disable/ remove entries from “components/components.manifest” without editing omni.ja?

    1. Mike Kaply Avatar
      Mike Kaply

      You would override the component with a component of the same name (or simply unregister the built in component).

      What are you trying to remove?

      1. I want to limit the Chat-Providers list to IRC only.
        I’ll try to figure out the unregister part.

        1. Sorry, didn’t mention it is for Thunderbird.

    2. Mike Kaply Avatar
      Mike Kaply

      IF you want a component to simply not load, you can register a component with the same name to remove it.

      What exactly are you trying to do?

  45. 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)

  46. jbenoit1010 Avatar

    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!

    1. Mike Kaply Avatar
      Mike Kaply

      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?

  47. John Delaney Avatar
    John Delaney

    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?

    1. Mike Kaply Avatar
      Mike Kaply

      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…

  48. 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…

    1. Mike Kaply Avatar
      Mike Kaply

      The override command in chrome.manifest.

      Follow the instructions here to know where to place the icon and chrome.manifest:

      then use this to learn about override:

      1. Thank you.
        Took me a while to figure out that I needed to declare a “skin” in my manifest and to get the original icon’s URL right: chrome/classic/skin/classic/aero/messenger/icons/flag.png in omni.ja is addressed as chrome://messenger/skin/icons/flag.png in the override command (this is for Thunderbird, not Firefox, btw.)

  49. Wyatt Ward Avatar
    Wyatt Ward

    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?

  50. Mark Wade Avatar
    Mark Wade

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      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?

      1. 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.

        1. Mike Kaply Avatar
          Mike Kaply

          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…

          1. Mark Wade Avatar
            Mark Wade

            I would like to learn how but I’m hesitant to put you to so much trouble for something that is admittedly rather silly on my part.

            I’ve looked some but haven’t found cck2.js yet…

          2. Mike Kaply Avatar
            Mike Kaply

            It’s actually pretty straightforward. I’ll try to put together a simple template for you to mess with.

          3. Mark Wade Avatar
            Mark Wade

            That would be great, thanks. there doesn’t seem to be any file cck2.js installed on my system, at least under linux, maybe under windows?

          4. Mark Wade Avatar
            Mark Wade

            I found cck2.js after creating a new auto configuaration with the cck2 wizard. It seems I would have to add a function to cck2.js and add entries to the variable config in cck2.cfg. I guess I’ll be trying to learn some js

          5. Mike Kaply Avatar
            Mike Kaply

            I sent you an email with an extension to try. Did you not get it?

          6. Mark Wade Avatar
            Mark Wade

            No, I didn’t, I’m not doing any filtering and I’m getting mail notifications from here. Sorry, could you please resend it.

          7. Mike Kaply Avatar
            Mike Kaply


            An xpi is just a zip. Unzip and modify pageload.js and rezip and then open with Firefox.

            You’ll see the code where I replace part of about:home with testing 123. You can use JS to mess with the DOM

          8. Mark Wade Avatar
            Mark Wade

            Got it. Thank you for going out of your way. I’ll see what I can make of it.

  51. 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.

  52. Richard. Avatar

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      You could simply override the and replace it with your own version with those stings removed.


  53. Landis Avatar

    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,

    1. Mike Kaply Avatar
      Mike Kaply

      My rebrand extension:

      will change this icon.

      1. Landis Avatar

        since my post, I chose to change my system icons to greyscale for most apps.
        /usr/lib64/firefox/browser/chrome/icons/default/defaultxx.png (where xx is the pixel size from 16 to 256)

        I’ve installed your addon, i’ll play with it and give my review…

  54. 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,

    1. Mike Kaply Avatar
      Mike Kaply

      Just zipping omni.ja isn’t enough. It’s not a normal zip file.

      1. Vincent Avatar

        How do I have to do? I tried to build it in RAR and ZIP and rename it with the shell but it didn’t work of course…

        Thank you,

  55. How do you disable configuration access other than modifying things in omni.ja?

    1. Mike Kaply Avatar
      Mike Kaply

      Via an extension or using the CCK2.

  56. 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


    1. Mike Kaply Avatar
      Mike Kaply

      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).

  57. 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?)

    1. Mike Kaply Avatar
      Mike Kaply

      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.

      1. L A Walsh Avatar
        L A Walsh

        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.

        1. Mike Kaply Avatar
          Mike Kaply

          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.

          1. L A Walshh Avatar
            L A Walshh

            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.

          2. Mike Kaply Avatar
            Mike Kaply

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

          3. L A Walshh Avatar
            L A Walshh

            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.

  58. 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…

    1. Mike Kaply Avatar
      Mike Kaply

      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?

      1. 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:

        1. Mike Kaply Avatar
          Mike Kaply

          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.

          1. Michael Avatar

            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!


          2. Mike Kaply Avatar
            Mike Kaply

            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.

  59. 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


    1. Mike Kaply Avatar
      Mike Kaply

      Icons are pretty easy. Check out my rebrand addon:

      and it allows you to change the icons for Thunderbird. You can build the XPI and then take it apart.

      1. how can i actually do use this addon?cannot install on thunderbird, just change the firefox actions icons is not the goal

        1. Mike Kaply Avatar
          Mike Kaply

          It’s a Firefox extension but it generates an XPI that works with Thunderbird.

          So you run it, generate the XPI with icons then you can install that in Thunderbird.

  60. Hi, Mike.
    I’m running Thunderbird 5 and need setup wizard to take username as ldap auth.dn

    1. Mike Kaply Avatar
      Mike Kaply

      I have no idea on that one.

  61. 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)

    1. Mike Kaply Avatar
      Mike Kaply

      You should be able to turn these off with these preferences:

      set to false.

  62. 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?

    1. Mike Kaply Avatar
      Mike Kaply

      That config file shouldn’t be in omni.ja, it should be in the same directory as the Firefox executable. All that should be in defaults/pref is a pointer to that file. See:

      1. Hi Mike,
        thanks for your fast answer. With this I found what was wrong:
        “IMPORTANT: Start your code on the 2nd line” i had ignored.
        Best regards, Fred

  63. 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!

    1. Mike Kaply Avatar
      Mike Kaply

      Install the DOM Inspector on Thunderbird and see if those URLS:


      Come up correctly at all in the URL bar of the DOM inspector.

      1. Both original URLs and my own do come up, and when I enter the original URL (chrome://messenger/skin/icons/flag-col.png) in the DOM inspector, it does actually pull up my version rather than the original one.

        The Thunderbird main windows still show the original one instead of my version, though.

        1. Mike Kaply Avatar
          Mike Kaply

          Overriding the system icons can be different. See:

 for how to do it. Linux uses a different icon format – icns (\.icn)

          1. Hm, I’m wondering if maybe the Linux version uses a differenet URL; so I’m trying to find the icon in the DOM inspector. I do find the table, the row, even the svg for the header icon, but not the star icon…

          2. Oh, I checked about the .icn / .icns files. There is no such file, neither in the thunderbird file system tree nor in omni.ja

          3. Figured it out. Under Linux, it is not using the individual PNGs, but rather an image region of a different PNG that has a bunch of icons in it. So I had to modify and override that respective PNG as well (in this case chrome://messenger/skin/icons/message-list.png)

          4. Alternatively (and cleaner), I could have overwritten the stylesheet that pointed to that image region and point it to my individual PNG, but since I have no idea how to do that, my above workaround was a lot easier.

            More on this stylesheet-thing can be found here

  64. Joe Ramirez Avatar
    Joe Ramirez

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      If they are existing users, you can just drop the mimetypes.rdf file in.

      For new users, check out this post:

  65. Raymond Culp Avatar
    Raymond Culp

    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?


    1. Mike Kaply Avatar
      Mike Kaply

      In theory you could create a new binding that overrode that binding and only changed the one value…

      1. Raymond Culp Avatar
        Raymond Culp

        Thanks Mike! At this moment in time I have no idea that that means, but I’m sure it would work! 😉

  66. Geetanjali Shet Avatar
    Geetanjali Shet

    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.

    1. Mike Kaply Avatar
      Mike Kaply

      You can override the neterror.xhtml page to show a different page.

  67. VowelHarmony Avatar

    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.

    1. VowelHarmony Avatar

      Fixed it by running “zip -qr9XD omni.ja *” on the contents of the file.

  68. earthling Avatar

    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

    1. Mike Kaply Avatar
      Mike Kaply

      You could create a component that overrides the url classifier and does nothing…

      1. earthling Avatar

        Can you please tell me how exactly I can do that, if it’s not to much to ask for. Thx

  69. Per Allner Avatar
    Per Allner

    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.

    1. Mike Kaply Avatar
      Mike Kaply

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

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

  70. Piotr Avatar

    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 …

    1. Mike Kaply Avatar
      Mike Kaply

      You could also add the certs manually. I’m working on a way to bring back defaults/profile.

  71. Tim Cosman Avatar
    Tim Cosman

    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.

  72. I unpack it to modify dirListing.css to kind of disable/hide directory listing from address bar.

    1. Mike Kaply Avatar
      Mike Kaply

      This could be done very easily with an extension…

      1. Already looked at options. No ext does that only. Not looking at kiosk station…

  73. 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?

  74. Vampire Avatar

    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.

    1. Cher Wally Avatar
      Cher Wally

      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.

  75. asdf@asdf.tld Avatar

    I despise all the friendly style errors in netError.dtd. I can write a bash script once, that will unpack, fix the stupid messages, and repack. Once done, it’ll be the fastest fix EVAR. Seriously, how can you beat a bash script for speed and convenience?

  76. Bela Lubkin Avatar
    Bela Lubkin

    I don’t know if you’re still monitoring this, but …

    I got here trying to figure out how to override an FF user interface string. There’s a string in one of the localization/en-US/toolkit/…*.ftl files, inside omni.ja, which I’d like to change. Extracting the file, editing it, packing it back into omni.ja, and installing that as my system-wide omni.ja file works, but seems like overkill.

    Is there a way to override by any of these methods (in increasing order of specificity / goodness):

    – storing the modified omni.ja somewhere in a single user’s FF profile dir ?
    – storing the modified *.ftl file somewhere in a system-wide directory ?
    – storing the modified *.ftl file somewhere in a single user’s FF profile dir ?
    – storing only the modified single string somewhere in a system-wide directory ?
    – storing only the modified single string somewhere in a single user’s FF profile dir ?

    (the actual string is ‘private-browsing-description2’, a long blahblahblah about how extensions won’t work in private browsing unless you enable them, JUST LIKE IN EVERY OTHER BROWSER EVER WRITTEN — an un-scrollable obstruction which takes up half the extensions UI space and apparently won’t go away until FF 69 or 70)

    1. Cher Wally Avatar
      Cher Wally

      Just be aware that starting with Firefox 67.0 update, will use his own separate profile.
      Each other different type of FF (Developer, Nightly)
      will also have and use their own profile.
      So if you have FF & FF Developer & FF Nightly…
      you will have 3 different used profiles

  77. Hi there, always i used to check webpage posts here in the early hours
    in the morning, because i love to find out more and

  78. rinquinquin Avatar

    Well, I repack omni.jar to patch the GPO parser so a standalone portable installation of Firefox does not apply GPO set on some computers.

  79. It used to be that (some) localized strings could be customized using custom-strings.txt overrides. That no longer works since, I think, Thunderbird 45. The kludgy alternative remains to edit the customizations directly into the respective .properties file(s) inside omni.ja …or is there a better way?

  80. George Dorn Avatar
    George Dorn

    I suspect your claim is no longer true, but here’s an example I’m 99% sure cannot be done without unpacking and repacking omni.ja:

    I wish to change the number of tab previews shown. It is hardcoded to 6.

    1. Stijn Avatar

      Came here to request the exact same thing after figuring out how to do it. Also no response on yet. Mike if you know a way around that would be nice.

  81. Sebastian Simon Avatar
    Sebastian Simon

    Seems really outdated now. Ever since `browser.urlbar.clickSelectsAll` has no effect anymore, changing the default behavior of a click selecting the entire text in the URL bar requires tampering with `omni.ja`.


  82. I’d like to be able to focus the URL bar with Cmd+D on MacOS. On Chrome it’s easy to create a custom shortcut in the Keyboard preferences, but that’s because it has a menu entry for it (File -> Open Location… in Chrome).

    That said I haven’t even been successful in editing omni.ja without killing Firefox and having to reinstall it. 🙁

  83. Rashik Nanda Avatar
    Rashik Nanda

    Hi Mike. I am trying to add a plaintext file in omni.ja via gecko. I add the filename under RESOURCE_FILES in the of my folder, and I can see it is added in /dist/res/bin in out folder. However, I don’t find it in the omni.ja. I also cannot read it using “resource://gre/res/filename”. Any help would be appreciated. Thanks.

  84. Hi Mike,

    maybe my question doesn’t belong here, but I just can’t find a solution. Considering Thunderbird and Firefox are quite close brothers, maybe you can suggest me at least what to try (or where to look)…

    I am patching ‘modules/MessageArchiver.jsm’ in omni.ja so I get Inbox folder in Archives (by default there is no one, meaning a yearly archive root folder is considered to be Inbox, and Sent folder becomes a subfolrer of it – it is ridiculous by my opinion and I really hate it).
    I’ve tried to put MessageArchiver.jsm in many different locations (in /usr/lib64/thunderbird subfolders as well as in my thunderbird profile) but it is simply not considered.

    Is there a way to override just 1 line of the file mentioned, or the function or the complete MessageArchiver.jsm? I am looking for a solution which may be persistent over the updates, so I wouldn’t need to patch omni.ja again and again…

    Thank you for the feedback in advance.

Leave a Reply

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