Rudel (German for “pack” as in “pack of wolves”) is a collaborative editing environment for Emacs. Its purpose is to share buffers with other users in order to edit the contents of those buffers collaboratively. It supports multiple backends to enable communication with other collaborative editors using different protocols (most notably Gobby and possibly SubEthaEdit, unfortunately, connecting to the Gobby reference implementation server (infinoted) is currently broken).

Rudel mostly works in the background to change the behavior of the set of Emacs buffers for which it has been activated. These do not even have to have a certain minor mode enabled.

The user interface of Rudel consists of a set of key bindings, a menu entry and some visual status indicators, which are added to the text and mode line of buffers for which Rudel has been activated. This user interface is implemented as a global minor mode.

The image below shows a collaborative editing session with one Gobby and two Rudel clients (only one of these is visible).


If you use GnuEmacs 24 or later then Rudel is part of GNU ELPA, so you can download and install it using M-x package-install rudel RET.

If you use XEmacs or a version of GnuEmacs prior to 24 then you can download an archive of a released version from the download area of the Sourceforge project page.

The latest development versions are located in GNU ELPA, there has not been any activity in the sourceforge repositories for a long time. git clone -b externals/rudel git://


If you use GnuEmacs 24 or later, there are no other requirements.

Rudel should work with any version of GnuEmacs starting with 22. Older versions of GNU Emacs than 22 and versions of XEmacs may or may not work - they are not actively tested.

If you use an Emacs version prior to 24 then CEDET is required. CEDET contains the Emacs object system, EIEIO, which is used in Rudel’s object-oriented implementation. You can obtain CEDET from [1]. You need at least CEDET version 1.0pre6.

If you are using Emacs 23.2 or later, CEDET is included and does not need to be installed separately. On earlier versions of Emacs, CEDET can be difficult to install, so here’s some help:

(defun load-rudel ()
  ;; Do these in a shell in ~/src:
  ;; cvs login
  ;; cvs -z3 co -P cedet
  ;; cd cedet && make && cd ..
  ;; svn co rudel
  (add-to-list 'load-path "~/src/cedet/eieio")
  (add-to-list 'load-path "~/src/cedet/common")
  (add-to-list 'load-path "~/src/rudel/")
  (add-to-list 'load-path "~/src/rudel/jupiter")
  (add-to-list 'load-path "~/src/rudel/obby")
  (require 'rudel-mode)
  (require 'rudel-obby)

Autoloads and byte-compilation don’t work for Anonymous due to a strange CEDET dependency problem, but this should get you in a working state.


When installing from GNU ELPA, the setup is already taken care of.

If you installed manually then you should generate `rudel-loaddefs.el’ (open and evaluate `rudel-compile.el’ (see below) to generate the file) and load it.

Add the following to your personal Emacs configuration:

  (load-file "/PATH/TO/RUDEL/rudel-loaddefs.el")

This will set Rudel up to be loaded on demand (see AutoLoad) when one of the commands ‘rudel-join-session’, ‘rudel-host-session’ or ‘global-rudel-minor-mode’ is invoked. The auto loading information in rudel-loaddefs.el is distributed with older versions of Rudel, but has to be generated using rudel-compile.el in more recent versions.


When installing from GNU ELPA, compiling is already taken care of.

In order to achieve better performance, you can byte-compile the Rudel code. This can be done by opening rudel-compile.el in Emacs and invoking M-x eval-buffer. In recent versions of Rudel, this also generates auto loading information (see above).


If you want to connect to Gobby servers then you will also need the ‘gnutls-cli’ program (GnuTLS).


Rudel is a part of GNU ELPA, so patches and bug reports should be reported to the EmacsBugTracker, via ‘M-x report-emacs-bug’. Please put “Rudel” in the bug title. You can also try `#rudel’ on

When reporting bugs, please make sure to include the Emacs version, the Rudel version and a descriptions of the steps that lead to the bug.

List of existing Rudel bugs.

Questions and Feedback

Paste questions and feedback here.

/Parts of the contents of this section have been moved to /RudelDiscussionArchive.

Can’t get rudel to a join a session more than once. If emacs is exited and reloaded, it will neither recognize a session nor host one, nor is it able to join a session even if the host is specified. It returns a “join denied” error or something like that. It joins exactly one file where the spell checker and flyspell are operable. Additional files create errors.

I’d really like to be able to highlight other participants’ (point) - is this supported in the Obby protocol? Has anybody else looked into this? As a quick hack, i’m looking to notify the user that changes have been made outside of their current window (view of the buffer) - to make it easier to see if someone is editing line 1 when you’re looking at line 1024 for example

The obby protocol does not support highlighting point (or anything regarding the peer’s status that does not involve text changes).

It is easy to add “unofficial” messages to the obby protocol implementation as long as only Rudel clients and a Rudel server are involved. However, this would obviously break interoperability with Gobby. As a short-term workaround, a protocol backend similar to obby could be made available for this case. This would allow developing the necessary user interface.

The long-term solution should probably be based on the infinote protocol (used by Gobby starting with version 0.5), which does support user status, cursor position and selection signaling. Rudel’s infinote support is under development and not yet usable in production.

The alternate approach you suggest would also be nice as a protocol-independent feature. It should not be too hard to implement either. Protocol-independent tracking of user status is already available in a branch. Maybe you can visit the IRC channel to discuss this issue further? --JanMoringen

Contributed Code

Send Chat Messages (obby Protocol only)

Since this was requested once but is not suitable for Rudel itself, it’s probably the best solution to share it here:

(defun rudel-chat-send-message (text)
   (list (read-string "Text: ")))
  (let ((connection (oref rudel-current-session :connection)))
    (rudel-send connection "obby_message" text)))

(defun rudel-chat-send-current-line ()
  (let ((end   (point))
	(start (save-excursion
    (rudel-chat-send-message (buffer-substring start end))
    (delete-region start end)))

;; eval in *rudel-chat-log-buffer*:
(local-set-key (kbd "RET") #'rudel-chat-send-current-line)