A Lisp interpreter for personal data management. Database, agenda, and automation — all in one language.
Inspired by dBASE III and Lotus Agenda. Built in pure Swift with SQLite.
A complete Lisp with 80+ builtins, 17 data types, macros, and a SQLite-backed persistence layer.
First-class functions, closures, macros, quasiquoting, pattern matching. Lexical scoping with a prelude of utility functions like pipe, partial, compose.
Define typed tables, insert records, query with SQL-like filters, update, delete. Interactive browse and edit views. Calculator forms with defform.
Items, hierarchical categories, auto-categorization rules, saved views, smart NLP input, recurring items, templates, and multiple agendas.
Runs embedded inside EEditor — a native editor for macOS, iOS, and iPadOS. The REPL, calendar, and forms all live inside the editor.
Built-in HTTP client (http-get, http-post) and JSON parser. Connect to APIs, fetch data, and process it all in Lisp.
Read, write, and list files. Get and set clipboard contents. Sandboxed file access for safety. Automate text workflows.
Typed tables, CRUD operations, interactive forms, and SQL-like queries.
;; Create a typed table (deftable contacts (name:string email:string age:number active:bool)) ;; Insert records (insert contacts {:name "Alice" :email "alice@co.com" :age 30}) ;; Query with filters (query contacts :where "age > ?" :params (list 25) :order "name")
;; Calculator form with computed fields (defform loan-calc (principal:number rate:number years:number) :computed ((monthly-rate (/ rate 1200)) (num-payments (* years 12)) (monthly-payment (* principal (/ (* monthly-rate (pow (+ 1 monthly-rate) num-payments)) (- (pow (+ 1 monthly-rate) num-payments) 1)))))) ;; Choice fields & table-backed forms (defform ticket (title:string (priority:choice "High" "Medium" "Low")) :source tickets)
A powerful personal information manager with categories, rules, views, and natural language input.
;; Natural language — auto-parses dates, priority, people (add "Meet Alice tomorrow for coffee !!") ;; → when: tomorrow, priority: 2, who: Alice (add "URGENT fix server crash") ;; → priority: 1 ;; Hierarchical categories (defcategory work/projects) (defcategory priority :exclusive true :children (high medium low)) ;; Auto-categorization rules (defrule urgent-flag :when (str-contains text "URGENT") :assign "priority/high")
;; Saved views — dynamic perspectives on your data (defview overdue :source items :filter (overdue?) :sort-by when) (defview inbox :source items :filter (= (length categories) 0)) ;; Recurring items (add-item "Team standup" :when "2026-02-24" :recur :weekly) ;; Templates (deftemplate weekly-review :text "Reflect on goals" :category "work" :priority 2) (from-template weekly-review :when "2026-03-14")
EELisp runs standalone or embedded inside EEditor — a fast, native editor for Apple platforms.
browse, edit, and defform render as rich UIcursor-pos, selection, buffer-text, insert-atGet up and running in under a minute.
EELisp is a Swift package. Clone it and build with SwiftPM.
git clone https://github.com/user/eelisp cd eelisp swift build
Start the interactive REPL or evaluate expressions directly.
swift run eelisp # REPL
swift run eelisp -e "(+ 1 2)"
swift run eelisp script.el
Create tables, add agenda items, or open it inside EEditor.
(deftable tasks (title:string done:bool)) (add "Ship v1.0 tomorrow !!") (items)