rxvt is a lightweight, color-capable VT102 terminal emulator for the X Window System, designed as a resource-efficient replacement for xterm, particularly for users who do not require advanced features such as Tektronix 4014 emulation or extensive control sequences.[1] Originating from the Xvt terminal emulator developed by John Bovey in 1992, rxvt was heavily modified by Rob Nation in 1992–1993 as part of the FVWMwindow manager project to provide a simpler and lighter alternative.[1][2] Key features include support for up to 16 colors, a configurable scrollback buffer (defaulting to 64 lines, with a maximum of 65,535), multiple font encodings like ISO-8859 and EUC-JP, and options for text selection, insertion, and an optional scrollbar.[1] It emphasizes minimal resource usage, such as reduced swap space for multiple sessions, and is configurable via command-line options (e.g., for background, foreground, and font) or X resources like geometry and saveLines.[1] While the original rxvt project, coordinated by Geoff Wing, reached version 2.7.10 in 2002 and has been unmaintained since then but remains available via source distributions, active development has largely shifted to forks like rxvt-unicode (urxvt), which extends it with Unicode support, Xft fonts, Perl-based customizations, and daemon mode for improved efficiency across multiple windows and displays.[1][3][4] rxvt is valued in Unix-like environments for its simplicity, portability, extensibility, and separation from desktop environment dependencies, making it a preferred choice for power users seeking a fast, no-frills interface.[5]
History
Origins and Early Development
The rxvt terminal emulator originated as a fork of the xvt project, which was developed by John Bovey at the University of Kent in 1992.[1] xvt itself was designed as a lightweight X11 terminal emulator compatible with xterm but with reduced memory usage.[1] In the same year, Rob Nation significantly modified xvt to create rxvt, aiming to produce a more efficient VT102-compatible terminal that minimized resource demands, particularly swap space, while serving as a direct alternative to xterm for users not requiring advanced features like Tektronix 4014 emulation.[1]The name "rxvt" initially stood for "Rob's xvt," reflecting its creator's personal adaptation of the predecessor.[1][6] Early development focused on core VT102 emulation basics, including improved color support to enable richer text rendering without the overhead of full xterm configurability.[1] These initial efforts prioritized simplicity and performance, making rxvt appealing for resource-constrained Unix systems in the early 1990s.A key early milestone occurred in 1993, when rxvt version 0.5 was bundled with the first release of the fvwm window manager—also authored by Nation—on June 1, marking one of the project's earliest public distributions and highlighting its integration within lightweight X11 environments.[2] This bundling underscored rxvt's role as a foundational component for efficient desktop setups. Subsequent maintenance shifted to Mark Olesen in the mid-1990s.[6]
Official Releases and Maintenance
The official release history of rxvt began with version 2.0 in 1995, which introduced support for color text display, marking a significant enhancement over earlier virtual terminal emulators. Subsequent releases built on this foundation; for instance, version 2.18, announced on August 2, 1996, removed the integrated vttest utility to align with external testing tools developed by the community. The project achieved a stable milestone with version 2.6.4 on November 1, 2001, incorporating refinements for better X11 compatibility and performance. A preview release, version 2.7.10, followed on March 26, 2003, adding minor optimizations but remaining unfinished as the final official update. Project coordination transitioned from Olesen to Oezguer Kesim for versions 2.11 through 2.4.5, and then to Geoff Wing starting with version 2.4.6.[1]Under Olesen's stewardship in the mid-1990s, the project focused on bug fixes and incremental improvements, such as the addition of pseudo-transparency support in later versions, allowing rxvt windows to blend with desktop backgrounds using X11 compositing extensions. These changes emphasized reliability over major overhauls, with Olesen addressing compatibility issues reported by users in Unix-like environments.Development stagnated after the 2003 preview release due to shifting priorities of the maintainers, leading to no further official updates and rendering the original rxvt largely obsolete in modern systems lacking features like Unicode support. This gap prompted the emergence of community forks, such as rxvt-unicode, to fulfill ongoing needs. From its inception, rxvt has been distributed under the GNU General Public License version 2.0 or later, ensuring open-source accessibility for modifications and redistribution.
Technical Overview
Architecture and Design Principles
rxvt is implemented in the C programming language, leveraging the Xlib library for direct integration with the X Window System. This choice enables a lightweight, single-process architecture where the terminal emulator handles all operations within one process, including input/output management and display updates. The design employs an internal event loop to process X events, such as keyboard inputs and window resizes, ensuring responsive interaction without relying on higher-level toolkits.[7][8][1]Central to rxvt's design principles is minimalism, prioritizing a reduced memory footprint—typically around 3 MB in usage—to suit resource-constrained environments and older hardware. This is achieved through the separation of terminal emulation logic from window management responsibilities, allowing efficient handling of VT102-compatible sequences while avoiding bloat from unnecessary features. rxvt eschews dependencies on widget toolkits like Xt or Athena, opting instead for bare Xlib calls to minimize overhead and enhance portability across Unix-like systems. The rendering system utilizes bitmap-based methods for text display, optimizing performance on systems with limited graphical capabilities.[1][9][8]A key aspect of this architecture includes a scrollback buffer defaulting to 64 lines, which can be configured up to 65,535 lines via the saveLines resource, balancing history retention with memory efficiency. For broader compatibility, rxvt features a port to Cygwin, enabling X11-based operation on Windows while preserving core Unix behaviors. This VT102 emulation forms the foundation for standards compliance, with extensions handled modularly to maintain the emulator's lean profile. The project reached its final version 2.7.10 in 2003.[1][10]
Standards Compliance and Emulation
rxvt primarily emulates the VT102 terminal standard, providing support for basic escape sequences that enable cursor positioning, movement, and control, as well as character attributes such as bold, underline, and reverse video, and select DEC private modes for features like origin mode and auto-wrap.[1]In terms of function key handling, rxvt uses the same VT220-style escape sequences as xterm, where, for example, the F1 key sends ESC [ 11 ~. This aligns with common application expectations but can be configured if needed. Additionally, rxvt lacks full VT220 support, which excludes advanced capabilities like soft character sets for user-defined glyphs.[1][11][12]rxvt offers partial compliance with ANSI standards, including support for 16 colors (the standard 8 ANSI colors plus their high-intensity variants), configurable via resources like color0 through color15.[1] It defaults to the ISO 8859-1 character encoding and does not provide native Unicode support, limiting it to Latin-1 characters without multibyte handling.[1] Compliance was verified through integration with vttest up to rxvt version 2.18 by maintainer Mark Olesen, after which vttest was removed from the distribution to align with updated testing practices.[13]Among its limitations, rxvt does not support sixel graphics, a DEC extension for bitmap imaging, nor advanced mouse reporting modes beyond basic xterm extensions for button events and scrollbar interaction, which can be overridden with Shift or Meta keys.[1][11] These constraints reflect rxvt's emphasis on lightweight VT102 emulation over comprehensive DEC terminal features.
Features
Core Functionality
rxvt serves as a lightweight VT102 terminal emulator for the X Window System, providing essential text-based interaction for command-line applications. It displays text in a default 80-column by 24-row grid, allowing users to view and manage output from shell sessions or programs. Horizontal and vertical scrolling is facilitated through an optional scrollbar, enabled by default, which permits navigation through the scrollback buffer without altering the visible content.[1]Copy and paste operations rely on the X primary selection mechanism, where text is selected by dragging the left mouse button to highlight a region, and insertion occurs via the middle mouse button or the Shift-Insert key at the current cursor position. This approach integrates seamlessly with X11's selection handling, enabling quick transfer of text between rxvt instances or other X applications. Visual elements include a 16-color palette comprising eight standard ANSI colors and their high-intensity variants, supporting basic colored output from applications. The cursor blinks by default and can be customized in color, while selections are highlighted using reverse video, which swaps foreground and background colors for clarity.[1]Input is processed through standard VT102 keyboard mappings, ensuring compatibility with applications expecting traditional terminal key sequences, such as arrow keys for navigation and function keys for commands. Resize events trigger the SIGWINCH signal to notify running processes of dimension changes, allowing adaptive behavior like reflow of text in editors. The distribution includes rclock, a memory-efficient analog clock utility designed as a replacement for xclock, featuring reverse video mode and appointment reminders.[1][14]Performance is optimized for responsiveness, with low memory footprint—using much less swap space than xterm—making it suitable for resource-constrained environments or multi-session use. Colors and other visual aspects can be adjusted via X resources, such as specifying custom palettes in the .Xresources file.[1][5]
Customization and Extensions
Users can customize rxvt's appearance and behavior primarily through X resources defined in the ~/.Xresources or ~/.Xdefaults file, which allows fine-grained control over various settings.[1] These resources support the XTerm and Rxvt classes and include options for specifying a fixed-width font via the font resource, color schemes with background, foreground, and color0 through color15 for the 16-color palette, scrollback buffer size using saveLines (defaulting to 64 lines, with a maximum of 65,535), and border adjustments via internalBorder and externalBorder (up to 100 pixels).[1]For instance, a user might configure a larger scrollback history by setting rxvt.saveLines: 10000 and define the initial window dimensions with rxvt.geometry: 80x24 to match common terminal sizes.[1] Additional visual tweaks include enabling a bold font with boldFont or a menu font with mfont for italicized or special characters.[1]Command-line flags offer quick overrides for these resources at launch, such as -fn to select a font, -bg and -fg for background and foreground colors, -sl for scrollback lines, and -b or -w for internal and external border widths.[1] rxvt also supports reverse video mode, which swaps foreground and background colors, activated via the -rv flag or the reverseVideo resource for high-contrast displays.[1]In versions 2.7.x and later, pseudo-transparency was introduced through the inheritPixmap resource (a boolean option), allowing rxvt to inherit the parent window's pixmap for a simulated transparent background effect without true alpha blending.[1] However, the original rxvt's customization is limited to these static X resources and command-line options, lacking support for scripting or dynamic runtime extensions.[1]
Forks and Derivatives
rxvt-unicode (urxvt)
rxvt-unicode, commonly known as urxvt, originated as a fork of the rxvt terminal emulator, initiated by developer Marc Lehmann in November 2003 to introduce comprehensive Unicode support into the lightweight rxvt codebase.[15] The fork cloned the rxvt CVS repository on November 19, 2003, with the initial release (version 1.0) occurring shortly after on December 18, 2003.[16] This development addressed the limitations of the original rxvt, which lacked native handling for international character sets, by storing all text internally in Unicode (UCS-2 or UCS-4) and supporting locale-correct input and output.[3]A major enhancement in rxvt-unicode is its full UTF-8 rendering capability, combined with support for the Xft library to enable anti-aliased fonts, improving readability for complex scripts and modern display requirements.[3] Another key innovation is the integrated Perl extension system, which allows users to add advanced functionality through scripts, such as launching URLs with a click, seamless clipboard integration, and customizable keyboard shortcuts for tasks like incremental search or regex-based text selection.[3] These extensions leverage Perl's flexibility to extend the terminal's core without recompiling, making rxvt-unicode highly adaptable for power users.[17]The last stable release, version 9.31, was issued on January 2, 2023.[16] While Linux distributions continue to provide updates and patches for compatibility and performance, upstream development by Lehmann has not seen new releases since then.[16] It is widely integrated into major Linux distributions, including Arch Linux, where the package (version 9.31-9) was updated as recently as October 24, 2025.[18]rxvt-unicode introduces several unique features that distinguish it from its predecessor, including a daemon mode (urxvtd) that enables faster window launches by sharing resources across multiple instances and displays, reducing memory overhead.[3] It supports 256 colors natively, with extensions for true color (24-bit) via ISO 8613-3 sequences, along with transparency effects and window shading for aesthetic customization.[16] The Perl library further enables tabbed multi-session management and matcher plugins for highlighting or interacting with specific patterns, such as URLs or log entries, enhancing usability in scripting-heavy environments.[3]
Other Variants
Aterm, forked from rxvt version 2.4.8 around 1999, introduced support for anti-aliased fonts via Xft and visual enhancements such as semitransparent gradients and pseudo-transparency without additional resource overhead, tailored for integration with the AfterStep window manager.[19][20] It also featured off-focus text fading and image backgrounds using formats like JPEG and PNG through libAfterImage.[19] The project released its final version, 1.0.1, in August 2007 and entered maintenance-only mode thereafter, rendering it unmaintained and deprecated in favor of more modern alternatives.[21]Eterm, derived from rxvt 2.21 and extensively modified for visual customization, emphasized themed appearances with Enlightenment window manager integration, including pixmap backgrounds, transparency effects, and advanced rendering via the Imlib library for features like shaded and gradient elements.[22] Development, which focused on lightweight performance and IPC-based controls for dynamic theming, effectively ceased in the 2000s, leaving the project inactive with no significant updates since.[23]mrxvt, originating as a 2002 fork initially based on aterm (later shifting to rxvt 2.7.11), specialized in multi-tabbed functionality with support for split panes, customizable hotkeys, and features like true translucency, pseudo-transparency, and CJK input methods.[24] Its lightweight design aimed at efficient tab management and font handling via FreeType, but adoption remained limited due to competition from more feature-rich emulators.[25] The last notable release occurred around 2008, with activity halting by the early 2010s, marking it as inactive.[23]These variants, once innovative for specific visual or workflow needs, are now largely obsolete given advancements in terminaltechnology. Modern users are typically advised to adopt rxvt-unicode (urxvt) for comparable or superior functionality, and no major new rxvt forks have emerged since 2010.[21][23]