https://github.com/tracyspacy/fli
cli tool to list directory content
https://github.com/tracyspacy/fli
command-line files libc ls rust rust-no-std terminal tools
Last synced: 12 days ago
JSON representation
cli tool to list directory content
- Host: GitHub
- URL: https://github.com/tracyspacy/fli
- Owner: tracyspacy
- License: mit
- Created: 2026-06-05T08:57:57.000Z (28 days ago)
- Default Branch: main
- Last Pushed: 2026-06-17T12:01:28.000Z (16 days ago)
- Last Synced: 2026-06-17T12:05:47.072Z (16 days ago)
- Topics: command-line, files, libc, ls, rust, rust-no-std, terminal, tools
- Language: Rust
- Homepage:
- Size: 81.1 KB
- Stars: 9
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# fli
**fli** is a cli tool to list directory content

# Why
I have access to my raspberry pi zero via ssh only. As for me it is hard to differentiate types of files etc based on colors, I needed something more readable and clear like picture/icon or emoji as I ended up with etc. And I decided to build fli and since `ls` is obviosly preinstalled on almost any machine, the second requirement for `fli` as a complimentary tool, is to be tiny.
**Thus fli is a tiny (18KB), easy to read file listing tool.**
While working on fli, another aspect of my interest and motivation is to check if with Rust one can build coreutils-like tools, but faster and smaller.
**Readability**: Nice readability thanks to use of emojis (📄 and 🗂️) instead of text coloring.
**Speed**: By default directory entries are streamed directly from `readdir()` to stdout without heap allocation.
**Size:** Since rust `std` contributes heavily to binary size, this project is `no_std` + `libc` (**it contains unsafe code blocks**).
**Binary size:**
- M series mac: **51 KB**,
- rpi zero w : **18 KB**.
#### Current display options:
- `fli` : short (name and type) not sorted output - direct stream, no heap allocation
- `fli -s`: short (name and type) sorted by name output - uses heap allocation
- `fli -l` : long (name, type, metadata ) not sorted output and fixed-sized alignment (20 chars for size and n_link) - direct stream, no heap allocation
- `fli -l -s`: long (name, type, metadata ) sorted by **name** output and dynamic alignment - uses heap allocation.
- `fli -l -S`: long (name, type, metadata ) sorted by **size** output and dynamic alignment - uses heap allocation.
New display options may be added soon.
### Build
**Build:** ```cargo build --release```
**Build with cross for raspberry pi zero w:** ```cross build --release --target arm-unknown-linux-gnueabihf```
**Copy to rpi** : ```scp /target/arm-unknown-linux-gnueabihf/release/fli @.local: ```
## View


**Sorted by name Long output:**

**Sorted by size Long output:**

**Symlink with path**

### Benchmarks