Skip to content

Plans regarding the Readline vs terminal-input-box libraries #901

Description

@chrisant996

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:

  1. I don't have an ETA yet -- this is just advance notice that this will likely come sometime in the next few months.
  2. Clink will remain fully compatible with Readline (.inputrc file, bindable commands, behaviors, etc).
  3. The internal implementation will be different, and some new related features will also light up in Clink.
  4. 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.
  5. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions