# Libwww - the W3C Sample Code Library

Libwww is a general-purpose Web API written in C. It is a highly modular extensible API which can be used as the code base for writing Web clients and robots. The purpose of Libwww is to provide a sample implementation of HTTP and other Internet protocols and to serve as a testbed for protocol experiments. It has a rudimentary HTML parser which can only do the very basics. Please have a look at the Amaya Web client for a HTML browser/editor application and Jigsaw server for a full-blown server application.

## News and Updates

### Libwww Version 5.1a released March 21

This release is a "second generation" HTTP/1.1 implementation using persistent connections, pipelining, smart output buffering, and persistent caching. It is the code base that was used in the "Network Performance Effects of HTTP/1.1, CSS1, and PNG" paper. It has been tested against Jigsaw writte and Apache.

- Check out the list of new features
- Complete HTTP/1.1 compliant persistent cache manager
- Support for zlib based decompression
- Check out the new complete index of public function

This is expected to be the last release of Libwww. We are now moving to the Jigsaw code base, written in Java. Java provides a more powerful platform for experimentation than C, which will accelerate our new protocol experiments this year. This does not mean that W3C will not produce protocol sample code but merely that we have chosen to use a more powerful environment. Except for security fixes there will be no more patches or updates for libwww.

## Libwww Position Statement

What is the purpose of libwww? Can I use it as a developer tool for writing Web applications? How is it supported? Read answers to these questions and much more from the W3C position statement on libwww.

## Getting the Source Code

W3C Sample Code Library is covered by the MIT Copyright Statement, and with acknowledgment to CERN. We only release libwww and the example applications as source code - you must compile it yourself. The latest version is available in the following formats:

- compressed tar file (ca. 2.1M)
- gzip'ed tar file (ca. 1.4M)
- zip file (ca. 1.8M)

You can find old versions of the source code and diffs together with many other things on our FTP server and you can browse through the latest source files directly on our server. A packet contains the following components:

- Installation guide
- Source code
- Platform dependent make files
- Hypertext documentation
- Copyright statements and other legal mumbo jumbo

You can see how to unpack and compile the software in the README file, and you can find more information on how the Library is designed in the Library Architecture and how to use it in the User's Guide.

## Installation Guide and new Features

How do I get started using libwww? How can I compile it? What has changed in the latest release. Find out by starting here!

- Installation Guide for how to get started
- List of Platforms where libwww can be used
- Release Notes for the latest release
- Change history for older releases
- Current Working List. A highly dynamic
- Known Bugs and Patches - well, the world is not perfect and neither is libwww. This is a list of what we already know is wrong.
- Patches and Bug fixes - When you have modifications and want them to go into our code base then please fill out the form for Corrections, Modifications, and Patches and -send it to us. Otherwise we can not use the patch!

## User Documentation and Design Overview

We have a huge amount of documentation about the design of libwww and how to use it for building applications. Often, however, the easiest is to study the example applications which show in practice how to do tricks with libwww. We try to keep the documentation up to date but it may not always be the case. The best thing is to have a look the list of exported functions. This list is generated automatically and is always up to date.

- Documentation Overview
- The libwww Programming Style Guide
- Quick Overview and Easy Startup Examples
- Complete list of public functions in libwww
- Libwww Architecture - the design overview of how libwww is put together
- User's Guide - the APIs described from a User's perspective
- Library Interfaces- the APIs described in more details
- Compiling for direct WAIS access

## Mailing lists

Libwww has the following set of mailing lists that you are more than welcome to use! Before you send mail to the lists, please check out the archives - they often contain good information about how to solve problems. Please do not send mail directly to the authors - the mail load is already rather high and you will most probably get a better response time by using one of the following mailing lists.

www-lib@w3.org
  A public mailing list for an open discussion of ideas, diffs, new features etc. This is the most active list. See the information on mailing lists for details on how to subscribe.
www-lib-bugs@w3.org
  A `public` mailing mailing list where you can register bugs and ideas that you would like to get into the code base. Register them here, so that we don't forget about them!
w3c-lib@w3.org
  A W3C member mailing list for announcements of new member releases etc. See the information on W3C member mailing lists for details on how to subscribe

## Authors and Contributors

These people and many more have been involved in turning libwww into the shape it has today.

Henrik Frystyk Nielsen
  Designed and Implemented libwww up until version 5.0a
Tim Berners-Lee and Jean-Francois Groff
  Came up with the initial design and implementation of libwww
Eric Prud'hommeaux
  Provided the Windows integration and asynchronous event management along with many other features.
Anselm Baird-Smith
  Provided lots of help through many white-board discussions, especially on the HTTP/1.1 client side implementation.
Jose Kahan
  Integrated libwww with Amaya and provided feedback on client side API
Håkon W. Lie
  Integrated libwww with Arena
and many others for contributions and bug fixes