|
| 1 | +# Zulip |
| 2 | + |
| 3 | +[Rust's Zulip](rust-lang.zulipchat.com) is used by a number of teams, notably |
| 4 | +the compiler, language, and library teams, along with their working groups. |
| 5 | + |
| 6 | +Zulip can be an unintuitive platform to get started with. To get started, take a |
| 7 | +look at the [getting started |
| 8 | +guide](https://zulipchat.com/help/getting-started-with-zulip). For more detail, |
| 9 | +examine the [Zulip user documentation](https://zulipchat.com/help/)! |
| 10 | + |
| 11 | +## Where to go for help with using Zulip |
| 12 | + |
| 13 | +If you're testing a feature, or want to get help, the `#zulip` stream is the |
| 14 | +place to go. Like elsewhere, the best thing to do is to create a new topic |
| 15 | +for each question. |
| 16 | + |
| 17 | +## Getting started |
| 18 | + |
| 19 | +It is recommended to first look at the official [getting started |
| 20 | +guide](https://zulipchat.com/help/getting-started-with-zulip). Like Rust itself, |
| 21 | +Zulip is a bit special and reading the documentation before digging can be |
| 22 | +really helpful. |
| 23 | + |
| 24 | +You'll definitely want to configure the streams that you're subscribed to when |
| 25 | +getting started; the default set is quite limited, and there are many groups |
| 26 | +that exist beyond it. Subscribing to a stream is very low cost -- it is similar |
| 27 | +to being "in" an IRC channel, except that logs are available for all streams, |
| 28 | +regardless of subscription status. |
| 29 | + |
| 30 | +It's not necessary to introduce yourself, but feel free to say hello in the |
| 31 | +`#new members` stream. |
| 32 | + |
| 33 | +## User groups |
| 34 | + |
| 35 | +User groups can be pinged by anyone with the `@<group>` notation, same as |
| 36 | +pinging another user. Groups can be created by anyone, and anyone can join a |
| 37 | +group. |
| 38 | + |
| 39 | +Users should feel free to join (or leave) groups on their own. Furthermore, |
| 40 | +users should feel free to create groups as needed, though it is currently |
| 41 | +expected that this is somewhat rare. You should name your group similar to how |
| 42 | +you would name a stream for the same purpose, though groups can be more |
| 43 | +fine-grained (or less). For example, `@T-compiler/meeting` currently does not |
| 44 | +have a dedicated stream. |
| 45 | + |
| 46 | +## Appropriate conversation |
| 47 | + |
| 48 | +In most streams, you should try to keep conversations related to team business. |
| 49 | +The `#general` stream is a bit broader, but even there, discussions should be |
| 50 | +closely related to Rust (though may not relate to projects of any particular |
| 51 | +team). All channels are expected to be used for discussions related to the Rust |
| 52 | +project, though; discussions of (for example) wildlife or sightseeing are not |
| 53 | +appropriate. |
| 54 | + |
| 55 | +## Streams |
| 56 | + |
| 57 | +These are similar to "channels" on other platforms (i.e., there should not be |
| 58 | +too many). On the other hand, you can choose which streams you subscribe to, so |
| 59 | +there can be more than channels on other platforms. Read [Zulip's |
| 60 | +documentation](https://zulipchat.com/help/about-streams-and-topics) for more |
| 61 | +details. |
| 62 | + |
| 63 | +Streams are appropriate for any Rust official group. For example, working |
| 64 | +groups, project groups, teams are all examples of official groups. These should |
| 65 | +ideally also be represented in the [team repository](../infra/team-maintenance.md). |
| 66 | + |
| 67 | +### Default streams |
| 68 | + |
| 69 | +**This section is still under debate, and it is not yet clear which direction we |
| 70 | +will go. It is non-normative, and should not be used yet for modifications to |
| 71 | +the Zulip instance.** |
| 72 | + |
| 73 | +The default set of streams is chosen to allow incoming people to be able to have |
| 74 | +at least one place to go that can then, if necessary, direct them to a more |
| 75 | +specific location. |
| 76 | + |
| 77 | +Currently that means that every top-level group present on Zulip is by default |
| 78 | +visible. Specifically, no stream that contains a `/` will be enabled by default. |
| 79 | + |
| 80 | +Currently this set is: |
| 81 | + * general |
| 82 | + * t-lang |
| 83 | + * t-compiler |
| 84 | + * t-libs |
| 85 | + * project-ffi-unwind |
| 86 | + * project-inline-asm |
| 87 | + * project-safe-transmute |
| 88 | + * rust-survey-2019 |
| 89 | + * wg-async-foundations |
| 90 | + * wg-database |
| 91 | + * wg-formal-methods |
| 92 | + * wg-secure-code |
| 93 | + * wg-traits |
| 94 | + * zulip |
| 95 | + |
| 96 | +An alternative, minimialistic, approach is to use: |
| 97 | + * general |
| 98 | + * zulip |
| 99 | + * announce |
| 100 | + * new members |
| 101 | + |
| 102 | +as the default set which forces people into customizing their default set when |
| 103 | +starting out. |
| 104 | + |
| 105 | +### Stream naming |
| 106 | + |
| 107 | +A stream should be named such as `#t-{team}/{group name}`. For example, |
| 108 | +`#t-compiler/wg-parallel-rustc`. More levels of nesting are fine, e.g., a |
| 109 | +working group might want "subgroups" as well, though you may want to omit the |
| 110 | +team name in such a case -- keeping the stream name short is good for usability, |
| 111 | +to avoid confusion between different streams which share the same prefix. |
| 112 | + |
| 113 | +If no top-level team exists, or the group spans multiple teams (e.g., |
| 114 | +project-ffi-unwind), then the top level team should be omitted. |
| 115 | + |
| 116 | +Streams should be clearly communicated as being for a specific purpose. That |
| 117 | +purpose can be broad, but it should likely include a group of some kind (even if |
| 118 | +that group is transient, e.g., people who are having trouble with the rust build |
| 119 | +system, or people working on the compiler). Furthermore, we do not currently |
| 120 | +intend for this Zulip to be a general place for community projects not |
| 121 | +affiliated with the Rust organization; if they wish to use Zulip, it is [free |
| 122 | +for open source](https://zulipchat.com/for/open-source/). |
| 123 | + |
| 124 | +When a new stream is created, you should announce it in `#announce`. This is |
| 125 | +generally done automatically by Zulip. |
| 126 | + |
| 127 | +## Topics |
| 128 | + |
| 129 | +One of these is attached to every message within a given stream (these are the |
| 130 | +subdivisions within streams). Topics are generally transient, and live for as |
| 131 | +long as there is active discussion on a topic. Thinking of topics like email |
| 132 | +subjects is helpful. |
| 133 | + |
| 134 | +New conversation in a given stream should almost always start in a new topic, |
| 135 | +not a preexisting one. Unlike (for example) GitHub issues, you should not |
| 136 | +attempt to search for a past topic on the same subject. Do not spend too long on |
| 137 | +the name of the topic, either, beyond trying to make it short. Topics should |
| 138 | +generally be no longer than 20 characters (loosely two to three words), to make |
| 139 | +sure it is visible to users. |
| 140 | + |
| 141 | +You should eagerly fork new discussion topics into fresh topics. Note that this |
| 142 | +can be done with the tail of another topic (if accidentally you diverge into |
| 143 | +another area of discussion). |
| 144 | + |
| 145 | +To fork from an existing topic, see Zulip's documentation |
| 146 | +[here](https://zulipchat.com/help/rename-a-topic). |
| 147 | + |
| 148 | +## Messages |
| 149 | + |
| 150 | +Zulip is a unique platform which combines synchronous and |
| 151 | +asynchronous communication in one location. You should not generally expect that |
| 152 | +your messages will receive a response quickly, and unlike (for example) Discord, |
| 153 | +there is likely not much reason to "re-ping" on a particular issue every few |
| 154 | +hours as your message is unlikely to vanish into history, being isolated to a |
| 155 | +specific topic. |
| 156 | + |
| 157 | +### Linkifiers |
| 158 | + |
| 159 | +Our Zulip supports a lot of helpful linkifiers, and we're generally happy to add |
| 160 | +more on request. See [the |
| 161 | +documentation](https://rust-lang.zulipchat.com/help/add-a-custom-linkification-filter) |
| 162 | +for the format. Propose one in `#zulip`! |
| 163 | + |
| 164 | +Generally, `github-org/repo#123` works for linking to an issue or PR; the below |
| 165 | +list gives a few more "special cased" repositories. |
| 166 | + |
| 167 | +Don't forget that standard Markdown syntax for links also works. |
| 168 | + |
| 169 | +We currently support linking to issues on a few repositories: |
| 170 | + |
| 171 | +* rust-lang/rust with [`#4545`](https://github.com/rust-lang/rust/issues/4545) or `rust#4545` |
| 172 | +* rust-lang/rfcs with `RFC#3434` or `rfc#3434` |
| 173 | +* rust-lang/async-book with `async-book#2334` |
| 174 | +* rust-lang-nursery/chalk with `chalk#2334` |
| 175 | +* rust-lang/compiler-team with `compiler-team#3433` |
| 176 | +* rust-lang-nursery/ena with `ena#3434` |
| 177 | +* rust-lang/miri with `miri#3434` |
| 178 | +* rust-lang-nursery/polonius with `polonius#3434` |
| 179 | +* rust-analyzer/rust-analyzer with `rust-analyzer#3434` |
| 180 | +* rust-lang/rustc-guide with `rustc-guide#3434` |
| 181 | +* rust-lang/stdarch with `stdarch#3434` |
| 182 | +* rust-lang/team with `team#3434` |
| 183 | +* rust-lang/unsafe-code-guidelines with `ucg#3434` |
| 184 | + |
| 185 | +We currently support linking to commits on these repositories: |
| 186 | + |
| 187 | +* rust-lang/rust with 40-character long SHAs, e.g., [`25434f898b499876203a3b95c1b38bad5ed2cc5d`](https://github.com/rust-lang/rust/commit/25434f898b499876203a3b95c1b38bad5ed2cc5d) |
| 188 | + |
| 189 | +## Read-only view |
| 190 | + |
| 191 | +Zulip by default requires an account for interaction, though this "bug" is being |
| 192 | +actively worked on by the Zulip developers. We currently maintain a read-only |
| 193 | +view of the Zulip at <https://zulip-archive.rust-lang.org>; this has relatively |
| 194 | +up to date information (we update every 5 minutes). If you're linking to Zulip |
| 195 | +from a GitHub comment with the intent to leave a permanent link, this is a good |
| 196 | +place to link to. There is not currently good tooling for generating the links. |
0 commit comments