# Getting Involved

LLVM welcomes contributions of all kinds. To get started, please review the following topics:


```{toctree}
:hidden:

Contributing
DeveloperPolicy
CodeReview
SupportPolicy
SphinxQuickstartTemplate
HowToSubmitABug
BugLifeCycle
CodingStandards
GitBisecting
GitRepositoryPolicy
```

* {doc}`Contributing`

  An overview on how to contribute to LLVM.

* {doc}`DeveloperPolicy`

  The LLVM project's policy towards developers and their contributions.

* {doc}`CodeReview`

  The LLVM project's code-review process.

* {doc}`SupportPolicy`

  The LLVM support policy for core and non-core components.

* {doc}`SphinxQuickstartTemplate`

  A template + tutorial for writing new Sphinx documentation. It is meant
  to be read in source form.

* {doc}`HowToSubmitABug`

  Instructions for properly submitting information about any bugs you run into
  in the LLVM system.

* {doc}`BugLifeCycle`

  Describes how bugs are reported, triaged, and closed.

* {doc}`CodingStandards`

  Details the LLVM coding standards and provides useful information on writing
  efficient C++ code.

* {doc}`GitHub`

  Describes how to use the llvm-project repository and code reviews on GitHub.

* {doc}`GitBisecting`

  Describes how to use `git bisect` on LLVM's repository.

* {doc}`GitRepositoryPolicy`

  Collection of policies around the git repositories.

(development-process)=

## Development Process

Information about LLVM's development process.

```{toctree}
:hidden:

Projects
HowToReleaseLLVM
ReleaseProcess
HowToAddABuilder
ReleaseNotes
```

* {doc}`Projects`

  How-to guide and templates for new projects that *use* the LLVM
  infrastructure.  The templates (directory organization, Makefiles, and test
  tree) allow the project code to be located outside (or inside) the `llvm/`
  tree, while using LLVM header files and libraries.

* {doc}`HowToReleaseLLVM`

  This is a guide to preparing LLVM releases. Most developers can ignore it.

* {doc}`ReleaseProcess`

  This is a guide to validate a new release, during the release process. Most developers can ignore it.

* {doc}`HowToAddABuilder`

  Instructions for adding new builder to LLVM buildbot master.

* {doc}`Release notes for the current release <ReleaseNotes>`

  This describes new features, known bugs, and other limitations.

(lists-forums)=

## Forums & Mailing Lists

If you can't find what you need in these docs, try consulting the
Discourse forums. There are also commit mailing lists for all commits to the LLVM Project.
The {doc}`CodeOfConduct` applies to all these forums and mailing lists.

* [LLVM Discourse](https://discourse.llvm.org/)

  The forums for all things LLVM and related sub-projects. There are categories and subcategories for a wide variety of areas within LLVM. You can also view tags or search for a specific topic.

* [Commits Archive (llvm-commits)](http://lists.llvm.org/pipermail/llvm-commits/)

  This list contains all commit messages that are made when LLVM developers
  commit code changes to the repository. It also serves as a forum for
  patch review (i.e., send patches here). It is useful for those who want to
  stay on the bleeding edge of LLVM development. This list is very high
  volume.

* [Bugs & Patches Archive (llvm-bugs)](http://lists.llvm.org/pipermail/llvm-bugs/)

  This list gets emailed every time a bug is opened and closed. It is
  higher volume than the LLVM-dev list.

* [LLVM Announcements](https://discourse.llvm.org/c/announce/46)

  If you just want project-wide announcements such as releases, developers meetings, or blog posts, then you should check out the Announcement category on LLVM Discourse.

(online-sync-ups)=

## Online Sync-Ups

A number of regular calls are organized on specific topics. It should be
expected that the range of topics will change over time. At the time of
writing, the following sync-ups are organized.
The {doc}`CodeOfConduct` applies to all online sync-ups.

If you'd like to organize a new sync-up, please add the info in the table
below. Please also create a calendar event for it and invite calendar@llvm.org
to the event, so that it'll show up on the {ref}`llvm-community-calendar`.
Please see {ref}`llvm-community-calendar-host-guidance` for more guidance on
what to add to your calendar invite.

```{list-table} LLVM regular sync-up calls
:widths: 25 25 25 25
:header-rows: 1

   * - Topic
     - Frequency
     - Calendar link
     - Minutes/docs link
   * - Loop Optimization Working Group
     - Every first Wednesday of the month
     - [ics](./_static/LoopOptWG_invite.ics)
     - [Minutes/docs](https://docs.google.com/document/d/1sdzoyB11s0ccTZ3fobqctDpgJmRoFcz0sviKxqczs4g/edit)
   * - RISC-V
     - Every 2 weeks on Thursday
     - [ics](https://calendar.google.com/calendar/ical/lowrisc.org_0n5pkesfjcnp0bh5hps1p0bd80%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/b/1?cid=bG93cmlzYy5vcmdfMG41cGtlc2ZqY25wMGJoNWhwczFwMGJkODBAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ)
     - [Minutes/docs](https://docs.google.com/document/d/1G3ocHm2zE6AYTS2N3_3w2UxFnSEyKkcF57siLWe-NVs)
   * - ML Guided Compiler Optimizations
     - Monthly
     -
     - [Minutes/docs](https://docs.google.com/document/d/1JecbplF09l3swTjze-UVeLh4L48svJxGVy4mz_e9Rhs/edit?usp=gmail#heading=h.ts9cmcjbir1j)
   * - [LLVM security group](https://llvm.org/docs/Security.html)
     - Monthly, every 3rd Tuesday
     - [ics](https://calendar.google.com/calendar/ical/eoh3m9k1l6vqbd1fkp94fv5q74%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=eoh3m9k1l6vqbd1fkp94fv5q74%40group.calendar.google.com)
     - [Minutes/docs](https://discourse.llvm.org/t/llvm-security-group-public-sync-ups/62735)
   * - [CIRCT](https://github.com/llvm/circt)
     - Weekly, on Wednesday
     -
     - [Minutes/docs](https://docs.google.com/document/d/1fOSRdyZR2w75D87yU2Ma9h2-_lEPL4NxvhJGJd-s5pk/edit#heading=h.mulvhjtr8dk9)
   * - flang
     - Multiple meeting series, [documented here](https://github.com/llvm/llvm-project/blob/main/flang/docs/GettingInvolved.md#calls)
     -
     -
   * - OpenMP
     - Multiple meeting series, [documented here](https://openmp.llvm.org/docs/SupportAndFAQ.html)
     -
     -
   * - LLVM Alias Analysis
     - Every 4 weeks on Tuesdays
     - [ics](http://lists.llvm.org/pipermail/llvm-dev/attachments/20201103/a3499a67/attachment-0001.ics)
     - [Minutes/docs](https://docs.google.com/document/d/17U-WvX8qyKc3S36YUKr3xfF-GHunWyYowXbxEdpHscw)
   * - LLVM Pointer Authentication
     - Every month on Mondays
     - [ics](https://calendar.google.com/calendar/ical/fr1qtmrmt2s9odufjvurkb6j70%40group.calendar.google.com/public/basic.ics)
     - [Minutes/docs](https://discourse.llvm.org/t/llvm-pointer-authentication-sync-ups/62661)
   * - LLVM Embedded Toolchains
     - Every 4 weeks on Thursdays
     - [ics](https://drive.google.com/file/d/1uNa-PFYkhAfT83kR2Nc4Fi706TAQFBEL/view?usp=sharing)
       [gcal](https://calendar.google.com/calendar/u/0?cid=ZDQyc3ZlajJmbjIzNG1jaTUybjFsdjA2dWNAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ)
     - [Minutes/docs](https://docs.google.com/document/d/1GahxppHJ7o1O_fn1Mbidu1DHEg7V2aOr92LXCtNV1_o/edit?usp=sharing)
   * - Clang C and C++ Language Working Group
     - 1st and 3rd Wednesday of the month
     -
     - [Minutes/docs](https://docs.google.com/document/d/1x5-RbOC6-jnI_NcJ9Dp4pSmGhhNe7lUevuWUIB46TeM/edit?usp=sharing)
   * - LLVM SPIR-V Backend Working Group
     - Every week on Monday
     -
     - [Meeting details/agenda](https://docs.google.com/document/d/1UjX-LAwPjJ75Nmb8a5jz-Qrm-pPtKtQw0k1S1Lop9jU/edit?usp=sharing)
   * - SYCL Upstream Working Group
     - Every 2 weeks on Mondays
     - [gcal](https://calendar.google.com/calendar/u/0?cid=c3ljbC5sbHZtLndnQGdtYWlsLmNvbQ)
     - [Meeting details/agenda](https://docs.google.com/document/d/1ivYDSn_5ChTeiZ7TiO64WC_jYJnGwAUiT9Ngi9cAdFU/edit?usp=sharing)
   * - Formal Semantics Working Group
     - Every 2 weeks on Mondays
     - [gcal](https://calendar.google.com/calendar/event?eid=aHJpNnNzb3Zia3FtNzNuYjdpbmJtZG5nZGVfMjAyNjA1MDRUMTUzMDAwWiBjYWxlbmRhckBsbHZtLm9yZw)
     - [Meeting notes](https://docs.google.com/document/d/1muS2gZ7PUhbypbl0bmjb2J-UUzY7K8AO9a8RHVw_Mjo/edit?tab=t.0)
   * - Vectorizer Improvement Working Group
     - 3rd Tuesday of the month
     - [ics](https://www.icloud.com/iclouddrive/032PeZzdN6U4uRMwJRJPrS2Lw#Vectorizer_Improvements)
     - [Meeting details/agenda:](https://docs.google.com/document/d/1Glzy2JiWuysbD-HBWGUOkZqT09GJ4_Ljodr0lXD5XfQ/edit)
   * - [LLVM Qualification Working Group](https://llvm.org/docs/QualGroup.html)
     - Monthly: 2nd Tuesday (EU/Asia) and 2nd Friday JST / Thursday (Americas)
     - [ics](https://calendar.google.com/calendar/ical/f731f5b57956a132f6c553ed30f496b16e1018f831be13eb6c4b896c108a6626%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=f731f5b57956a132f6c553ed30f496b16e1018f831be13eb6c4b896c108a6626%40group.calendar.google.com&ctz=Asia%2FTokyo)
     - [Minutes/docs](https://discourse.llvm.org/t/llvm-qualification-wg-sync-ups-meeting-minutes/87148)
   * - MLIR C/C++ Frontend Working Group
     - Monthly, usually 1st Monday of the month
     - [ics](https://calendar.google.com/calendar/ical/jvceakm3kbpku3f4jrsv1lkigo%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=jvceakm3kbpku3f4jrsv1lkigo%40group.calendar.google.com&ctz=America%2FLos_Angeles)
     - [Minutes/docs](https://docs.google.com/document/d/1-flHK3TjQUrkSO2Fdt4webZ2zCyeXxpTLMiRQbMW7hE)
   * - ClangIR Upstreaming Coordination Meeting
     - Every 2 weeks on Mondays
     - [ics](https://calendar.google.com/calendar/ical/c_673c6cd64474c0aff173bf8fa609559f93d654e0984d9d91d71abd32d28c0486%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=c_673c6cd64474c0aff173bf8fa609559f93d654e0984d9d91d71abd32d28c0486%40group.calendar.google.com&ctz=America%2FLos_Angeles)
     -
   * - GlobalISel
     - Every 2nd Tuesday of the month
     - [gcal](https://calendar.google.com/calendar/u/0?cid=YWZjNzhmMzE4MDNlNTAyNGY1NmE1MDIyODY0YTYwZmJmYzRjYTEwNTE1NmUxODA2NzBkYTliY2ZhYTVkNjk0NUBncm91cC5jYWxlbmRhci5nb29nbGUuY29t)
     - [Meeting details/agenda](https://docs.google.com/document/d/1Ry8O4-Tm5BFj9AMjr8qTQFU80z-ptiNQ62687NaIvLs/edit?usp=sharing)
   * - Clang Static Analysis Working Group
     - Every 2 weeks on Tuesdays
     - [ics](https://calendar.google.com/calendar/ical/9c23f3a54dbb4fbac3801c50094fc43118a37c186f5c65b2898cd0fc251c8610%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/u/0?cid=OWMyM2YzYTU0ZGJiNGZiYWMzODAxYzUwMDk0ZmM0MzExOGEzN2MxODZmNWM2NWIyODk4Y2QwZmMyNTFjODYxMEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t)
     - [Meeting notes](https://docs.google.com/document/d/1ijI8pWeyidmhFOd5Ndgvr5AziZwrMCbt2oUehv8qHmw/edit?usp=sharing)
   * - LLVM Memory Safety Working Group
     - Every 4 weeks on Thursdays
     - [ics](https://calendar.google.com/calendar/ical/2d77f9a2624d18cd46e5299d15cc0fa0c90dca53fd68802261d52121d21a0573%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/u/0?cid=MmQ3N2Y5YTI2MjRkMThjZDQ2ZTUyOTlkMTVjYzBmYTBjOTBkY2E1M2ZkNjg4MDIyNjFkNTIxMjFkMjFhMDU3M0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t)
     - [Meeting notes](https://docs.google.com/document/d/1DkCik6BTnO-cox_9y_BTKzPaJJOo_hBxiNFP3lInvOM/edit?usp=sharing)
   * - [Lifetime Safety Breakout Group](https://github.com/orgs/llvm/projects/39)
     - Every 2 weeks on Wednesdays
     - [ics](https://calendar.google.com/calendar/ical/2d77f9a2624d18cd46e5299d15cc0fa0c90dca53fd68802261d52121d21a0573%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/u/0?cid=MmQ3N2Y5YTI2MjRkMThjZDQ2ZTUyOTlkMTVjYzBmYTBjOTBkY2E1M2ZkNjg4MDIyNjFkNTIxMjFkMjFhMDU3M0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t)
     - [Meeting notes](https://docs.google.com/document/d/1DkCik6BTnO-cox_9y_BTKzPaJJOo_hBxiNFP3lInvOM/edit?tab=t.nvvd6cfloi81)
   * - [HLSL Working Group](https://github.com/llvm/wg-hlsl)
     - Every week on Thursday
     -
     - [Meeting notes](https://github.com/llvm/wg-hlsl/tree/main/meetings)
```

For event owners, our Discord bot also supports sending automated announcements
of upcoming sync-ups. Please see the {ref}`discord-bot-event-pings` section for
info.

### Past online sync-ups

Some online sync-ups are no longer happening. We keep pointing to them here to
keep track of the meeting notes and in case anyone would want to revive them in
the future.

```{list-table} LLVM no-longer-happening sync-up calls
:widths: 25 25 25 25
:header-rows: 1

   * - Topic
     - Frequency
     - Calendar link
     - Minutes/docs link
   * - Scalable Vectors and Arm SVE
     - Monthly, every 3rd Tuesday
     - [ics](https://calendar.google.com/calendar/ical/bjms39pe6k6bo5egtsp7don414%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/u/0/embed?src=bjms39pe6k6bo5egtsp7don414@group.calendar.google.com)
     - [Minutes/docs](https://docs.google.com/document/d/1UPH2Hzou5RgGT8XfO39OmVXKEibWPfdYLELSaHr3xzo/edit)
   * - MemorySSA in LLVM
     - Every 8 weeks on Mondays
     - [ics](https://calendar.google.com/calendar/ical/c_1mincouiltpa24ac14of14lhi4%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=c_1mincouiltpa24ac14of14lhi4%40group.calendar.google.com)
     - [Minutes/docs](https://docs.google.com/document/d/1-uEEZfmRdPThZlctOq9eXlmUaSSAAi8oKxhrPY_lpjk/edit#)
   * - Vector Predication
     - Every 2 weeks on Tuesdays, 3pm UTC
     -
     - [Minutes/docs](https://docs.google.com/document/d/1q26ToudQjnqN5x31zk8zgq_s0lem1-BF8pQmciLa4k8/edit?usp=sharing)
   * - [MLIR](https://mlir.llvm.org) design meetings
     - Weekly, on Thursdays
     -
     - [Minutes/docs](https://docs.google.com/document/d/1y_9f1AbfgcoVdJh4_aM6-BaSHvrHl8zuA5G4jv_94K8/edit#heading=h.cite1kolful9)
```

(office-hours)=

## Office hours

A number of experienced LLVM contributors make themselves available for a chat
on a regular schedule, to anyone who is looking for some guidance. Please find
the list of who is available when, through which medium, and what their area of
expertise is. Don't be too shy to dial in!

Office hours are also listed on the {ref}`llvm-community-calendar`. Of course,
people take time off from time to time, so if you dial in and you don't find
anyone present, chances are they happen to be off that day.

The {doc}`CodeOfConduct` applies to all office hours.

```{list-table} LLVM office hours
:widths: 15 40 15 15 15
:header-rows: 1

  * - Name
    - In-scope topics
    - When?
    - Where?
    - Languages
  * - Kristof Beyls
    - General questions on how to contribute to LLVM; organizing meetups;
      submitting talks; and other general LLVM-related topics. Arm/AArch64
      codegen. LLVM security group. LLVM Office Hours.
    - Every 2nd and 4th Wednesday of the month at 9.30am CET, for 30 minutes.
      [ics](https://user.fm/calendar/v1-eac36694e3024854a9402da023f9e0fa/Kristof%20Beyls%20LLVM%20office%20hours.ics)
    - [Jitsi](https://meet.jit.si/KristofBeylsLLVMOfficeHour)
    - English, Flemish, Dutch
  * - Alina Sbirlea
    - General questions on how to contribute to LLVM; women in compilers;
      MemorySSA, BatchAA, various loop passes, new pass manager.
    - Monthly, 2nd Tuesdays, 10.00am PT/7:00pm CET, for 30 minutes.
      [ics](https://calendar.google.com/calendar/ical/c_pm6e7160iq7n5fcm1s6m3rjhh4%40group.calendar.google.com/public/basic.ics)
      [gcal](https://calendar.google.com/calendar/embed?src=c_pm6e7160iq7n5fcm1s6m3rjhh4%40group.calendar.google.com)
    - [GoogleMeet](https://meet.google.com/hhk-xpdj-gvx)
    - English, Romanian
  * - Aaron Ballman (he/him)
    - Clang internals; frontend attributes; clang-tidy; clang-query; AST matchers
    - Monthly, 2nd Monday and 3rd Friday of the month at 10:00am Eastern and again at 2:00pm Eastern, for 60 minutes.
      [ics](https://calendar.google.com/calendar/ical/npgke5dug0uliud0qapptmps58%40group.calendar.google.com/public/basic.ics)
      [gcal](https://calendar.google.com/calendar/embed?src=npgke5dug0uliud0qapptmps58%40group.calendar.google.com)
    - [GoogleMeet](https://meet.google.com/xok-iqne-gmi)
    - English, Norwegian (not fluently)
  * - Johannes Doerfert (he/him)
    - OpenMP, LLVM-IR, interprocedural optimizations, Attributor, workshops, research, ...
    - Every week, Wednesdays 9:30am (Pacific Time), for 1 hour.
      [ics](https://drive.google.com/file/d/1E_QkRvirmdJzlXf2EKBUX-v8Xj7-eW3v/view?usp=sharing)
    - [MS Teams](https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTMxNzU4MWYtYzViNS00OTM2LWJmNWQtMjg5ZWFhNGVjNzgw%40thread.v2/0?context=%7b%22Tid%22%3a%22a722dec9-ae4e-4ae3-9d75-fd66e2680a63%22%2c%22Oid%22%3a%22885bda30-ce8e-46db-aa7e-15de0474831a%22%7d)
    - English, German
  * - Tobias Grosser
    - General questions on how to contribute to LLVM/MLIR, Polly, Loop Optimization, FPL, Research in LLVM, PhD in CS, Summer of Code.
    - Monthly, last Monday of the month at 18:00 London time (typically 9am PT), for 30 minutes.
    - [Video Call](https://meet.grosser.science/LLVMOfficeHours)
    - English, German, Spanish, French
  * - Alexey Bader
    - SYCL compiler, offload tools, OpenCL and SPIR-V, how to contribute.
    - Monthly, 2nd Monday of the month at 9:30am PT, for 30 minutes.
    - [GoogleMeet](https://meet.google.com/pdz-xhns-uus)
    - English, Russian
  * - Maksim Panchenko
    - BOLT internals, IR, new passes, proposals, etc.
    - Monthly, 2nd Wednesday of the month at 11:00am PT, for 30 minutes.
    - [Zoom](https://fb.zoom.us/j/97358910859?pwd=FamcLANMN7umLlFTTTkqXUCAG81SH0.1)
    - English, Russian
  * - Quentin Colombet (he/him)
    - LLVM/MLIR; Codegen (Instruction selection (GlobalISel/SDISel), Machine IR,
      Register allocation, etc.); Optimizations; MCA
    - Monthly, 1st Wednesday of the month at 8.00am PT, for 30 minutes.
      [ics](https://calendar.google.com/calendar/ical/48c4ad60290a4df218e51e1ceec1106fe317b0ebc76938d9273592053f38204e%40group.calendar.google.com/public/basic.ics)
      [gcal](https://calendar.google.com/calendar/embed?src=48c4ad60290a4df218e51e1ceec1106fe317b0ebc76938d9273592053f38204e%40group.calendar.google.com)
    - [Google meet](https://meet.google.com/cbz-grrp-obs)
    - English, French
  * - Phoebe Wang (she/her)
    - X86 backend, General questions to X86, women in compilers.
    - Monthly, 3rd Wednesday of the month at 8:30am Beijing time, for 30 minutes.
    - [MS Teams](https://teams.microsoft.com/l/meetup-join/19%3ameeting_NWQ0MjU0NjYtZjUyMi00YTU3LThmM2EtY2Y2YTE4NGM3NmFi%40thread.v2/0?context=%7b%22Tid%22%3a%2246c98d88-e344-4ed4-8496-4ed7712e255d%22%2c%22Oid%22%3a%227b309d9c-a9bb-44c8-a940-ab97eef42d4d%22%7d)
    - English, Chinese
  * - Amara Emerson
    - GlobalISel questions.
    - Monthly, 4th Wednesday of the month at 9:30am PT, for 30 minutes.
    - [Google meet](https://meet.google.com/pdd-dibg-cwv)
    - English
  * - Maksim Levental and Jeremy Kun
    - MLIR newcomers and general discussion ([livestreamed](https://www.youtube.com/playlist?list=PLhxO86S3jsX2k7kOhZaV-qKWm8tNsUdAE))
    - Every two weeks, Wednesdays at 2:00pm US Pacific, for 90 minutes.
    - Livestream chat or [Google meet](https://meet.google.com/wit-tvzc-dwc)
    - English
  * - Renato Golin
    - General LLVM, MLIR & Linalg, distributed computing, research, socials.
    - Every first Friday of the month, 14:00 UK time, for 60 minutes.
    - [Google meet](https://meet.google.com/jps-twgq-ivz)
    - English, Portuguese
```

For event owners, our Discord bot also supports sending automated announcements
of upcoming office hours. Please see the {ref}`discord-bot-event-pings` section
for info.

### Guidance for office hours hosts

* If you're interested in becoming an office hours host, please add your
  information to the list above. Please create a calendar event for it and
  invite calendar@llvm.org to the event so that it'll show up on the
  {ref}`llvm-community-calendar`.
  Please see {ref}`llvm-community-calendar-host-guidance` for more guidance on
  what to add to your calendar invite.
* When starting an office hours session, if you haven't set up the Discord bot
  integration, consider typing something like "*Hi, I'm available for chats in
  the next half hour at* video chat URL. *I'm looking forward to having
  conversations on the video chat or here.*" on the
  [#office-hours Discord channel](https://discord.com/channels/636084430946959380/976196303681896538).

  Doing this can help:
    * overcome potential anxiety to call in for a first time,
    * people who prefer to first exchange a few messages through text chat
      before dialing in, and
    * remind the wider community that office hours do exist.
* If you decide to no longer host office hours, please do remove your entry
  from the list above.


## Discord

Users and developers of the LLVM project (including subprojects such as Clang)
can be found on the community's [Discord](https://discord.gg/xS7Z362)
chat server. The server is actively moderated.

The #buildbot-status channel has a bot for
[LLVM buildbot](http://lab.llvm.org/buildbot/#/console) status changes. The
bot will update the channel with a link to a build bot when a build goes from
passing to failing and again when the build goes from failing back to passing.
It is a great way to actively monitor the status of the build.

The bot also supports @mention-ing you when your email appears on a blamelist.
For more details, DM `help` to the bot.

(discord-bot-event-pings)=

### Discord bot event pings

Our Discord bot supports automatically sending messages about upcoming events
on [the LLVM community calendar](https://calendar.google.com/calendar/u/0/embed?src=calendar@llvm.org)
to Discord. This behavior is controlled on a per-event basis, by metadata in the
event's description. Each piece of metadata should be on its own line in the
event description.

The currently supported metadata is:

- `discord-bot-event-type` - **Required**. Specifies the event type. Valid
  values are `office-hours` and `sync-up`.
- `discord-bot-channels-to-mention` - **Sometimes required**. A
  comma-separated list of Discord channels to post notifications in. If your
  `discord-bot-event-type` is `office-hours`, the `#office-hours` channel
  will be implicitly appended to this list (ergo, you don't need to specify this
  item). Otherwise, you must specify a value here.
- `discord-bot-mention` - **Optional**. A comma-separated list of people to
  ping on each event notification. All names mentioned must be Discord
  usernames, and must have a leading `@`. e.g., `@foo, @bar`.
- `discord-bot-reminder-time-before-start` - **Optional**. The number of
  minutes before the beginning of an event to send a ping. This should be
  formatted as an integer. Defaults to 30.
- `discord-bot-message` - **Optional**. Text to append to all event pings.

An example of an event description with valid metadata is:

```text
Regular office hours to chat with people about LLVM! We can help with
questions, troubleshooting bugs, etc.

discord-bot-channels-to-mention: #beginners, #foo
discord-bot-event-type: office-hours
discord-bot-mention: @gburgessiv, @bar
discord-bot-message: Come join us for office hours!
discord-bot-reminder-time-before-start: 5
```

This metadata will prompt the Discord bot to:

* send pings 5 minutes before the given event starts, mentioning `@gburgessiv`
  and `@bar` in the ping
* send the pings to the `#beginners`, `#foo`, and `#office-hours` channels
* include the text "Come join us for office hours!" in the ping

A few minutes before sending a ping, the bot will double-check that the event
hasn't been cancelled.

If you need help troubleshooting, or have feature requests/questions, please
feel free to ping @gburgessiv!

(meetups-social-events)=

## Meetups and social events

```{toctree}
:hidden:

MeetupGuidelines
```

Besides developer [meetings and conferences](https://llvm.org/devmtg/),
there are several user groups called
[LLVM Socials](https://www.meetup.com/pro/llvm/). We greatly encourage you to
join one in your city. Or start a new one if there is none:

{doc}`MeetupGuidelines`

(community-proposals)=

## Community wide proposals

Proposals for large-scale changes in how the community behaves and how the work flow
can be better.

```{toctree}
:hidden:

Proposals/GitHubMove
Proposals/TestSuite
Proposals/VariableNames
Proposals/VectorPredication
```

* {doc}`Proposals/GitHubMove`

  Proposal to move from SVN/Git to GitHub.

* {doc}`Proposals/TestSuite`

  Proposals for additional benchmarks/programs for llvm's test-suite.

* {doc}`Proposals/VariableNames`

  Proposal to change the variable names coding standard.

* {doc}`Proposals/VectorPredication`

  Proposal for predicated vector instructions in LLVM.

(llvm-community-calendar)=

## LLVM community calendar

We aim to maintain a public calendar view of all events happening in the LLVM
community such as {ref}`online-sync-ups` and {ref}`office-hours`. The calendar
can be found at
https://calendar.google.com/calendar/u/0/embed?src=calendar@llvm.org and can
also be seen inline below:

```{raw} html
<iframe src="https://calendar.google.com/calendar/embed?height=600&wkst=1&bgcolor=%23ffffff&ctz=UTC&showCalendars=0&showDate=1&showNav=1&src=Y2FsZW5kYXJAbGx2bS5vcmc&color=%23039BE5" style="border:solid 1px #777" width="800" height="600" frameborder="0" scrolling="no"></iframe>
```

Note that the web view of the LLVM community calendar shows events in
Coordinated Universal Time (UTC). If you use Google Calendar, consider
subscribing to it with the + button in the bottom-right corner to view all
events in your local time zone alongside your other calendars.

(llvm-community-calendar-host-guidance)=

### Guidance on what to put into LLVM community calendar invites

To add your event, create a calendar event for it and invite calendar@llvm.org
on it. Your event should then show up on the community calendar.

Please put the following pieces of information in your calendar invite:

* Write a single paragraph describing what the event is about. Include things
  such as who the event is for and what sort of topics are discussed.
* State explicitly that the {doc}`CodeOfConduct` applies to this event.
* Make it clear who:

  * the organizer is.

  * the person to contact is in case of any code-of-conduct issues.  Typically,
    this would be the organizer.

* If you have meeting minutes for your event, add a pointer to where those live.
  A good place for meeting minutes could be as a post on LLVM Discourse.

* If you're hosting a sync-up or office hours event and would like it to be
  announced by the Discord bot, add the relevant metadata (full descriptions
  available in the {ref}`discord-bot-event-pings` section).

An example invite looks as follows

```text
This event is a meetup for all developers of LLDB. Meeting agendas are posted
on Discourse before the event.

Attendees must adhere to the LLVM Code of Conduct
(https://llvm.org/docs/CodeOfConduct.html). For any Code of Conduct reports,
please contact the organizers and also email conduct@llvm.org.

Agenda/Meeting Minutes: Link to minutes

Organizer(s): First Surname (name@email.com)

discord-bot-channels-to-mention: #lldb
discord-bot-event-type: sync-up
discord-bot-mention: @host-username, @another-host
discord-bot-message: Come join us to chat about LLDB!
discord-bot-reminder-time-before-start: 30
```
