About Manned.org

Goal

The state of online indices of manual pages used to be a sad one. Existing sites used to only offer you a single version of a man page: From one origin, and often only in a single language. Most didn't even tell you where the manual actually originated from, making it very hard to determine whether the manual you found actually applied to your situation and even harder to find a manual for a specific system. Additionally, some sites rendered the manuals in an unreadable way, didn't correctly handle special formatting - like tables - or didn't correctly display non-ASCII characters.

Nowadays there are many good alternatives, but Manned.org was one of the sites created in order to improve situation. This site aims to index the manual pages from a variaty of systems, both old and new, and allows you to browse through the various versions of a manual page to find out how each system behaves. The manuals are stored in the database as UTF-8, and are passed through groff to render them in (mostly) the same way as they are displayed in your terminal.

This website is open source (MIT licensed) and written in a combination of Perl and Rust. The entire PostgreSQL database is available for download (see "Database download" below).

URL format

You can link to specific packages and man pages with several URL formats. These URLs will keep working in the future, so you should not have to worry about eventual dead links.

Man pages

The following URLs are available to refer to an individual man page:

/<name>/<8-hex-digits>
This is the permalink format for a specific man page (e.g. /ls/910be0ed).
/<name>[.<section>]
Will try to get the latest and most-close-to-upstream version of a man page (e.g. /socket or /socket.7). Note that this may fetch the man page from any available system, so may result in confusing scenarios for system-specific documentation.
/man/<system>/<name>[.<section>]
Will get the latest version of a man page from the given system (e.g. /man/ubuntu-xenial/rsync)
/man/<system>/<category>/<package>/<name>[.<section>]
Will get the latest version of a man page from the given package (e.g. /man/ubuntu-xenial/net/rsync/rsync)
/man/<system>/<category>/<package>/<version>/<name>[.<section>]
Will get the man page from a specific package version (e.g. /man/ubuntu-xenial/net/rsync/3.1.1-3ubuntu1/rsync)

Currently, the last three URLs will perform a redirect to the appropriate permalink URL, but this may change in the future.
In all URLs where an optional .<section> can be provided, the search is performed as a prefix match. For example, /cat.3 will provide the cat.3tcl man page if no exact cat.3 version is available. Linking to the full section name is also possible: /cat.3tcl. If no section is given and multiple sections are available, the lowest section number is chosen.

Packages

Linking to individual packages is also possible. These pages will show a listing of all manual pages available in the given package.

/pkg/<system>/<category>/<package>
For the latest version of a package (e.g. /pkg/arch/core/coreutils).
/pkg/<system>/<category>/<package>/<version>
For a particular version of a package (e.g. /pkg/arch/core/coreutils/8.25-2).

Note that this site only indexes packages that actually have manual pages; Linking to a package that doesn't have any will result in a 404 page.

The indexing process

All man pages are fetched right from the (binary) packages available on the public repositories of Linux distributions. In particular:

Arch Linux
The core, extra and community repositories are fetched from a local Arch mirror. Indexing started around begin June 2012. The i686 architecture was indexed until November 6th, 2016, packages after that were fetched from from x86_64.
Debian
Historical releases were fetched from http://archive.debian.org/debian/ and http://snapshot.debian.org/. For buzz, rex and bo, we're missing a few man pages because some packages were missing from the repository archives. Where available, all components (main, contrib and non-free) from the $release and $release-updates repositories are indexed.
CentOS
Historical releases were fetched from vault.centos.org, current releases from a local mirror. Where applicable, the following repositories were indexed: addons, centosplus, contrib, extras, os. The i386 architecture was indexed for versions lower than 7.0, since 7.0 the packages from x86_64 are indexed.
Fedora
Historical releases were fetched from archives.fedoraproject.org, current releases from a local repository. Fedora Core 1 till 6 are (incorrectly) called 'Fedora' here. To compensate for that, Fedora 3 till 6 also include the Extras repository. For Fedora 7 and later, the 'Everything' and 'updates' repositories are indexed. The i386 arch was indexed for Fedora 17 and older, the x86_64 arch starting with Fedora 18.
FreeBSD
Historical releases were fetched from http://ftp-archive.freebsd.org/mirror/FreeBSD-Archive/. The base installation tarballs are included in the database as packages prefixed with core-. The package repositories have also been indexed, except for 2.0.5 - 2.2.7 and 3.0 - 3.3 because those were not available on the ftp archive. Only the -RELEASE repositories have been included, which is generally a snapshot of the ports directory around the time of the release. The release dates indicated for many packages were guessed from the file modification dates in the tarball, and may be inaccurate. The i368 arch was indexed for FreeBSD 11.0 and older, the amd64 arch starting with 11.1.
Ubuntu
Historical releases were fetched from http://old-releases.ubuntu.com/ubuntu/, supported releases from a local mirror. All components (main, universe, restricted and multiverse) from the $release, $release-updates and $release-security repositories are indexed. Indexing started around mid June 2012. All releases before 2017 were indexed from the i386 repositories, starting with 17.04 the amd64 repositories were used.

Only packages for a single architecture (i386 or amd64) are scanned. To my knowledge, packages that come with different manuals for different architectures either don't exist or are extremely rare. It does happen that some packages are not available for all architectures. Usually, though, every package is at least available for the most popular architecture, so hopefully we're not missing out on much.

The repositories are scanned for new packages on a daily basis.

Database download

This site is backed by a PostgreSQL database containing all the man pages. Weekly dumps of the full database are available for download at http://dl.manned.org/dumps/.

Be warned that the download server may not be terribly reliable, so it is advisable to use a client that supports resumption of partial downloads. See wget's -c or curl's -C.

The database schema is "documented" at schema.sql in the git repo. Note that these dumps don't constitute a stable API and, while this won't happen frequently, incompatible schema changes or Postgres major version bumps may occur.

Other systems

Suggestions for new (or old) systems to index are welcome.

It would be great to index a few more non-Linux systems such as other BSDs, Solaris/Illumos and Mac OS X. Unfortunately, those don't always follow a binary package based approach, or are otherwise less easy to properly index.

In general, systems that follow an entirely source-based distribution approach can't be indexed without compiling everything. Since that is both very resource-heavy and open to security issues, there are no plans to include manuals from such systems at the moment. So unless someone comes with a solution I hadn't thought of yet, there won't be any Gentoo manuals here. :-(

Future plans

This site isn't nearly as awesome yet as it could be. Here's some ideas that would be nice to have in the future:

Copyright

All manual pages are copyrighted by their respective authors. The manuals have been fetched from publically available repositories of free and (primarily) open source software. The distributors of said software have put in efforts to only include software and documentation that allows free distribution. Nonetheless, if a manual that does not allow to be redistributed has been inadvertently included in our index, please let me know and I will have it removed as soon as possible.