# Introduction

xplr is a terminal UI based file explorer that aims to increase our terminal productivity by being a flexible, interactive orchestrator for the ever growing awesome command-line utilities that work with the file-system.

To achieve its goal, xplr strives to be a fast, minimal and more importantly, hackable file explorer.

xplr is not meant to be a replacement for the standard shell commands or the GUI file managers. Rather, it aims to integrate them all and expose an intuitive, scriptable, keyboard controlled, real-time visual interface, also being an ideal candidate for further integration, enabling you to achieve insane terminal productivity.

## Concept

### Hackable

xplr is built with configurability in mind. So it allows you to perform a vast set of operations and make it look and behave just the way you want.

A few things you can do with the xplr configuration

- Hacks
- Plugins
- Integrations

### Fast

Although speed is not the primary concern, xplr is already fast enough so that you can take it out for a walk into your `node_modules` or `/nix/store` any time you want, and it will only get faster. Still, if you feel like it's somehow making you slow, just report it. Most probably we're just waiting for someone to complain.

Tip: A quick and easy way to optimize the UI rendering is reducing the number of columns in the table.

### Minimal

xplr is being referred to as a File Explorer, not a File Manager. This is because at the core, xplr is only an explorer, and outsources the file management operations to external commands. This helps xplr stay minimal, and focus only on doing what it does best.

So, just like speed, minimalism isn't as as aggressively pursued as hackability. xplr simply prefers to stay minimal and looks for the opportunity to lose some kb if it makes sense.

## Features

Some of the coolest features xplr provide beside the basic stuff:

- Embedded LuaJIT for portability and extensibility.
- A simple modal system based on message passing to control xplr session using:
  - Keyboard inputs
  - Shell Commands
  - Lua Functions
  - Hooks
- Easy, typesafe message passing with `-m MSG` or `-M MSG` subcommands.
- Readline-like input buffer with customizable behavior to read user inputs.
- Switchable recover mode that saves you from doing unwanted things when in a hurry.
- Customizable layouts with built-in panels. For e.g.
  - Selection list to show you the selected paths in real-time.
  - Help menu to show you the available keys bindings in each mode.
  - Input & logs to read input and display logs.
  - Filter and sort pipeline to show you the applied filters and sorters.
- Custom file properties with custom colors can be displayed in the table.
- FIFO manager to manage a FIFO file that can be used to integrate with previewers.
- Virtual root with `--vroot` and `:v` key bindings.
- Different quit options:
  - Quit with success without any output (`q`).
  - Quit with success and the result printed on stdout (`enter`).
  - Quit with success and the present working directory printed on stdout (`:` `q` `p`).
  - Quit with success and the path under focus printed on stdout (`:` `q` `f`).
  - Quit with success and the selection printed on stdout (`:` `q` `s`).
  - Quit with failure (`ctrl-c`).

Q. What features should be added here? let us know.