Mailing Lists
=============

These are the primary Mesa 3D / DRI mailing lists:

-  `mesa-users <https://lists.freedesktop.org/mailman/listinfo/mesa-users>`__
   - intended for end-users of Mesa and DRI drivers. Newbie questions
   are OK, but please try the general OpenGL resources and Mesa/DRI
   documentation first.

-  `mesa-dev <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>`__
   - for Mesa, Gallium and DRI development discussion. Not for
   beginners.

-  `mesa-commit <https://lists.freedesktop.org/mailman/listinfo/mesa-commit>`__
   - relays Git check-in messages (for developers). In general, people
   should not post to this list.

-  `mesa-announce <https://lists.freedesktop.org/mailman/listinfo/mesa-announce>`__
   - announcements of new Mesa versions are sent to this list. Very low
   traffic.

-  `dri-devel <http://lists.freedesktop.org/mailman/listinfo/dri-devel>`__
   - for the Linux/BSD Direct Rendering Module (DRM) kernel modules
   supporting Mesa's userspace drivers

-  `piglit <https://lists.freedesktop.org/mailman/listinfo/piglit>`__ -
   for Piglit (OpenGL driver testing framework) discussion.

.. note::

   You **must** subscribe to these lists in order to post to
   them. If you try to post to a list and you're not a subscriber (or if
   you try to post from a different email address than you subscribed with)
   your posting will be held for an indefinite period or may be discarded
   entirely.

Follow the links above for list archives.

The old Mesa lists hosted at SourceForge are no longer in use. The
archives are still available, however:
`mesa3d-announce <https://sourceforge.net/mailarchive/forum.php?forum_name=mesa3d-announce>`__,
`mesa3d-users <https://sourceforge.net/mailarchive/forum.php?forum_name=mesa3d-users>`__,
`mesa3d-dev <https://sourceforge.net/mailarchive/forum.php?forum_name=mesa3d-dev>`__.

IRC
---

join `#dri-devel channel <irc://irc.oftc.net/dri-devel>`__ on
`irc.oftc.net <https://webchat.oftc.net/>`__

OpenGL Forums
-------------

Here are some other OpenGL-related forums you might find useful:

-  `Khronos' OpenGL Community <https://community.khronos.org/c/opengl-general/34>`__
-  Usenet newsgroups:

   -  `comp.graphics.algorithms <news:comp.graphics.algorithms>`__
   -  `comp.graphics.api.opengl <news:comp.graphics.api.opengl>`__
   -  `comp.os.linux.x <news:comp.os.linux.x>`__
