For instance, here are images showing the hyphenation (animated), the dictionaries patch (animated), the progress bar, and the cover view:

...and here are a few screenshots of the JBPatch User Interface:

Description:

JBPatch (Java Bytecode Patch) is a framework which allows to replace/modify Kindle functionality, without having to physically modify the files present on the device. Patches are pluggable, meaning that everybody can create modifications, and you can install as many (or as few) as you want. This can only modify Java-based functionality, but that covers 100% of the UI of Kindle 1 - 4, and still about 75% of Kindle 5 (Kindle Touch / Paperwhite). Patches are generally expected to be rather small, and to modify very specific aspects. However, they can in principle be arbitrarily complex -- everything is possible!

So far, only patches for Kindle Touch and Paperwhite have been released. The general approach should work on other models though. If you find this interesting, and could test it on other devices, you're more than welcome to try it out, and to comment here. (UPDATE: thanks to arikfunke, a bare-bones JBPatch now works on the K3!)

Requirements:

Kindle Touch, Firmware 5.1.0 - 5.3.2.1, or Kindle Paperwhite, Firmware 5.3.1 - 5.3.4. However, the only firmwares that are actively supported are 5.1.2 (Kindle Touch) and 5.3.4 (Paperwhite). See this post, and the notes further below, for the reasons. To prevent your Kindle from automatically installing a newer firmware, use dsmid's BackDoorLock.

In addition, the user interface requires the Kindlet Jailbreak (mirror: update_k5_ALL_PW_ALL_kindlet_jailbreak_install.bin from prerequisites-all-supported-devices.zip in KUAL thread).

If you get a "Your device is not authorized as a Test Kindle" message when opening the UI, install the Developer Certificates Bundle (mirror: update_k5_ALL_PW_ALL_devcerts_install.bin from prerequisites-all-supported-devices.zip in KUAL thread).

Downloads / Source Code:
Download the file attached to this post to get the latest release version, and install as described in the contained README file.

Localizations:
JBPatch is completely localizable, but the download only includes english translations. Translations for other languages can be downloaded from here. Those files are updated hourly if changes to the translations are detected. More information is available in the Wiki.

The abovementioned page only contains downloads for languages that are officially supported on the Kindle Touch. Links to "unofficial" language packs can be found below:

hungarian (by hanog; translations only for the subset of patches supported on FW 5.3.x)

GUI Launcher Integration (KT):
If you wish to access JBPatch from the GUI Launcher, you can use this file. This is not required, just an optional feature.

New Patches:
As said, this is a pluggable mechanism, and you can enable as many patches as you want. Patches can be developed by everyone, but some reverse engineering skills are required. Here are some HOWTOs which walk you through the process of creating a patch: simple, more complex. Note that these are referring to a previous version of JBPatch. For newer versions, slightly more effort is required to accommodate for the UI requirements (but not for the actual patching itself).

Documentation / Contributions:
The primary source of documentation is now this Wiki page. The intention of that page is to consolidate the information contained in this thread in an organized and easily-accessible manner. In other words: everybody is more than welcome to modify the Wiki page and to improve its usefulness, by adding or clarifying topics, or by contributing new patches and localizations.

The Wiki page and this thread are meant to complement each other: think of the thread as the place where ongoing topics are discussed, while the Wiki page serves as a "one-stop-shop" for information. IMO, this merges the best of both worlds: cutting-edge, but sometimes "chaotic" discussions in the forums (chaotic in the sense that information tends to get lost, or difficult to find, as the discussion progresses), plus easily-accessible information on the Wiki. Of course, you are welcome to propagate important changes in the Wiki to this thread, and vice-versa.

Don't uninstall previous versions before updating. Just install the new version on top of the older one (but read all of the following notes).

If you are upgrading from any version lower than 4.0.0: While this isn't absolutely required, I strongly recommend to uninstall, then reinstall JBPatch.

If you are upgrading from a version between 2.2.0 and 3.2.0: no further action required.

If you are upgrading from a version between 2.0.0 and 2.1.2: all bundled patches are automatically updated, but you have to re-download any "non-bundled" patches. If you don't know what "non-bundled" even means, you can probably just ignore this notice.

If you are upgrading from version 1.3.1 or earlier: please remove all files in the opt/jbpatch/ directory (if it exists) before installing this version.

If you experience issues with the user interface after updating JBPatch (or a single patch), your localization files are probably out of date. The easiest way to fix this is to copy the most recent localization files to the device.

Update error 3 on installation?

Spoiler:

Use the "Update your Kindle" entry from the Settings menu, not the "Restart" one.

Other Notes:

Questions: Feel free to post your questions in this thread. However, please try not to ask questions which have already been answered many times before. No, I'm not asking you to read the thousands of posts in this thread, but please read at least the *entire* Wiki page, and use the forum's search function, before asking your question.

Patch requests: If you have a proposal about how an existing patch can be improved, or an idea for an entirely new patch, please post them in this thread.Unfortunately, because of Amazon's recent policy of aggressively re-obfuscating (almost) the entire framework with every new firmware release, chances that new patches will be developed are... rather small. More information here and here. Sorry, folks. If you want to complain, complain to Amazon.

Links: You are free to share and redistribute the JBPatch files in whichever way you please. However, note that the download links provided here are NOT stable links. In other words: DO NOT SHARE DIRECT DOWNLOAD LINKS to the files in this post; instead, link to THIS THREAD.

Kindle 3 users: Although not officially supported, JBPatch also works on the K3!

Spoiler:

This is completely off-topic - but since you already clicked on the "spoiler" button, you can as well watch the video, too. I think you'll like it

If you like JBPatch:
I sincerely hope that you find JBPatch useful. If you like the enhancements that it offers to your Kindle experience, you are more than welcome to donate a little something... but don't give your money to me. Please donate for a much more important cause, namely: for a Literacy project in Laos. You will make not only me happy. Thank you!

Note that this is NOT ready for prime time yet (consider it alpha at most), so installation is manual. I have only tested this on Kindle Touch 5.1.0 (because that's the only device I have around).

For the time being, if you have a different version or model, you won't see any effect, so don't even bother to install it. But if you are on 5.1.0 and are curious, then:

Rename the attached kpatcher.zip to kpatcher.jar and copy it to /opt/amazon/ebook/lib/

Modify /opt/amazon/ebook/bin/init.xargs: insert the line "-istart kpatcher.jar" above the "-istart portability-impl.jar" (i.e., kpatcher.jar should be the first "istart" line).

reboot, or simply killall cvm

Then, go to Menu > Settings, Menu > Legal and be prepared for a surprise

There is also Menu > Settings, Menu > Device Info to check out. And finally, try to enable TTS on a non-english (or TTS-disabled) book (and then go back to device info). Oh, and there's /tmp/kpatcher.log as well.

This is somewhat of a logical follow-up to this older post, but it is MUCH more powerful. In fact, with this approach, we can modify every single class in the framework, without having to overwrite Amazon's files or distributing copyrighted binary files. Yeeehaaa!

Note: As said, the "demo" works on KT 5.1.0 only. However, the general approach is suitable for all models (in fact, maybe even more for older models than for the Touch, because on older models the entire UI is in Java, which is not the case on KT).

Amazing, could not resist to check immediatelly. How the f... do you do all this stuff?

Well, it's a combination of curiosity, patience (to the point of masochism at times) and the will to break out of the Matrix and defeat the system... backed by 15+ years of reverse engineering experience, continuous learning and (in this case) relatively good knowledge of some of the more scary internals of Java.

Still, I would never have been able to do this without the truely excellent serp bytecode manipulation framework. In fact, I had used it for the first time for the localization, so without that, maybe this wouldn't even have crossed my mind. So you see, it's all a continuous process

BTW, it's astonishing with how little code (and relatively little effort, actually) this works. All of this together is only around 400 lines of code for now, and it's amazingly elegant (I think). You can simply decompile the code and you'll see

In short, the way that it works is by injecting a ClassLoader in the hierarchy as early as possible, which can then intercept all class load requests. And instead of loading classes normally, it can modify them (using the mentioned serp library) before they are loaded. This means that as little or as many changes as you want can be made. For example, the actual "TTS enabling" patch changes exactly one opcode, and consists of 7 lines of code in total.

Note that this is not fully dynamic, because classes cannot be redefined at runtime, but only once at load time. This is a limitation of the underlying JVM itself. Still, we can essentially arbitrarily change all classes without needing to touch a single original file. (Well, yeah, one. The configuration file )

I uploaded the source code a while ago (see first post). In the mean time, here is another version, which is closer to what I intend this to be. Individual patches can now be enabled/disabled by simply copying or removing files rom a folder.
The files more or less reflect my idea of where this should be going, but there's certainly more to do.

Oh, and I renamed it from kpatcher to jbpatcher ("Java Bytecode Patcher" instead of "Kindle Patcher", because the approach is not specific to the Kindle). So yes, entirely remove the previous stuff and install this one instead...