Skip to content


Repository files navigation


This library adds support for Simple Common Gateway Interface (SCGI) URLs to the built-in Emacs url library.

The SCGI protocol is intended as a replacement for the older CGI protocol, and is comparable to FastCGI or WAI, but much simpler. Thus, the SCGI protocol is most often used by web servers to communicate with a program that serves dynamically generated pages and files (instead of just static ones). SCGI is supported in web servers such as Apache, lighttpd, and nginx.

This library effectively makes Emacs take the place of a web server. This can be useful for testing, but not only that. It was originally developed for Mentor, an Emacs front-end for the BitTorrent client rtorrent, where it is used for remote procedure calls (RPC).

SCGI is described in more detail on Wikipedia. As far as I know, there is no RFC describing SCGI, nor is there any formal specification. On the other hand, the protocol is very simple; it is described in detail here.

SCGI URLs look like this: scgi://<host>:<port>. See below for an example.


url-scgi.el can be installed from GNU ELPA, an Emacs Lisp package archive that is enabled by default in Emacs.

Find and install url-sgi.el using this command:

M-x list-packages


First, require url-scgi:

(require 'url-scgi)

Now, to make an SCGI request with url-scgi, simply call url-retrieve or url-retrieve-synchronously with a URL starting with scgi://.

For example, let’s assume you have some program listening for SCGI requests on localhost port 5000. You can then issue a request containing the string some-data with:

(url-retrieve-synchronously "scgi://localhost:5000/some-data")

You will want to replace some-data with something relevant to the program you are talking to. Please refer to its documentation for details.

If your application supports XML-RPC (remote procedure calls) over SCGI, you can make such calls using url-scgi with the xml-rpc package. For example, if your program supports an XML-RPC method named foo, you would call it like so:

(require 'url-scgi)
(require 'xml-rpc)
(xml-rpc-method-call "scgi://localhost:5000" "foo")

For more, see the documentation of the xml-rpc package.


This library is part of GNU ELPA and therefore requires a copyright assignment to the Free Software Foundation for any non-trivial contributions.

Please email me a patch, or open a pull request on GitHub, according to your preferences.


You can find the latest version of url-scgi.el here:

Bug reports, comments, and suggestions are welcome! Email them to Stefan Kangas <> or report them on GitHub.