Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

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)

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate 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.
  • 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 ConfigureNotify events. 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:

bash
sudo apt update
sudo apt install fpc cargo libx11-dev make

Compilation

Compile the Rust shared library and FPC binary in one step using the provided Makefile:

bash
make

Running

To launch the IDE:

bash
./ide

To open specific files directly in new tabs:

bash
./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:

  1. Dynamic Compilation: When you click a plugin from the [ Plugins ] dropdown menu, the IDE compiles the raw .asm file on-the-fly using nasm and ld:
    bash
    nasm -f elf64 -o plugin.o plugin.asm && ld -o plugin plugin.o
  2. Text Filtering: Active plugins act as text streams. The IDE pipes the current editor buffer into the plugin's stdin, captures the modified output from stdout, and replaces the editor buffer in real-time.
  3. 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:

nasm
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.