summaryrefslogtreecommitdiffstats
path: root/2026/talks/guile.md
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2026-10-17 19:48:59 -0400
committerSacha Chua <sacha@sachachua.com>2026-10-17 19:49:05 -0400
commitbce44a1ff46f6ef57457fcb514ee68cf3f34f7db (patch)
treeb638b1e0704e6fed3cc39a05505aabf22fdc948c /2026/talks/guile.md
parenteb63f9d719b738618803b9e2675ebc6d703030e1 (diff)
downloademacsconf-wiki-bce44a1ff46f6ef57457fcb514ee68cf3f34f7db.tar.xz
emacsconf-wiki-bce44a1ff46f6ef57457fcb514ee68cf3f34f7db.zip
add guile
Diffstat (limited to '')
-rw-r--r--2026/talks/guile.md71
1 files changed, 71 insertions, 0 deletions
diff --git a/2026/talks/guile.md b/2026/talks/guile.md
new file mode 100644
index 00000000..6e84f52c
--- /dev/null
+++ b/2026/talks/guile.md
@@ -0,0 +1,71 @@
+[[!meta title="æmacs: having a hoot with a guile emacs"]]
+[[!meta copyright="Copyright &copy; 2026 Akira Kyle"]]
+[[!inline pages="internal(2026/info/guile-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# æmacs: having a hoot with a guile emacs
+Akira Kyle (he/him) - <https://akirakyle.com/> , @akira.social on bsky, @akyle@mathstodon.xyz on fediverse, <mailto:akira@akirakyle.com>
+
+[[!inline pages="internal(2026/info/guile-before)" raw="yes"]]
+
+I spend most of my computing time split between two programs: Emacs and a
+web browser, and only one of them sparks joy. That's what drove my
+pandemic project, emacs-webkit, which put a browser inside pgtk Emacs. I
+came away thinking the more emacs-y design would be the other way around:
+an emacs that lives within the web platform. I've since tried starting on
+it more times than I'd like to admit, from attempting to rebase the
+original guile-emacs, to deleting as much C as I could get away with, to
+compiling Emacs with emscripten. Each attempt left me better
+understanding how GNU Emacs became *the* emacs, but the human-hours
+needed to disentangle, let alone port, the [horrors](https://emacshorrors.com/) from the depths of `src/` haunted
+my dreams.
+
+Meanwhile, pieces of this puzzle of bringing emacs 2 da web
+started falling into place. In 2023 the Spritely Institute announced
+Hoot: compiling Guile Scheme to WebAssembly with Wasm GC. Then at
+EmacsConf 2024, Robin Templeton announced the revival of the OG Guile
+Emacs, building on work by Larry Valkama (lyrra), who successfully
+rebased the decade-old branch onto GNU Emacs 31. Finally, LLM agents
+started seemingly autonomously coding compilers from scratch. With
+human-hours apparently no longer a barrier, why not try? After all, if
+the web is evolving toward a polyglot wasm environment, it ought to have
+an emacs! I'd either find out the limits of agentic coding, or end up
+with my "perfect emacs" (a win-win, or so I thought).
+
+æmacs is the
+result: my apologetically vibe-coded step towards that idea. The æmacs
+frontend is implemented in Guile, compiled to wasm with Hoot, and renders
+the UI in a webview. The backend is my fork of lyrra's exploratory
+"guilemacs" branch, which, after a year of slogging through slop, is now
+a pure Guile Scheme implementation of Emacs Lisp: no C `src/` horrors
+remain! All state lives in this backend, which talks to a frontend over a
+sexp websocket protocol, letting the UI render on a different machine.
+Perhaps someday, Hoot may compile guilemacs itself for the browser.
+
+æmacs/guilemacs breaks with full GNU Emacs compatibility (e.g. unicode
+only), but loads most of Emacs' lisp/ unmodified, plus packages like
+org-mode and magit. Focusing on bootstrapping myself into æmacs as my
+main editor has kept the scope somewhat sane. But bootstrapping an editor
+with LLMs inevitably led to bootstrapping a coding harness into it too.
+gptel-agent allowed me to retreat from Claude Code's we-know-best,
+one-size-fits-all TUI back into the zen of an emacs' diy kitchen sink,
+and vibe code æmacs inside æmacs.
+
+That's how I got what I've wanted since
+I started using Emacs: smooth, continuous, inertial scrolling, not just
+through org-mode buffers full of images, but through PDFs with aemacs-pdf
+and web pages with aemacs-webkit. Doing this takes hacks in GNU Emacs,
+but no disrespect, emacs is built for hacking. Unfortunately, while LLMs
+never tire of hacking, I do. The limits I found were my own, but at least
+æmacs is now my imperfect emacs.
+
+
+
+[[!inline pages="internal(2026/info/guile-after)" raw="yes"]]
+
+[[!inline pages="internal(2026/info/guile-nav)" raw="yes"]]
+
+