Catalog · How the catalog works
ReIDE
ReIDE is an ultra-lightweight, high-performance, and adaptive dark-mode IDE built from the ground up utilizing x86_64 Assembly, Free Pascal (FPC), and Rust. It runs directly on the X11 windowing system with zero heavy dependencies (no electron, no web-tech, no massive UI frameworks)
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
ReIDE
ReIDE is an ultra-lightweight, high-performance, and adaptive dark-mode IDE built from the ground up utilizing x86_64 Assembly, Free Pascal (FPC), and Rust. It runs directly on the X11 windowing system with zero heavy dependencies (no electron, no web-tech, no massive UI frameworks).
🚀 Key Features
- Hybrid Architecture:
- Assembly (x86_64): Optimized register-based char/icon blitter (
font.pas) with zero stack frame overhead. - Free Pascal: GUI framework, tab manager, X11 event loop, and Unix pseudo-terminal (PTY) shell spawner.
- Rust: High-performance tokenizer, code syntax highlighter, and shebang-based language detector.
- Assembly (x86_64): Optimized register-based char/icon blitter (
- Universal Language Highlighting: Dynamically parses shebang headers (
#!/bin/bash,#!/usr/bin/env python) and file extensions to support 15+ languages (Pascal, Rust, ASM, C/C++, Python, Go, JS/TS, HTML, CSS, Markdown, JSON, YAML/TOML). - Responsive Layout & Buffer Resizing: Listens to X11
ConfigureNotifyevents. Resizing the window reallocates the framebuffer on the fly, adjusts text scrolls, and scales the terminal dimensions dynamically. - Integrated PTY Shell Terminals: Multiple concurrent terminal tabs at the bottom with standard ANSI escape color parsing and process monitoring (automatically respawns shells if they exit).
- Live Debugger Panel: Dedicated
"Logs"tab displaying internal events (FFI calls, keys, window resizes) in real-time, backed up by file logs in/home/USER/.reide/logs/ide.log. - Session Persistence: Saves and restores your workspace, active tabs, and cursor offsets automatically when you close and reopen the editor.
- Top Utility Menu: Interactive buttons
[ New ] [ Open ] [ Save ] [ Save As ]for mouse-driven workflows.
⌨️ Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl + N |
Instantly create a new untitled buffer in a new tab |
Ctrl + O |
Open / Create file path input prompt |
Ctrl + S |
Save current active file |
Ctrl + A |
Clear all text in the active tab (reset cursor to 0,0) |
Ctrl + F |
Search text in active document (scrolls automatically) |
Ctrl + Q |
Safe Exit (saves session files & cursor positions) |
🛠️ Build & Installation
Prerequisites
You need the Free Pascal Compiler, Cargo (Rust), and X11 development headers installed on your system.
Debian / Ubuntu:
sudo apt update
sudo apt install fpc cargo libx11-dev makeCompilation
Compile the Rust shared library and FPC binary in one step using the provided Makefile:
makeRunning
To launch the IDE:
./ideTo open specific files directly in new tabs:
./ide main.pas src/lib.rs Makefile🔌 Creating Assembly Plugins
ReIDE features a lightweight, Unix-style plugin manager. Plugins are written in raw x86_64 Assembly (.asm), stored in the ~/.reide/plugins/ directory, and dynamically scanned by the IDE.
How it works:
- Dynamic Compilation: When you click a plugin from the
[ Plugins ]dropdown menu, the IDE compiles the raw.asmfile on-the-fly usingnasmandld:nasm -f elf64 -o plugin.o plugin.asm && ld -o plugin plugin.o - Text Filtering: Active plugins act as text streams. The IDE pipes the current editor buffer into the plugin's
stdin, captures the modified output fromstdout, and replaces the editor buffer in real-time. - Live Toggling: Click a plugin in the list to toggle it:
- Active (Red outline): Runs reactively on every keypress (e.g., converting all typed text to uppercase live).
- Inactive (Blue outline): Turns the plugin filter off.
Example: Uppercase Converter (uppercase.asm)
Save this code in ~/.reide/plugins/uppercase.asm to try it out:
section .bss
buf resb 4096
section .text
global _start
_start:
.loop:
; read(0, buf, 4096)
mov rax, 0 ; sys_read
mov rdi, 0 ; stdin
mov rsi, buf ; buffer
mov rdx, 4096 ; size
syscall
test rax, rax ; EOF or error
jle .exit
mov r8, rax ; save bytes read
mov rcx, 0 ; index
.process:
cmp rcx, r8
jge .write ; finished processing buffer, write it out
mov al, [rsi + rcx]
cmp al, 'a'
jl .skip
cmp al, 'z'
jg .skip
sub al, 32 ; to uppercase
mov [rsi + rcx], al
.skip:
inc rcx
jmp .process
.write:
; write(1, buf, r8)
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
mov rsi, buf
mov rdx, r8 ; bytes to write
syscall
jmp .loop
.exit:
mov rax, 60 ; sys_exit
mov rdi, 0 ; status 0
syscall📁 Project Structure
ide.pas— Main loop, X11 layout, text buffers, mouse/keyboard handler, PTY shell manager, and settings.font.pas— Contains the 8x16 console bitmap font and the custom x86_64 assembly blitter routines (DrawCharASM).src/lib.rs— Rust FFI library for tokenization, language detection, and custom tab icons.Makefile— Build script orchestrating Cargo and FPC compilers.
📝 License
This project is licensed under the GNU Affero General Public License v3 (AGPLv3). See the LICENSE file for details.

