The Readline library has some significant limitations that negatively impact Clink, it's difficult to maintain how the official Readline and Clink's modified fork have diverged, and it's difficult to support properly functioning integration between Readline and Clink.
So, I started the terminal-input-box project in July. It aims to be a cross-platform object-oriented independent implementation of a input box. It adds the ability to have more than one input box, to show custom borders, to control the width and height of the input box, to have integrated "extra lines" below the input box (e.g. for things like Clink's input hint row), and more. It has a basic set of built-in commands, and it has internal plumbing so a host (such as Clink) can add custom commands.
At some point, I'll incorporate that project into Clink. This is an outline of how that will happen:
- I don't have an ETA yet -- this is just advance notice that this will likely come sometime in the next few months.
- Clink will remain fully compatible with Readline (.inputrc file, bindable commands, behaviors, etc).
- The internal implementation will be different, and some new related features will also light up in Clink.
- My intent is that Clink will include both the Readline and terminal-input-box libraries for at least several months:
- Readline will be the default at first, and users will be able to opt into using the new library if they wish.
- Eventually, if all goes well, the new library will become the default, and users will be able to opt out into using Readline instead if they wish.
- However, the terminal-input-box project isn't far enough along yet (as of Sep 8, 2026) to be able to integrate it into Clink, and who knows what challenges might arise and complicate or interfere with the plan.
- The goal is that eventually, depending on how everything goes, Clink may be able to remove the Readline library once it's no longer useful/needed -- just like Clink long ago already replaced Readline's input line display routines and completion display routines.
While the terminal-input-box project is under MIT License and is a completely independent implementation of an input box, the licensing has nothing to do with why I'm replacing Readline (and I'm keeping the dependency on the GNU History library, so Clink is still subject to GPL, although Clink's source code is still under MIT License except for the Readline and History library source code). This change is happening because Readline has too many structural implementation limitations that keep being problematic for the Clink project.
The Readline library has some significant limitations that negatively impact Clink, it's difficult to maintain how the official Readline and Clink's modified fork have diverged, and it's difficult to support properly functioning integration between Readline and Clink.
So, I started the terminal-input-box project in July. It aims to be a cross-platform object-oriented independent implementation of a input box. It adds the ability to have more than one input box, to show custom borders, to control the width and height of the input box, to have integrated "extra lines" below the input box (e.g. for things like Clink's input hint row), and more. It has a basic set of built-in commands, and it has internal plumbing so a host (such as Clink) can add custom commands.
At some point, I'll incorporate that project into Clink. This is an outline of how that will happen:
While the terminal-input-box project is under MIT License and is a completely independent implementation of an input box, the licensing has nothing to do with why I'm replacing Readline (and I'm keeping the dependency on the GNU History library, so Clink is still subject to GPL, although Clink's source code is still under MIT License except for the Readline and History library source code). This change is happening because Readline has too many structural implementation limitations that keep being problematic for the Clink project.