Skip to content

Releases: tanrax/emacs-gpu

v0.4.2

12 Jun 19:56

Choose a tag to compare

emacs-gpu 0.4.2

Stability release for the GNU/Linux OpenGL backend: the buffer-switch
flicker is gone and all continuous animation now runs off a single,
bounded pump.

Fixed

  • One-frame flashes of old content when switching buffers. The
    flashed frame turned out not to come from the GL swapchain at all:
    it was the frame's XDBE back buffer, which keeps the last core-X
    render (the half-painted startup frame) forever once the GPU path
    takes over, and which an Expose event could swap on screen for one
    vblank. The backend now drops the back buffer when it owns the frame.
    Verified against the actual monitor scanout (kmsgrab at 60fps, 152
    buffer switches with cross-fades): zero anomalous frames, where the
    same soak previously detected dozens.

Changed

  • Single animation pump. Cursor effects, buffer cross-fades and
    inline video used to run on separate timers, each presenting on its
    own; together they could push presents well above the refresh rate,
    starving the Lisp timers and provoking driver-level stale-buffer
    glitches. One pump now advances everything and presents at most once
    per tick (60Hz while a fade runs, 30Hz otherwise, idle when nothing
    animates). Inline video plays at its native frame rate again (tick
    median 33.0ms; it used to slip to ~49ms under load).
  • The old per-subsystem primitives (gpu-anim-tick,
    gpu-transition-tick, gpu-video-tick) keep working; gpu-video-tick
    now only presents when there is a fresh frame or the rectangle moved.

The Metal (macOS) driver shares the pump consolidation; the XDBE fix is
X11-specific.

Downloads

  • emacs-gpu-0.4.2-macos-arm64.zip: macOS 13+ (Apple Silicon), signed
    and notarized, with native compilation (AOT) and tree-sitter. Unzip
    and drag to Applications, or brew install --cask tanrax/tap/emacs-gpu.
  • emacs-gpu_0.4.2_amd64.ubuntu24.04.deb: Ubuntu 24.04+ / Mint 22+.
  • emacs-gpu_0.4.2_amd64.debian12.deb: Debian 12 (bookworm).

Both include tree-sitter, native compilation (AOT) and the GStreamer
video path; they install as /usr/bin/emacs and conflict with the
distro emacs packages. EMACS_GPU_DISABLE=1 starts with the stock CPU
renderer.

Compared to the v0.4.0 macOS app, this build also picks up the image
texture-cache validation fix (cached textures are revalidated by image
spec, not pointer identity).

v0.4.1

11 Jun 23:17

Choose a tag to compare

emacs-gpu 0.4.1

Bugfix release for the GNU/Linux OpenGL backend.

Fixed

  • Black flicker with stale text during window resizes. The 0.4.0
    partial present cached the EGL surface size; when the window manager
    resized the window before Emacs processed the ConfigureNotify, the
    present blitted at the stale size into a freshly reallocated buffer,
    leaving an undefined (usually black) band beside the previous frame's
    content for a frame. The surface size is now re-validated whenever
    the buffer age cannot vouch for it, and a failed swap no longer
    desynchronizes the damage-tracking ring.

Reproduced and verified in a composited X session driven end to end
(typing, held arrows, wheel scrolling, mouse drags, buffer cross-fades,
window splits, isearch, text-scale, WM resizes, occlusion): one black
flash during resizes before the fix, zero dark or duplicated-content
frames after it.

Downloads

  • emacs-gpu_0.4.1_amd64.ubuntu24.04.deb: Ubuntu 24.04+ / Mint 22+.
  • emacs-gpu_0.4.1_amd64.debian12.deb: Debian 12 (bookworm).

Both include tree-sitter, native compilation (AOT) and the GStreamer
video path; they install as /usr/bin/emacs and conflict with the
distro emacs packages. EMACS_GPU_DISABLE=1 starts with the stock CPU
renderer.

The macOS app is unchanged from v0.4.0 (this bug is specific to the
OpenGL present path).

v0.4.0

11 Jun 19:19

Choose a tag to compare

emacs-gpu 0.4.0

The GNU/Linux backend arrives, and both backends get a much faster draw path.

GNU/Linux (OpenGL ES / EGL) — new

  • Full OpenGL backend behind the same neutral driver layer as Metal:
    text (CJK/BiDi/compositions/emoji), faces and decorations, fringes,
    images (PNG/JPEG/SVG/GIF), mode/tab lines, the four cursor types —
    pixel-accurate against the stock GTK/cairo renderer across a
    22-scenario parity suite.
  • Inline video via GStreamer (gpu-video-insert, gpu-video-mode).
  • Buffer-switch cross-fade and all the animated cursor effects
    (sonicboom, torpedo, spring, ripple, pixiedust, hollow, beam).
  • Build from source on any X11 distro: ./configure --with-gpu
    (Debian/Ubuntu package list in the README).

Performance (both backends)

  • Glyphs and solid fills now share one batched draw call, clipped on
    the CPU: full-frame redraws on Linux are now faster than the cairo
    backend (1.19x) on the integrated-GPU test machine; page scroll is
    at parity. At 4K the GPU leads every motion workload (1.8x-11.5x).
  • The OpenGL present blits only the damaged region, driven by
    EGL_EXT_buffer_age + eglSwapBuffersWithDamage (on by default,
    correct under any compositor).
  • Metal gets the same batched draw path (byte-identical output) plus a
    fringe-bitmap texture cache that also fixes a small memory leak.

Downloads

  • emacs-gpu-0.4.0-macos-arm64.zip: macOS app (arm64, macOS 13+),
    signed and notarized. Unzip and double-click, or
    brew install tanrax/tap/emacs-gpu.
  • emacs-gpu_0.4.0_amd64.ubuntu24.04.deb: Ubuntu 24.04+ / Mint 22+
    (and derivatives). sudo apt install ./emacs-gpu_0.4.0_amd64.ubuntu24.04.deb
  • emacs-gpu_0.4.0_amd64.debian12.deb: Debian 12 (bookworm).
    Same command. (Two .debs because Debian and Ubuntu ship incompatible
    libjpeg sonames.)

Both .debs are built --with-gpu --with-tree-sitter --with-native-compilation=aot, install as /usr/bin/emacs (they
conflict with the distro emacs packages) and include the GStreamer
video path; the GPU backend enables itself on X11, with
EMACS_GPU_DISABLE=1 as the opt-out.

macOS app

Universal feature set as 0.3.x (native-comp AOT + tree-sitter +
video player), rebuilt from the 0.4.0 tree. arm64, macOS 13+.
Unzip and double-click; or brew install tanrax/tap/emacs-gpu.

v0.3.2

09 Jun 10:15

Choose a tag to compare

What's fixed

Hovering the mouse over text drawn in a non-default font (for example shr / variable-pitch links in an elfeed entry) garbled the highlighted glyphs. The GPU drawing policy now resolves glyphs through the glyph string's own font instead of the highlight face's font, matching the native NS and X backends.

Build

Same as 0.3.1: arm64, signed and notarized, native-compilation (AOT) + tree-sitter, deployment target macOS 13 (Ventura) and newer.

emacs-gpu 0.3.1

06 Jun 09:48

Choose a tag to compare

emacs-gpu 0.3.1

New

  • Video file player: visiting a video file (mp4, mov, m4v, 3gp) opens it in gpu-video-mode, a dedicated buffer that autoplays and loops, fit to the window, with a play/pause button and a clickable, draggable timeline. From Dired just press RET. Animated GIFs keep using the built-in image-mode.

Changed

  • Rebased on the stable Emacs 31.0.90 tag (previous releases tracked the development branch).
  • Build ships with native compilation (AOT) and tree-sitter enabled.
  • README: example for enabling the sonicboom cursor effect; updated build instructions.

Install

brew install --cask tanrax/tap/emacs-gpu

Or download the zip below, unzip and move Emacs.app to Applications.

emacs-gpu 0.3.0

06 Jun 08:15

Choose a tag to compare

emacs-gpu 0.3.0

New

  • Video file player: visiting a video file (mp4, mov, m4v, 3gp) opens it in a dedicated buffer (gpu-video-mode) that autoplays and loops, fit to the window, with a play/pause button and a clickable, draggable timeline. From Dired just press RET. Animated GIFs keep using the built-in image-mode.
  • New commands/functions: gpu-video-seek, gpu-video-duration, gpu-video-position, gpu-video-playing-p, gpu-video-size.

Build

  • The release now ships with native compilation (AOT) and tree-sitter enabled.
  • Self-contained, signed and notarized Emacs.app (Apple Silicon, macOS 13 Ventura or newer).

Install

brew install --cask tanrax/tap/emacs-gpu

Or download the zip below, unzip and move Emacs.app to Applications.

v0.2.0

05 Jun 18:45

Choose a tag to compare

emacs-gpu 0.2.0

Highlights

  • Starts on the GPU automatically. When built --with-mtl and Metal is
    available, the backend is loaded and enabled on the initial frame at
    startup, for both the app bundle and source builds. Start with the stock
    Cocoa backend by setting EMACS_GPU_DISABLE to any non-empty value.
  • Commands available out of the box. gpu-enable, gpu-status,
    gpu-set-cursor, gpu-toggle-animations and gpu-set-scroll are now
    autoloaded, so M-x finds them without requiring gpu first.
  • Cursor effects no longer fire while typing. The motion effects
    (sonicboom, ripple, pixiedust and the torpedo trail) trigger only on
    cursor movement and jumps, not on inserting or deleting text. Configure
    with gpu-cursor-effects-while-typing and gpu-cursor-typing-commands.

Compatibility

  • Apple Silicon, macOS 13 Ventura or newer. The macOS 13/14 support is still
    experimental (see notes in 0.1.2); testers on Ventura/Sonoma/Sequoia are
    welcome.

Install

brew upgrade --cask emacs-gpu

Or unzip the attached Emacs.app (signed and notarized) and double-click it.

emacs-gpu 0.1.2

05 Jun 17:53

Choose a tag to compare

GNU Emacs with a native Apple Metal rendering backend (macOS, Apple Silicon).

What's new in 0.1.2

  • Lower minimum macOS to 13 (Ventura). The Emacs binary is now built
    with a 13.0 deployment target and the macOS 14+ CADisplayLink path is
    guarded (continuous animation runs on a timer anyway). The bundled
    libraries' minimum-OS field is set to 13.0.
    • Experimental: this build is developed and runtime-tested on macOS
      26 only. The bundled third-party libraries are built against a newer
      SDK with their minimum-OS lowered, not recompiled from source. It
      should install and run on macOS 13/14/15, but that has not yet been
      verified on real hardware. Reports from Ventura/Sonoma/Sequoia users
      are very welcome.

Install

brew install --cask tanrax/tap/emacs-gpu

Or unzip the attached Emacs.app and double-click it.

Signed with a Developer ID, notarized and stapled by Apple. Self-contained
(all non-system libraries bundled). Apple Silicon only.

emacs-gpu 0.1.1

05 Jun 14:35

Choose a tag to compare

GNU Emacs with a native Apple Metal rendering backend (macOS, Apple Silicon).

What's new in 0.1.1

  • Fix: gpu-set-cursor now applies immediately. Changing the cursor
    effect at runtime updated only the Lisp variable and never reached the
    live Metal driver. It now propagates on the fly.
  • The default cursor has no effect. gpu-cursor-animation now defaults
    to block (a static cursor, pixel-identical to the stock backend). The
    ring/trail/particle effects are opt-in via M-x gpu-set-cursor. Buffer
    cross-fades stay on by default.

Install

brew install --cask tanrax/tap/emacs-gpu

Or unzip the attached Emacs.app and double-click it.

Signed with a Developer ID, notarized and stapled by Apple. Self-contained
(all non-system libraries bundled). Requires Apple Silicon and macOS 26+.

emacs-gpu 0.1.0

04 Jun 07:25

Choose a tag to compare

First public release of emacs-gpu: GNU Emacs (development master) with a GPU-accelerated display backend, rendering with native Apple Metal on macOS.

Highlights

  • Pixel-accurate output against the stock Cocoa (CoreGraphics) backend
  • Performance on par with the stock backend, with an optional vsync mode that cuts CPU ~35% under sustained scrolling (see the README benchmarks)
  • Text through a GPU glyph atlas: CJK, BiDi, ligatures, combining accents, color emoji, variable-pitch
  • Images as textures (PNG/JPEG/SVG/WebP/TIFF, scaling, rotation, slices) and animated GIFs
  • Inline video (gpu-video-insert): AVFoundation decoded straight into Metal textures, follows scrolling
  • Experimental GPU cursor effects (gpu-animations)
  • Platform-neutral drawing core: OpenGL for GNU/Linux and Windows is planned (src/gfxdrv.h is the driver interface, src/glterm.c the skeleton)

Binary

emacs-gpu-0.1.0-macos-arm64.zip contains a fully self-contained Emacs.app, signed and notarized by Apple: unzip and double-click. All libraries (gnutls, image codecs, SVG) are bundled; Homebrew is NOT required.

The GPU backend, cursor effects and buffer cross-fades are enabled by default in the bundled app. Set the environment variable EMACS_GPU_DISABLE=1 to start with the stock Cocoa backend instead (handy for side-by-side comparison).

Requirements: Apple Silicon and macOS 26+. Intel Macs and older macOS: build from source (see the README).

SHA-256: b2e4e3bc057604c0784045c487e0cd79db2418977138d116b3081ee553561b7d

Experimental software. Issues are open as a public record but are not being answered for now.