W3 is a web browser completely written in elisp which runs entirely (and only) within Emacs.

For most users who want to browse the web from within Emacs, emacs-w3m will be a better solution, not least because it is quite a bit faster, and as as of May 2010 probably offers a more bug-free browsing experience. Another alternative would be eww, which is written entirely in elisp like W3.

However w3 is very featureful for a text-mode browser, and since it is implemented entirely in Emacs Lisp, it can be extended in ways that w3m cannot.

w3 features forms, tables, frames and cascading style sheets (including support for aural css). In combination with EmacSpeak it can also do fancy things like reading web pages with a speech synthesizer.

Note that w3 should not be confused with other text-mode web browsers with names that contain “w3.” but are not related to the w3 discussed on this page:

How to get it

Emacs W3 requires Emacs 20.4 or greater.

As of March 2009, The latest version is available in ELPA.

Note that development seems to have stalled (around March 2008), and that w3 may have some unresolved bugs (see the dev list.

The project’s home page is:

You can get more information including CVS access to the old repository from Savannah:

Emacs W3 can also be downloaded from ftp://ftp.xemacs.org/pub/xemacs/emacs-w3/. That version is probably the most appropriate for XEmacs.


All development since 2006 has taken place on the git repository at: http://git.savannah.gnu.org/cgit/w3.git/

(The last activity spurt was in 2006-2008).

You can get the latest git version executing the following command:

    git clone git://git.sv.gnu.org/w3.git

URL Package

The URL package has been broken out of the core w3 package and is now standalone. It’s also available at subversions:

    cvs -z3 -d:pserver:anoncvs@cvs.savannah.gnu.org:/cvsroot/url co url


Emacs W3 implements some special functionality for EmacSpeak which allows a user to read the content of cells, rows and coloums of tables separate from each other.

The combination of Emacs W3 and EmacSpeak also implements the w3c standards for aural cascading style sheet (which means a web page designer can set voice properties which EmacSpeak can use when reading web content).

Some settings which may help in browsing unbrowsable web pages or emails

It may make the parsing of the web pages slightly slow, but if you are using emacsen you should be the last person to bother about speed.

Add this to your .init or InitFile.

  (add-hook 'w3-parse-hooks 'w3-tidy-page)

You need to download and install html tidy available from http://tidy.sourceforge.net/

Set this variable to the location of the program.

  (defvar w3-fast-parse-tidy-program "c:\\tidy")
  (defun w3-tidy-page (&optional buff)
    "Use html tidy to clean up the HTML in the current buffer."
        (if buff
	    (set-buffer buff)
          (setq buff (current-buffer)))
        (call-process-region (point-min) (point-max)
			     t (list buff nil) nil ;nil nil nil;
			     "--show-warnings" "no" "--show-errors" "0" "--force-output" "yes"
			     "-quiet" "-clean" "-bare" "-omit"
			     "--drop-proprietary-attributes" "yes" "--hide-comments" "yes"


Encoding charsets other than ascii or Latin-1

Is it posible to customize encodings in w3? Seems to me, it can display Latin-1 pages only. All other (cp1251, UTF-8 etc) become unreadable garbage. --DmitriBrechalov

/* w3m stuff removed */

What are you talking about? Please, read the text at the top of this page! I’m asking about w3, not w3m, sorry. --DmitriBrechalov

I don’t know what version of w3 are you using, but the version at the git repository that I’m testing does have UTF-8 support. --Ferk

Part of this page was created using Emacs W3 and EmacSpeak.

CategoryModes CategoryHypermedia