Fact-checked by Grok 2 weeks ago

ELinks

ELinks is a free and open-source designed for command-line environments, supporting protocols such as HTTP and FTP while rendering frames and tables in a lightweight, customizable interface.
Originating as a of browser in the early , ELinks was initiated by developer Petr Baudis to incorporate extensive patches and enhancements that had stalled in the original project, aiming to create the most advanced text-mode available. It evolved from Links version 0.96, integrating features like scripting from the Links-Lua and emphasizing for portability across platforms including systems, Windows, and . Licensed under the GNU General Public License, ELinks prioritizes speed, clean rendering, and extensibility without unnecessary bloat, supporting additional functionalities such as cookies, bookmarks, SSL encryption, and background downloads.
The project remains actively maintained through a community-driven on , with the latest stable release, version 0.18.0, issued in December 2024, featuring fixes for 32-bit systems, Windows builds, and compatibility improvements. This ongoing development ensures ELinks' relevance for users in resource-constrained environments, such as servers or embedded systems, where graphical browsers are impractical.

History and Development

The original browser was developed by Mikuláš Patočka starting in 1999 as a text-mode browser designed to provide efficient navigation in environments. It quickly gained popularity among users of systems for its lightweight design and support for basic rendering without graphical dependencies. Patočka maintained the project as under the GPL, focusing on stability and compatibility across various platforms. By 2001, development of had stagnated at version 0.96, with subsequent releases limited to bug fixes and no acceptance of new features, prompting contributors to seek alternatives for innovation. This led to the creation of ELinks as a initiated by Petr Baudiš, known online as "pasky," who aimed to enable more liberal enhancements, faster development cycles, and community-driven improvements while building directly on the solid foundation of Links 0.96. The initial goals of ELinks emphasized developing the premier text-mode browser with a high-performance rendering optimized for speed and cleanliness, alongside exploratory support for minimal graphical modes—though text-based operation remained the core priority to preserve in resource-constrained settings. Baudiš began by applying the first experimental patches, known as the "-pb patches," to 0.96 in late 2001, establishing the branching point that separated ELinks from its parent project. These efforts culminated in the release of the first official ELinks version 0.1.0 on March 2, 2002, marking the formal launch of the project as an independent entity.

Key Milestones and Maintainers

A significant leadership transition occurred on September 1, 2004, when original developer handed over maintainership of ELinks to , as Fonseca is documented as the project's maintainer in official author listings following this period. This change allowed Baudiš to concentrate on other initiatives, while Fonseca oversaw subsequent development efforts. Around 2004–2005, ELinks incorporated scripting capabilities derived from the Links-Lua fork, substantially improving the browser's extensibility for user customization and automation. This integration enabled advanced scripting hooks, allowing modifications to rendering, navigation, and content processing without altering the core codebase. The release of stable version 0.10.0 on December 24, 2004, marked a key advancement, featuring tabbed browsing (building on earlier implementations) and enhanced table rendering for better document presentation. Subsequent releases, such as 0.11.7 in 2009, incorporated bug fixes and refinements to handling, maintaining stability amid evolving standards up to that point. Community developers played a vital role in ELinks' evolution, merging approximately 90% of relevant fixes from the Links 0.9x series into the ELinks codebase to ensure compatibility and robustness. In a notable event reflecting maintenance challenges, removed ELinks from its ports tree on March 17, 2017, due to unresolved vulnerabilities and insufficient upstream activity.

Current Status and Forks

In 2017, the ELinks project faced stagnation due to unresolved security vulnerabilities and lack of active maintenance, prompting Witold Filipczyk to the into a new project named felinks on November 17, 2017, aimed at applying security fixes and restarting development. This fork addressed critical issues, such as unpatched engine vulnerabilities, that had led to removals from distributions like earlier that year. On December 1, 2020, the felinks repository was renamed back to with approval from original maintainer Petr Baudis, allowing continued maintenance under Filipczyk to preserve the project's legacy name while ensuring ongoing updates. The primary development now occurs on at rkd77/elinks, where Filipczyk has led regular commits since the rename, focusing on bug fixes, translation improvements, and minor enhancements to maintain compatibility with modern standards. Active development persisted into 2024, with a preview release of version 0.18.0rc1 on December 7, 2024, introducing updates like bumping the JavaScript engine to version 128 for and , along with fixes for scripting errors and hidden element handling. This was followed by the stable release of version 0.18.0 on December 26, 2024, incorporating additional patches, such as improved redirect handling for HTTP status 308, and enhancements like ignoring unknown Hubbub parser elements. ELinks maintains its position among related Links family browsers, with the original Links 0.9x series limited to bug-fix maintenance without major feature additions, while the Links 2.x variant diverges by incorporating graphical rendering capabilities but receiving infrequent updates. An experimental project known as Links-hacked, which attempted to merge features from various forks, remains inactive with no recent development. As of April 2025, ELinks version 0.16.1.1-4.1ubuntu4 is included in Ubuntu's universe repository, reflecting its availability for general users, though it is absent from 9 repositories.

Features and Capabilities

Core User Interface and Navigation

ELinks employs a designed for emulators, prioritizing keyboard-driven interaction to facilitate without support. This setup renders in a linear, readable format within the terminal window, adapting to various screen sizes and resolutions through terminal capabilities. The interface includes a central for displaying , a title bar at the top showing the document title and any subpage indicators, a tab bar (visible when multiple tabs are open) for quick page switching, and a at the bottom providing details such as the current , link information under the cursor, or cursor coordinates. Tabbed browsing is a core feature that enables managing multiple documents simultaneously, introduced in the early development stages of ELinks to enhance multitasking in a text environment. Users activate a new tab with the 't' key, which opens a blank tab or loads a specified URL; alternatively, 'T' opens the current link in a background tab. Tab navigation occurs via the '<' and '>' keys to cycle through open tabs, or the Tab Menu (accessed with 'e') for more options like closing or duplicating tabs. As of version 0.18.0 (December 2024), an action to reopen the last closed tab has been added. The tab bar displays abbreviated titles for each open page, allowing visual identification even in constrained terminal spaces. The bookmarking system provides a structured way to save and organize frequently visited URLs, supporting hierarchical folders for categorization. Accessed primarily through the 's' key, which launches the Bookmark Manager dialog, users can add current pages via menu options, edit entries with descriptive titles and notes, or delete items as needed. Bookmarks are stored in a native format or optionally exported to XBEL for compatibility with other tools, ensuring persistence across sessions. Interaction relies on a menu-driven structure with intuitive dialogs for common tasks, including options , in-page searches, and file downloads. The Main Menu (invoked with Esc or F9) offers submenus for viewing , adjusting options, and accessing tools; the Link Menu (F8) handles link-specific actions like copying or following; and dialogs appear as overlays for focused operations, such as entering search terms or download paths. This design promotes efficiency in by minimizing keystrokes for routine actions. Basic hotkeys streamline navigation and core functions, fostering a command-line-like efficiency:
  • g: Opens the Goto dialog to enter and load a specific .
  • /: Initiates an within the current page, highlighting matches as typed.
  • q: Quits the current session after confirmation.
  • Up/Down s: Moves the cursor to the next or previous on the page.
  • Enter or Right : Follows the under the cursor.
  • PageUp/PageDown: Scrolls the view by full pages.
  • Insert/Delete: Scrolls line by line for finer control.
These bindings are part of the main keymap, with available but focused here on usage. The interface incorporates support for multiple languages in menus, dialogs, and prompts through gettext-based internationalization, enabling translations such as English, , and depending on available files and system settings. This localization ensures broader for non-English users in environments.

Rendering and Protocol Support

ELinks operates as a text-only , rendering content through a custom engine that supports basic structural elements without graphical output. It handles tables by formatting them within the terminal's character grid, preserving layout where possible to maintain in a linear text format. Frames are rendered by dividing the screen into virtual sub-windows using terminal escape sequences, such as or modes, allowing users to navigate between frame contents as distinct sections rather than linearizing them into a single flow. Basic CSS support is provided for styling attributes like bold and italic text, which are mapped to terminal color and attribute capabilities; as of version 0.18.0 (December 2024), rendering skips hidden elements. properties like flexbox are not implemented. The browser supports a range of network protocols essential for web access and file retrieval. Core protocols include HTTP and (requiring SSL/TLS libraries like for secure connections), enabling browsing of standard web pages and secure sites; as of version 0.18.0 (December 2024), HTTP 308 redirects are also handled. FTP is fully integrated for anonymous and authenticated file transfers, while local file access via the file:// scheme allows viewing of documents directly from the filesystem. Experimental support provides an internal client for peer-to-peer downloads from .torrent files, which must be enabled at and is disabled by default in most builds. Forms are managed interactively, with support for text fields, password inputs, textareas, checkboxes, radio buttons, select lists, and submit buttons; users can fill and submit them using navigation, with form history optionally pre-filling common fields. Links are numbered and navigable via or direct jumps, with hyperlinks to displayed as text placeholders (e.g., [IMG]) that can be followed to initiate downloads or launch external viewers. ELinks lacks native rendering, instead relying on configurable handlers to invoke external tools such as xv for X11-based viewing or feh for lightweight , integrated through mailcap files or elinks.conf settings. An integrated download system handles file retrievals in the background, supporting resumption of interrupted transfers for protocols like HTTP, FTP, and by tracking partial s and continuing from the last byte position when re-initiated. This feature aids in managing large or unstable connections, with downloads saved to a user-specified and progress monitorable via the .

Scripting and Customization

ELinks provides extensive scripting support through ECMAScript (JavaScript) and Lua, enabling users to automate tasks and extend functionality beyond its core features. The ECMAScript engine, integrated via the SpiderMonkey library since version 0.11.0, allows execution of user scripts from the ~/.elinks/hooks.js file, which is evaluated at startup. These scripts run with full user permissions and can interact with the browser via the global ELinks object, facilitating automation such as form filling by manipulating document elements before rendering. As of version 0.18.0 (December 2024), options like document.scripting_sleep_on_error, console.assert, and console.exit have been added for improved scripting control. Lua scripting, merged from the Links-Lua project, offers similar capabilities through hooks that intercept browser events, such as URL entry or document processing, and is loaded from ~/.elinks/hooks.lua. Both scripting languages support rewriting HTML content received from the server, URL transformations, and custom protocol handling, allowing for personalized extensions like ad filtering or search enhancements. Hooks in ELinks enable integration with external programs for handling specific s or content types not natively supported. For instance, the mailto: can be configured to invoke an external mail client like using the option protocol.user.mailto.unix = "mutt %h -s \"%s\"" in ~/.elinks/elinks.conf, where %h and %s placeholders insert the recipient and subject. Similarly, viewing is delegated to external applications via MIME type handlers, such as mime.handler.image.jpeg.program = "feh %c", which opens files in the Feh viewer. These hooks extend ELinks' support by data to user-specified tools, maintaining its lightweight nature while accommodating or email workflows. Key bindings can be fully customized to remap commands and adapt the interface to personal preferences, using the bind directive in ~/.elinks/elinks.conf. Bindings are organized by keymaps like main for browsing or menu for navigation, with syntax such as bind main Ctrl-R = redisplay to assign the redisplay action to Ctrl-R. Users can unbind defaults with = none or define new shortcuts for actions like viewing images (view-image) or searching (search), supporting modifiers like Ctrl-, Alt-, and special keys including function keys F1-F12. This flexibility allows tailoring workflows, such as Vi-like navigation or quick access to scripts. Dialog and menu appearances are modifiable through configuration options in elinks.conf, affecting colors, styles, and behaviors without scripting. Options like ui.colors.color.dialog.text = "lightgray black" set foreground and background colors for dialog elements, while ui.menu.type = 0 toggles between full-screen or layered displays. Menu items can be reordered or hidden via ui.menu.hidden = 1 for specific entries, enabling streamlined interfaces. These tweaks enhance by aligning the text-based with user aesthetics and efficiency needs. Representative examples illustrate scripting's power: A Lua hook for "filtering crap" uses string.gsub to remove unwanted HTML elements, such as ad columns from sites like LinuxToday, by targeting specific tags during the pre_format_html_hook. For enhanced search, the "go to URL on steroids" Lua script rewrites dialog input like ",gg unix browsers" into a Google query URL via pattern matching and substitution. ECMAScript equivalents can automate form pre-filling, for instance, by accessing ELinks.current_url and injecting values into form fields before submission. These scripts, available in the source distribution's contrib/lua/ and contrib/smjs/ directories, demonstrate how users create ad-blocking filters or integrated search tools.

Technical Details

Architecture and Implementation

ELinks is implemented primarily in , specifically adhering to the C89 standard to ensure broad portability across systems. This choice facilitates its lightweight nature and compatibility with resource-constrained environments. For support, ELinks integrates Mozilla's engine, which incorporates C++ components to handle parsing and execution, though this feature is optional and requires specific build configurations. The codebase follows a modular , dividing functionality into distinct components for HTML parsing, document rendering, network handling, and terminal-based management. It supports asynchronous to maintain responsiveness. This enables targeted development and maintenance of individual features, such as handlers that with the rendering . The HTML parser is a custom-built designed to tolerate quirks in , outputting formatted text for reliable rendering in . At its core, ELinks operates on an event-driven model that processes input and events through callbacks, supporting an asynchronous philosophy where operations like fetching do not halt user interaction. This approach optimizes responsiveness in low-bandwidth or intermittent scenarios. The build system relies on Autotools, utilizing a to detect system capabilities and generate Makefiles for compilation. For modern Unix builds, is the primary system, with steps like meson setup build && meson compile -C build. Optional dependencies include libraries like libcurl for alternative implementations of protocols such as FTP, , and (enabled via configuration options like protocol.ftp.use_curl = 1), allowing builders to customize networking behavior without altering the core codebase. Compiled binaries are compact, typically ranging from 500 KB to 2 MB depending on enabled features, emphasizing optimization for low-resource deployments.

Platform Compatibility and Installation

ELinks is primarily designed for Unix-like operating systems, including Linux distributions and BSD variants such as FreeBSD, where it has been widely ported and maintained. It also supports DOS and Windows platforms through native ports or compatibility layers like Cygwin, enabling text-mode operation on these legacy and non-Unix environments. Installation on Unix-like systems is commonly achieved via distribution-specific package managers. On Debian-based distributions like Ubuntu, users can install ELinks using the APT package manager with the command sudo apt install elinks, which pulls in the latest available version from the repositories. Fedora and related systems support installation via DNF (or YUM on older releases), as ELinks is included in the standard repositories up to recent versions. However, it is notably absent from the base repositories of Red Hat Enterprise Linux 9 (RHEL9), requiring alternative sources or compilation for those environments. FreeBSD users can install it through the ports collection or pre-built packages managed by the ports system. For systems without pre-built packages or to customize the build, ELinks can be compiled from source. The process requires a C compiler such as and GNU Make (version 3.78 or later), along with the build system for modern builds or Autotools for legacy compatibility. Optional libraries enhance functionality, including GPM for mouse support in terminals and or for protocol handling. Compilation typically involves running ./configure && make && make install for Autotools or the Meson equivalent (meson setup builddir && meson compile && meson install), after which the binary is placed in the system path. Binary packages are available through GitHub releases from the official fork, providing source tarballs and occasional pre-built binaries for major Linux distributions up to version 0.18.0 (as of December 2024), though users should verify compatibility with their specific setup. ELinks offers full compatibility with standard terminal emulators such as and screen, ensuring reliable operation in console environments. It has limited support for modern high-DPI displays without manual terminal adjustments, as rendering is constrained by text-mode constraints. Runtime requirements for ELinks are minimal, allowing it to run on resource-constrained systems with as little as 4 MB of and no , making it suitable for or .

References

  1. [1]
    ELinks - Full-Featured Text WWW Browser
    ELinks is an advanced and well-established feature-rich text mode web (HTTP/FTP/..) browser. ELinks can render both frames and tables, is highly customizable.DownloadThe ELinks Manual
  2. [2]
  3. [3]
    rkd77/elinks: Fork of elinks - GitHub
    ELinks is an advanced and well-established feature-rich text mode web (HTTP/FTP/..) browser. ELinks can render both frames and tables, is highly customizable.
  4. [4]
    Releases · rkd77/elinks - GitHub
    Dec 26, 2024 · v0.17.0 · fix for some 32-bit systems and select-only builds · fix for gettext in Windows builds.
  5. [5]
    Links - About - Twibright Labs
    Mikuláš Patočka started writing Links (text mode those days) in 1999. In 2000 Marting Pergel, Petr Kulhavý and Karel Kulhavý joined the project to add graphics ...
  6. [6]
    ELinks Authors
    Oct 30, 2012 · Mikulas Patocka <mikulas@[…].karlin.mff.cuni.cz>: Original Links author. Maintains and makes Links-0.9x official releases. http://artax.karlin ...
  7. [7]
    ELinks - Free Software Directory
    Leaders and contributors. Contact(s), Role. Jonas Fonseca, Maintainer. See the AUTHORS file in the distribution or for a complete list, Contributor. Resources ...
  8. [8]
    Chapter 14. Scripting ELinks with Lua
    Lua scripting capabilities permit users to customize the ELinks behaviour to unusual degree - they allow automatic rewriting of HTML code of the received ...Missing: integration 2004 2005
  9. [9]
    Release info - ELinks
    Oct 30, 2012 · Released on 2008-09-21. This release also included the changes listed under “ELinks 0.11.5” below. bug 954, enhancement 952: Keep track of ...Missing: 0.1.0 | Show results with:0.1.0
  10. [10]
    'CVS: cvs.openbsd.org: ports' - MARC - Marc.info
    ... openbsd.org 2017/03/17 11:45:14 Removed files: www/elinks : Makefile distinfo www/elinks/patches: patch-configure_in patch-src_mime_backend_mailcap_c patch ...Missing: delete | Show results with:delete
  11. [11]
    Commits · rkd77/elinks
    **Summary of Commit Activity (2020–2025):**
  12. [12]
  13. [13]
  14. [14]
    Twibright Labs: Links
    - **Current Status**: No explicit status of Links browser provided for 2025.
  15. [15]
    elinks is not available in RHEL9 - Red Hat Customer Portal
    Aug 8, 2024 · Issue. elinks is not available in RHEL 9. What are the alternatives ? Environment. Red Hat Enterprise Linux 9. Subscriber exclusive content.
  16. [16]
    The ELinks Manual
    Summary of each segment:
  17. [17]
    elinkskeys(5)
    Sep 21, 2008 · Valid keys are: alphanumeric characters, punctuation, Enter, Backspace, Tab, Escape, Left, Right, Up, Down, Insert, Delete, Home, End, PageUp, PageDown, F1 to ...Missing: interface | Show results with:interface
  18. [18]
    Hacking ELinks
    Mar 29, 2009 · ELinks is based on the philosophy of asynchronism. That means, you pass a callback to each function, and when the requested task finishes sometime in the ...Missing: 2004 | Show results with:2004
  19. [19]
    elinks - man pages section 1: User Commands
    AUTHORS The Links browser - on which ELinks is based - was written by Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>. ELinks was written by Petr Baudis ...Missing: origins fork
  20. [20]
    elinks.conf(5)
    Oct 30, 2012 · The elinks.conf file contains configuration information for ELinks. It can be used to configure the behaviour of ELinks in a wide variety of ways.
  21. [21]
    elinks man | Linux Command Library
    It features advanced rendering for text browsers, including support for tables, frames, and basic CSS styling, which helps in presenting a more structured ...<|control11|><|separator|>
  22. [22]
    Chapter 15. Scripting ELinks with ECMAScript
    As a user of ELinks, you can control its behaviour by writing scripts in ECMAScript. Unlike scripts in SCRIPT elements of HTML, these user scripts run with ...Missing: customization | Show results with:customization
  23. [23]
    Example recipes - ELinks
    This chapter contains some example scripts that you can use. All of them come from contrib/lua/hooks.lua . I really recommend you to see it directly instead ...Missing: ad- blocking
  24. [24]
    ECMAScript support?! - ELinks
    Yes, there is some ECMAScript support in ELinks. There isn't anything we could call complete, but some bits could help with the most common ECMAScript usage ...Missing: Lua | Show results with:Lua
  25. [25]
    elinks.conf(5) — elinks-data — Debian unstable
    Dec 29, 2024 · The elinks.conf file is a free-form ASCII text file. The file may contain extra tabs and newlines for formatting purposes. Keywords in the file ...
  26. [26]
    Debian -- Details of package elinks in bookworm
    Download elinks ; 0.13.2-1+b4, 486.4 kB, 1,901.0 kB, [list of files] ; 0.13.2-1+b4, 487.8 kB, 1,650.0 kB, [list of files].
  27. [27]
    ELinks - Wikipedia
    ELinks is a text-based web browser for the operating systems DOS, Linux, and Windows. It is free and open-source software with a GNU General Public License (GPL) ...
  28. [28]
    Elinks Download for Linux (apk deb pkg rpm tgz txz xbps xz zst)
    Download elinks linux packages for ALT Linux, AlmaLinux, Alpine, Amazon Linux, Arch Linux, Debian, Fedora, FreeBSD, Mageia, NetBSD, OpenMandriva, Oracle LinuxMissing: 2004 | Show results with:2004
  29. [29]
    How to install Elinks on Ubuntu? - GeeksforGeeks
    Jul 23, 2025 · Not only on Ubuntu OS but the Installation of Elinks can be done on Windows OS & DOS as well. In this article, we will discuss the necessary ...Missing: platform compatibility
  30. [30]
    Getting ELinks up and running
    ### Summary of ELinks Installation
  31. [31]
    None
    ### Installation, Build Requirements, Optional Libraries, Platforms Supported
  32. [32]
    ELinks - ArchWiki
    Jun 7, 2025 · ELinks is an advanced and well-established feature-rich text mode web (HTTP/FTP/...) browser. ELinks can render both frames and tables, is highly customizable.