public-inbox - an "archives first" approach to mailing lists
------------------------------------------------------------

public-inbox implements the sharing of an email inbox via git to
complement or replace traditional mailing lists.  Readers may
read via NNTP, IMAP, POP3, Atom feeds or HTML archives.

public-inbox spawned around three main ideas:

* Publicly accessible and archived communication is essential to
  Free Software development.

* Contributing to Free Software projects should not require the
  use of non-Free services or software.

* Graphical user interfaces should not be required for text-based
  communication.  Users may have broken graphics drivers, limited
  eyesight, or be unable to afford modern hardware.

public-inbox aims to be easy to deploy and manage, encouraging projects
to run their own instances with minimal overhead.

Implementation
--------------

public-inbox stores mail in git repositories as documented
in https://public-inbox.org/public-inbox-v2-format.txt and
https://public-inbox.org/public-inbox-v1-format.txt

By storing and (optionally) exposing an inbox via git, it is
fast and efficient to host and mirror public-inboxes.

Traditional mailing lists use the "push" model.  For readers,
that requires commitment to subscribe and effort to unsubscribe.
New readers may also have difficulty following existing
discussions if archives do not expose Message-ID and References
headers.  List server admins are also burdened with delivery
failures.

public-inbox uses the "pull" model.  Casual readers may
follow the list via NNTP, IMAP, POP3, Atom feed or HTML archives.

If a reader loses interest, they simply stop following.

Since we use git, mirrors are easy to set up, and lists are
easy to relocate to different mail addresses without losing
or splitting archives.

_Anybody_ may also set up a delivery-only mailing list server to
replay a public-inbox git archive to subscribers via SMTP.

Features
--------

* anybody may participate via plain-text email

* stores email in git, readers may have a complete archive of the inbox

* Atom feed, IMAP, NNTP, POP3 allows casual readers to follow via local tools

* uses only well-documented and easy-to-implement data formats

Try it out now, see https://try.public-inbox.org/

Requirements for reading:

* any software capable of IMAP, NNTP, POP3 or following Atom feeds

Any basic web browser will do for the HTML archives.
We primarily develop on w3m to maximize accessibility.

Requirements (participant)
--------------------------

* any MUA which may send text-only emails ("git send-email" works!)
  Users are strongly encouraged to use the "reply-all" feature of
  their mailers to reduce the impact of a public-inbox as a
  single point of failure.

* The HTTP web interface exposes mboxrd files, and NNTP clients often
  feature reply-by-email functionality

* participants do not need to install public-inbox, only server admins

Requirements (server)
---------------------

See https://public-inbox.org/INSTALL

Hacking
-------

AGPL source code is available via git:

	git clone https://public-inbox.org/public-inbox.git
	git clone https://repo.or.cz/public-inbox.git
	torsocks git clone http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/public-inbox.git
	torsocks git clone http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/public-inbox

See below for contact info.

Contact
-------

We are happy to see feedback of all types via plain-text email.
public-inbox discussion is self-hosting on public-inbox.org
Please send comments, user/developer discussion, patches, bug reports,
and pull requests to our public-inbox address at:

	meta@public-inbox.org

Please Cc: all recipients when replying as we do not require
subscription.  This also makes it easier to rope in folks of
tangentially related projects we depend on (e.g., git developers
on git@vger.kernel.org).

The archives are readable via IMAP, NNTP or HTTP:

	nntps://news.public-inbox.org/inbox.comp.mail.public-inbox.meta
	imaps://;AUTH=ANONYMOUS@public-inbox.org/inbox.comp.mail.public-inbox.meta.0
	https://public-inbox.org/meta/

AUTH=ANONYMOUS is recommended for IMAP, but any username + password works

And as Tor hidden services:

	http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta/
	nntp://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/inbox.comp.mail.public-inbox.meta
	imap://;AUTH=ANONYMOUS@4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/inbox.comp.mail.public-inbox.meta.0

You may also clone all messages via git:

	git clone --mirror https://public-inbox.org/meta/
	torsocks git clone --mirror http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta/

POP3 access instructions are at:

	https://public-inbox.org/meta/_/text/help/#pop3

Anti-Spam
---------

The maintainer of public-inbox has found SpamAssassin a good tool for
filtering his personal mail, and it will be the default spam filtering
tool in public-inbox.

See https://public-inbox.org/dc-dlvr-spam-flow.html for more info.

Content Filtering
-----------------

To discourage phishing, trackers, exploits and other nuisances,
only plain-text emails are allowed and HTML is rejected by default.
This improves accessibility, and saves bandwidth and storage
as mail is archived forever.

As of the 2010s, successful online social networks and forums are the
ones which heavily restrict users' formatting options; public-inbox
aims to preserve the focus on content, not presentation.

Copyright
---------

Copyright all contributors <meta@public-inbox.org>
License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

Additional permission under GNU GPL version 3 section 7:

    If you modify this program, or any covered work, by linking or
    combining it with the OpenSSL project's OpenSSL library (or a
    modified version of that library), containing parts covered by the
    terms of the OpenSSL or SSLeay licenses, the copyright holder(s)
    grants you additional permission to convey the resulting work.
    Corresponding Source for a non-source form of such a combination
    shall include the source code for the parts of OpenSSL used as well
    as that of the covered work.
