docs: Fix various capitalization errors.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg 2020-08-10 16:47:54 -07:00 committed by Tim Abbott
parent 768f9f93cd
commit c155403884
93 changed files with 206 additions and 207 deletions

View File

@ -14,7 +14,7 @@ This isn't an exhaustive list of things that you can't do. Rather, take it
in the spirit in which it's intended --- a guide to make it easier to enrich in the spirit in which it's intended --- a guide to make it easier to enrich
all of us and the technical communities in which we participate. all of us and the technical communities in which we participate.
## Expected Behavior ## Expected behavior
The following behaviors are expected and requested of all community members: The following behaviors are expected and requested of all community members:
@ -29,7 +29,7 @@ The following behaviors are expected and requested of all community members:
* Community event venues may be shared with members of the public; be * Community event venues may be shared with members of the public; be
respectful to all patrons of these locations. respectful to all patrons of these locations.
## Unacceptable Behavior ## Unacceptable behavior
The following behaviors are considered harassment and are unacceptable The following behaviors are considered harassment and are unacceptable
within the Zulip community: within the Zulip community:
@ -53,7 +53,7 @@ within the Zulip community:
presentations. presentations.
* Advocating for, or encouraging, any of the behaviors above. * Advocating for, or encouraging, any of the behaviors above.
## Reporting and Enforcement ## Reporting and enforcement
Harassment and other code of conduct violations reduce the value of the Harassment and other code of conduct violations reduce the value of the
community for everyone. If someone makes you or anyone else feel unsafe or community for everyone. If someone makes you or anyone else feel unsafe or
@ -95,7 +95,7 @@ behavior occurring outside the scope of community activities when such
behavior has the potential to adversely affect the safety and well-being of behavior has the potential to adversely affect the safety and well-being of
community members. community members.
## License and Attribution ## License and attribution
This Code of Conduct is adapted from the This Code of Conduct is adapted from the
[Citizen Code of Conduct](http://citizencodeofconduct.org/) and the [Citizen Code of Conduct](http://citizencodeofconduct.org/) and the

View File

@ -299,7 +299,7 @@ for ZSoC, we'll contact you when the GSoC results are announced.
[gsoc-guide]: https://zulip.readthedocs.io/en/latest/overview/gsoc-ideas.html [gsoc-guide]: https://zulip.readthedocs.io/en/latest/overview/gsoc-ideas.html
[gsoc-faq]: https://developers.google.com/open-source/gsoc/faq [gsoc-faq]: https://developers.google.com/open-source/gsoc/faq
## Zulip Outreach ## Zulip outreach
**Upvoting Zulip**. Upvotes and reviews make a big difference in the public **Upvoting Zulip**. Upvotes and reviews make a big difference in the public
perception of projects like Zulip. We've collected a few sites below perception of projects like Zulip. We've collected a few sites below

View File

@ -71,7 +71,7 @@ You might be interested in:
like Google Summer of Code. like Google Summer of Code.
You may also be interested in reading our [blog](https://blog.zulip.org/) or You may also be interested in reading our [blog](https://blog.zulip.org/) or
following us on [twitter](https://twitter.com/zulip). following us on [Twitter](https://twitter.com/zulip).
Zulip is distributed under the Zulip is distributed under the
[Apache 2.0](https://github.com/zulip/zulip/blob/master/LICENSE) license. [Apache 2.0](https://github.com/zulip/zulip/blob/master/LICENSE) license.

View File

@ -53,7 +53,7 @@ sometimes report false positives as well. They are a useful aid in quickly
identifying potential problems and checking for regressions, but their identifying potential problems and checking for regressions, but their
recommendations should not be blindly obeyed. recommendations should not be blindly obeyed.
## GitHub Issues ## GitHub issues
Problems with Zulip's accessibility should be reported as Problems with Zulip's accessibility should be reported as
[GitHub issues](https://github.com/zulip/zulip/issues) with the "accessibility" [GitHub issues](https://github.com/zulip/zulip/issues) with the "accessibility"
@ -65,7 +65,7 @@ comment on the issue:
If you want to help make Zulip more accessible, here is a list of the If you want to help make Zulip more accessible, here is a list of the
[currently open accessibility issues][accessibility-issues]. [currently open accessibility issues][accessibility-issues].
## Additional Resources ## Additional resources
For more information about making Zulip accessible to as many users as For more information about making Zulip accessible to as many users as
possible, the following resources may be useful. possible, the following resources may be useful.

View File

@ -183,7 +183,7 @@ feel free to do that in a new commit, then push your branch to GitHub
and mention the branch in a comment on the pull request. That'll save and mention the branch in a comment on the pull request. That'll save
the maintainer time and get the PR merged quicker. the maintainer time and get the PR merged quicker.
## Additional Resources ## Additional resources
We also strongly recommend reviewers to go through the following resources. We also strongly recommend reviewers to go through the following resources.
@ -194,7 +194,7 @@ We also strongly recommend reviewers to go through the following resources.
* [Code Review - A consolidation of advice and stuff from the * [Code Review - A consolidation of advice and stuff from the
sinternet](https://gist.github.com/porterjamesj/002fb27dd70df003646df46f15e898de) sinternet](https://gist.github.com/porterjamesj/002fb27dd70df003646df46f15e898de)
article by James J. Porter article by James J. Porter
* [Zulip Code of Conduct](../code-of-conduct.md) * [Zulip code of conduct](../code-of-conduct.md)
[code-style]: ../contributing/code-style.md [code-style]: ../contributing/code-style.md
[commit-messages]: ../contributing/version-control.html#commit-messages [commit-messages]: ../contributing/version-control.html#commit-messages

View File

@ -77,7 +77,7 @@ tools in the Zulip development environment). See
for details on our various existing documentation systems. for details on our various existing documentation systems.
In part due to past work by a technical writer, Zulip has a In part due to past work by a technical writer, Zulip has a
well-documented and easy to setup development environment for a well-documented and easy-to-set-up development environment for a
project of its scope. Use project of its scope. Use
[our first-time Zulip developer guide](../overview/contributing.html#your-first-codebase-contribution) [our first-time Zulip developer guide](../overview/contributing.html#your-first-codebase-contribution)
to get your Zulip development environment set up. If you have any to get your Zulip development environment set up. If you have any
@ -202,12 +202,12 @@ proposal. It's also fine for you to come up with your own project
ideas. ideas.
For many of our projects, an important skill to develop is a good For many of our projects, an important skill to develop is a good
command of Git; read [our Git Guide](../git/overview.md) in full to command of Git; read [our Git guide](../git/overview.md) in full to
learn how to use it well. Of particular importance is mastering using learn how to use it well. Of particular importance is mastering using
Git rebase so that you can construct commits that are readable, Git rebase so that you can construct commits that are readable,
are clearly correct and that explain why they are correct. are clearly correct and that explain why they are correct.
**Project name**: REST API Documentation **Project name**: REST API documentation
Fill in the gaps in Zulip's Fill in the gaps in Zulip's
[REST API documentation](https://zulip.com/api). Zulip has a [REST API documentation](https://zulip.com/api). Zulip has a

View File

@ -1,5 +1,5 @@
####################### #######################
Code Contribution Guide Code contribution guide
####################### #######################
.. toctree:: .. toctree::

View File

@ -1,6 +1,6 @@
# Version control # Version control
## Commit Discipline ## Commit discipline
We follow the Git project's own commit discipline practice of "Each We follow the Git project's own commit discipline practice of "Each
commit is a minimal coherent idea". This discipline takes a bit of work, commit is a minimal coherent idea". This discipline takes a bit of work,
@ -83,7 +83,7 @@ you need to do a refactoring partway through writing the feature. When that
happens, we recommend you stash your partial feature, do the refactoring, happens, we recommend you stash your partial feature, do the refactoring,
commit it, and then unstash and finish implementing your feature. commit it, and then unstash and finish implementing your feature.
## Commit Messages ## Commit messages
First, check out First, check out
[these](https://github.com/zulip/zulip/commit/4869e1b0b2bc6d56fcf44b7d0e36ca20f45d0521) [these](https://github.com/zulip/zulip/commit/4869e1b0b2bc6d56fcf44b7d0e36ca20f45d0521)

View File

@ -24,7 +24,7 @@ lower-case naming convention for that file.
Below, we document the procedure for each of the major authentication Below, we document the procedure for each of the major authentication
methods supported by Zulip. methods supported by Zulip.
### Email and Password ### Email and password
Zulip's default EmailAuthBackend authenticates users by verifying Zulip's default EmailAuthBackend authenticates users by verifying
control over their email address, and then allowing them to set a control over their email address, and then allowing them to set a
@ -204,7 +204,7 @@ exactly what data is being used in the test without looking at other
resources. It also gives us more freedom to edit the development resources. It also gives us more freedom to edit the development
environment directory without worrying about tests. environment directory without worrying about tests.
## Two Factor Authentication ## Two factor authentication
Zulip uses [django-two-factor-auth][0] as a beta 2FA integration. Zulip uses [django-two-factor-auth][0] as a beta 2FA integration.

View File

@ -1,5 +1,5 @@
####################### #######################
Development Environment Development environment
####################### #######################
.. toctree:: .. toctree::
@ -7,7 +7,7 @@ Development Environment
Development environment installation <overview> Development environment installation <overview>
Recommended setup (Vagrant) <setup-vagrant> Recommended setup (Vagrant) <setup-vagrant>
Advanced Setup (non-Vagrant) <setup-advanced> Advanced setup (non-Vagrant) <setup-advanced>
Using the development environment <using> Using the development environment <using>
Developing remotely <remote> Developing remotely <remote>
Authentication in the development environment <authentication> Authentication in the development environment <authentication>

View File

@ -1,4 +1,4 @@
# Advanced Setup (non-Vagrant) # Advanced setup (non-Vagrant)
Contents: Contents:
@ -56,7 +56,7 @@ on using the Zulip development
environment](../development/setup-vagrant.html#step-4-developing), environment](../development/setup-vagrant.html#step-4-developing),
ignoring the parts about `vagrant` (since you're not using it). ignoring the parts about `vagrant` (since you're not using it).
## Installing directly on Windows 10 (Experimental) ## Installing directly on Windows 10 (experimental)
We will be using Microsoft's new feature [WSL We will be using Microsoft's new feature [WSL
2](https://docs.microsoft.com/en-us/windows/wsl/wsl2-about) for 2](https://docs.microsoft.com/en-us/windows/wsl/wsl2-about) for

View File

@ -12,18 +12,18 @@ all related services will run.
Contents: Contents:
* [Requirements](#requirements) * [Requirements](#requirements)
* [Step 0: Set up Git & GitHub](#step-0-set-up-git-github) * [Step 0: Set up Git & GitHub](#step-0-set-up-git-github)
* [Step 1: Install Prerequisites](#step-1-install-prerequisites) * [Step 1: Install prerequisites](#step-1-install-prerequisites)
* [Step 2: Get Zulip code](#step-2-get-zulip-code) * [Step 2: Get Zulip code](#step-2-get-zulip-code)
* [Step 3: Start the development environment](#step-3-start-the-development-environment) * [Step 3: Start the development environment](#step-3-start-the-development-environment)
* [Step 4: Developing](#step-4-developing) * [Step 4: Developing](#step-4-developing)
* [Troubleshooting and Common Errors](#troubleshooting-and-common-errors) * [Troubleshooting and common errors](#troubleshooting-and-common-errors)
* [Specifying an Ubuntu mirror](#specifying-an-ubuntu-mirror) * [Specifying an Ubuntu mirror](#specifying-an-ubuntu-mirror)
* [Specifying a proxy](#specifying-a-proxy) * [Specifying a proxy](#specifying-a-proxy)
* [Customizing CPU and RAM allocation](#customizing-cpu-and-ram-allocation) * [Customizing CPU and RAM allocation](#customizing-cpu-and-ram-allocation)
**If you encounter errors installing the Zulip development **If you encounter errors installing the Zulip development
environment,** check [Troubleshooting and Common environment,** check [troubleshooting and common
Errors](#troubleshooting-and-common-errors). If that doesn't help, errors](#troubleshooting-and-common-errors). If that doesn't help,
please visit [#provision please visit [#provision
help](https://chat.zulip.org/#narrow/stream/21-provision-help) in the help](https://chat.zulip.org/#narrow/stream/21-provision-help) in the
[Zulip development community [Zulip development community
@ -63,13 +63,13 @@ docs.
You can skip this step if you already have Git, GitHub, and SSH access You can skip this step if you already have Git, GitHub, and SSH access
to GitHub working on your machine. to GitHub working on your machine.
Follow our [Git Guide][set-up-git] in order to install Git, set up a Follow our [Git guide][set-up-git] in order to install Git, set up a
GitHub account, create an SSH key to access code on GitHub GitHub account, create an SSH key to access code on GitHub
efficiently, etc. Be sure to create an ssh key and add it to your efficiently, etc. Be sure to create an ssh key and add it to your
GitHub account using GitHub account using
[these instructions](https://help.github.com/en/articles/generating-an-ssh-key). [these instructions](https://help.github.com/en/articles/generating-an-ssh-key).
### Step 1: Install Prerequisites ### Step 1: Install prerequisites
Jump to: Jump to:
@ -87,7 +87,7 @@ Jump to:
Fusion][vmware-fusion-dl] with the [VMWare Fusion Vagrant Fusion][vmware-fusion-dl] with the [VMWare Fusion Vagrant
plugin][vagrant-vmware-fusion-dl].) plugin][vagrant-vmware-fusion-dl].)
Now you are ready for [Step 2: Get Zulip Code.](#step-2-get-zulip-code). Now you are ready for [Step 2: Get Zulip code](#step-2-get-zulip-code).
#### Ubuntu #### Ubuntu
@ -142,7 +142,7 @@ sudo systemctl enable docker
sudo systemctl start docker sudo systemctl start docker
``` ```
Now you are ready for [Step 2: Get Zulip Code.](#step-2-get-zulip-code) Now you are ready for [Step 2: Get Zulip code](#step-2-get-zulip-code).
#### Debian #### Debian
@ -200,7 +200,7 @@ true
``` ```
If you see `true`, you are ready for [Step 2: Get Zulip If you see `true`, you are ready for [Step 2: Get Zulip
Code.](#step-2-get-zulip-code) code](#step-2-get-zulip-code).
Otherwise, if the above command prints `false` or nothing at all, then symlinks Otherwise, if the above command prints `false` or nothing at all, then symlinks
have not been enabled. have not been enabled.
@ -223,7 +223,7 @@ $ echo $CYGWIN
winsymlinks:native winsymlinks:native
``` ```
Now you are ready for [Step 2: Get Zulip Code.](#step-2-get-zulip-code) Now you are ready for [Step 2: Get Zulip code](#step-2-get-zulip-code).
(Note: The **GitHub Desktop client** for Windows has a bug where it (Note: The **GitHub Desktop client** for Windows has a bug where it
will automatically set `git config core.symlink false` on a repository will automatically set `git config core.symlink false` on a repository
@ -232,7 +232,7 @@ development environment, because we use symbolic links. For that
reason, we recommend avoiding using GitHub Desktop client to clone reason, we recommend avoiding using GitHub Desktop client to clone
projects and to instead follow these instructions exactly.) projects and to instead follow these instructions exactly.)
### Step 2: Get Zulip Code ### Step 2: Get Zulip code
1. In your browser, visit <https://github.com/zulip/zulip> 1. In your browser, visit <https://github.com/zulip/zulip>
and click the `fork` button. You will need to be logged in to GitHub to and click the `fork` button. You will need to be logged in to GitHub to
@ -268,7 +268,7 @@ Checking out files: 100% (1912/1912), done.`
``` ```
Now you are ready for [Step 3: Start the development Now you are ready for [Step 3: Start the development
environment.](#step-3-start-the-development-environment) environment](#step-3-start-the-development-environment).
### Step 3: Start the development environment ### Step 3: Start the development environment
@ -392,7 +392,7 @@ should see something like:
2016-05-04 18:21:57,819 INFO 127.0.0.1 GET 200 209ms (db: 7ms/2q) /login/ (unauth@zulip via ?) 2016-05-04 18:21:57,819 INFO 127.0.0.1 GET 200 209ms (db: 7ms/2q) /login/ (unauth@zulip via ?)
``` ```
Now you're ready for [Step 4: Developing.](#step-4-developing) Now you're ready for [Step 4: Developing](#step-4-developing).
### Step 4: Developing ### Step 4: Developing
@ -424,10 +424,10 @@ there.
See [Logging](../subsystems/logging.md) for further details on the run-dev.py console See [Logging](../subsystems/logging.md) for further details on the run-dev.py console
output. output.
#### Committing and pushing changes with git #### Committing and pushing changes with Git
When you're ready to commit or push changes via git, you will do this by When you're ready to commit or push changes via Git, you will do this by
running git commands in Terminal (macOS/Ubuntu) or Git BASH (Windows) in the running Git commands in Terminal (macOS/Ubuntu) or Git BASH (Windows) in the
directory where you cloned Zulip on your main machine. directory where you cloned Zulip on your main machine.
If you're new to working with Git/GitHub, check out our [Git & GitHub If you're new to working with Git/GitHub, check out our [Git & GitHub
@ -528,7 +528,7 @@ $ vagrant ssh
$ ./tools/run-dev.py $ ./tools/run-dev.py
``` ```
### Next Steps ### Next steps
Next, read the following to learn more about developing for Zulip: Next, read the following to learn more about developing for Zulip:
@ -538,7 +538,7 @@ Next, read the following to learn more about developing for Zulip:
run the full test suite against any branches you push to your fork, run the full test suite against any branches you push to your fork,
which can help you optimize your development workflow). which can help you optimize your development workflow).
### Troubleshooting and Common Errors ### Troubleshooting and common errors
Below you'll find a list of common errors and their solutions. Most Below you'll find a list of common errors and their solutions. Most
issues are resolved by just provisioning again (by running issues are resolved by just provisioning again (by running

View File

@ -1,4 +1,4 @@
Using the Development Environment Using the development environment
================================= =================================
This page describes the basic edit/refresh workflows for working with This page describes the basic edit/refresh workflows for working with

View File

@ -1,5 +1,5 @@
##################### #####################
Writing Documentation Writing documentation
##################### #####################
.. toctree:: .. toctree::

View File

@ -230,7 +230,7 @@ All tips/warnings should appear inside tip/warning blocks. There
should be only one tip/warning inside each block, and they usually should be only one tip/warning inside each block, and they usually
should be formatted as a continuation of a numbered step. should be formatted as a continuation of a numbered step.
### Tab Switcher ### Tab switcher
Our Markdown processor supports easily creating a tab switcher widget Our Markdown processor supports easily creating a tab switcher widget
design to easily show the instructions for different design to easily show the instructions for different

View File

@ -1,8 +1,8 @@
# Git Cheat Sheet # Git cheat sheet
See also [fixing commits][fix-commit] See also [fixing commits][fix-commit]
## Common Commands ## Common commands
- add - add
- `git add foo.py` - `git add foo.py`
@ -53,7 +53,7 @@ See also [fixing commits][fix-commit]
- status - status
- `git status` - `git status`
## Detailed Cheat Sheet ## Detailed cheat sheet
- add - add
- `git add foo.py`: add `foo.py` to the staging area - `git add foo.py`: add `foo.py` to the staging area

View File

@ -1,4 +1,4 @@
# Fixing Commits # Fixing commits
This is mostly from This is mostly from
[here](https://help.github.com/en/articles/changing-a-commit-message#rewriting-the-most-recent-commit-message). [here](https://help.github.com/en/articles/changing-a-commit-message#rewriting-the-most-recent-commit-message).

View File

@ -1,21 +1,21 @@
######### #########
Git Guide Git guide
######### #########
.. toctree:: .. toctree::
:maxdepth: 3 :maxdepth: 3
Quick Start <overview> Quick start <overview>
Set up Git <setup> Set up Git <setup>
Zulip-specific-tools <zulip-tools> Zulip-specific tools <zulip-tools>
How Git is different <the-git-difference> How Git is different <the-git-difference>
Important Git terms <terminology> Important Git terms <terminology>
Get Zulip code <cloning> Get Zulip code <cloning>
Working copies <working-copies> Working copies <working-copies>
Using Git as you work <using> Using Git as you work <using>
Pull Requests <pull-requests> Pull requests <pull-requests>
Collaborate <collaborate> Collaborate <collaborate>
Fixing commits <fixing-commits> Fixing commits <fixing-commits>
Reviewing changes <reviewing> Reviewing changes <reviewing>
Get and stay out of trouble <troubleshooting> Get and stay out of trouble <troubleshooting>
Git Cheat Sheet <cheat-sheet> Git cheat sheet <cheat-sheet>

View File

@ -1,4 +1,4 @@
# Quick start: How Zulip uses Git and GitHub # Quick start: how Zulip uses Git and GitHub
This quick start provides a brief overview of how Zulip uses Git and GitHub. This quick start provides a brief overview of how Zulip uses Git and GitHub.

View File

@ -8,14 +8,14 @@ from *Pro Git* by Scott Chacon and Ben Straub.
Here are the top things to know: Here are the top things to know:
- **Git works on snapshots:** Unlike other version control systems (e.g., - **Git works on snapshots.** Unlike other version control systems (e.g.,
Subversion, Perforce, Bazaar), which track files and changes to those files Subversion, Perforce, Bazaar), which track files and changes to those files
made over time, Git tracks *snapshots* of your project. Each time you commit made over time, Git tracks *snapshots* of your project. Each time you commit
or otherwise make a change to your repository, Git takes a snapshot of your or otherwise make a change to your repository, Git takes a snapshot of your
project and stores a reference to that snapshot. If a file hasn't changed, project and stores a reference to that snapshot. If a file hasn't changed,
Git creates a link to the identical file rather than storing it again. Git creates a link to the identical file rather than storing it again.
- **Most Git operations are local:** Git is a distributed version control - **Most Git operations are local.** Git is a distributed version control
system, so once you've cloned a repository, you have a complete copy of that system, so once you've cloned a repository, you have a complete copy of that
repository's *entire history*. Staging, committing, branching, and browsing repository's *entire history*. Staging, committing, branching, and browsing
history are all things you can do locally without network access and without history are all things you can do locally without network access and without
@ -56,7 +56,7 @@ Here are the top things to know:
changes but have not yet been marked for inclusion in the next commit; they changes but have not yet been marked for inclusion in the next commit; they
have not been added to the index. have not been added to the index.
- **Git commit workflow is as follows:** Edit files in your *working tree*. Add - **Git commit workflow is as follows.** Edit files in your *working tree*. Add
to the *index* (that is *stage*) with `git add`. *Commit* to the HEAD of the to the *index* (that is *stage*) with `git add`. *Commit* to the HEAD of the
current branch with `git commit`. current branch with `git commit`.

View File

@ -41,7 +41,7 @@ names.
- **origin**: This is your fork. - **origin**: This is your fork.
- **upstream**: This is the official Zulip repo. - **upstream**: This is the official Zulip repo.
## Relevant git commands ## Relevant Git commands
The following commands are useful for moving commits between The following commands are useful for moving commits between
working copies: working copies:

View File

@ -3,7 +3,7 @@
This article documents several useful tools that can save you a lot of This article documents several useful tools that can save you a lot of
time when working with Git on the Zulip project. time when working with Git on the Zulip project.
## Set up git repo script ## Set up Git repo script
**Extremely useful**. In the `tools` directory of **Extremely useful**. In the `tools` directory of
[zulip/zulip][github-zulip-zulip] you'll find a bash script [zulip/zulip][github-zulip-zulip] you'll find a bash script

View File

@ -32,14 +32,14 @@ installation <production/install.html>`_ or `Contributing to Zulip
Contents: Contents:
* :ref:`Overview <overview>` * :ref:`Overview <overview>`
* :ref:`Zulip in Production <zulip-in-production>` * :ref:`Zulip in production <zulip-in-production>`
* :ref:`Development Environment <development-environment>` * :ref:`Development environment <development-environment>`
* :ref:`Developer Tutorials <developer-tutorials>` * :ref:`Developer tutorials <developer-tutorials>`
* :ref:`Git Guide <git-guide>` * :ref:`Git guide <git-guide>`
* :ref:`Code Contribution Guide <code-contribution-guide>` * :ref:`Code contribution guide <code-contribution-guide>`
* :ref:`Code Testing <code-testing>` * :ref:`Code testing <code-testing>`
* :ref:`Subsystem Documentation <subsystem-documentation>` * :ref:`Subsystem documentation <subsystem-documentation>`
* :ref:`Writing Documentation <writing-documentation>` * :ref:`Writing documentation <writing-documentation>`
* :ref:`Translating <translating>` * :ref:`Translating <translating>`
.. _overview: .. _overview:

View File

@ -1,7 +1,7 @@
Zulip architectural overview Zulip architectural overview
============================ ============================
Key Codebases Key codebases
------------- -------------
The main Zulip codebase is at <https://github.com/zulip/zulip>. It The main Zulip codebase is at <https://github.com/zulip/zulip>. It

View File

@ -1,4 +1,4 @@
# Version History # Version history
All notable changes to the Zulip server are documented in this file. All notable changes to the Zulip server are documented in this file.
@ -16,7 +16,7 @@ in bursts.
- Redesigned the top navbar/search area to be much cleaner and show - Redesigned the top navbar/search area to be much cleaner and show
useful data like subscriber counts and stream descriptions in useful data like subscriber counts and stream descriptions in
default views. default views.
- Added a new "Recent Topics" widget, which lets one browse recent - Added a new "recent topics" widget, which lets one browse recent
and ongoing conversations at a glance. We expect this widget to and ongoing conversations at a glance. We expect this widget to
replace "All messages" as the default view in Zulip in the replace "All messages" as the default view in Zulip in the
next major release. next major release.

View File

@ -43,7 +43,7 @@ paths will be familiar to Django developers.
------------------------------------------------------------------- -------------------------------------------------------------------
### HTML Templates ### HTML templates
See [our docs](../subsystems/html-css.md) for details on Zulip's See [our docs](../subsystems/html-css.md) for details on Zulip's
templating systems. templating systems.
@ -126,7 +126,7 @@ Django context (i.e. with database access).
--------------------------------------------------------- ---------------------------------------------------------
### API and Bots ### API and bots
* See the [Zulip API repository](https://github.com/zulip/python-zulip-api). * See the [Zulip API repository](https://github.com/zulip/python-zulip-api).
Zulip's Python API bindings, a number of Zulip integrations and Zulip's Python API bindings, a number of Zulip integrations and
@ -163,7 +163,7 @@ This is used to deploy essentially all configuration in production.
----------------------------------------------------------------------- -----------------------------------------------------------------------
### Jinja2 Compatibility Files ### Jinja2 compatibility files
* `zproject/jinja2/__init__.py` Jinja2 environment. * `zproject/jinja2/__init__.py` Jinja2 environment.

View File

@ -518,7 +518,7 @@ we have enough strong applicants.
well. You'll need to learn React Native as part of getting well. You'll need to learn React Native as part of getting
involved. There's tons of good online tutorials, courses, etc. involved. There's tons of good online tutorials, courses, etc.
### Electron Desktop app ### Electron desktop app
Code: Code:
[Our cross-platform desktop app written in JavaScript on Electron](https://github.com/zulip/zulip-desktop). [Our cross-platform desktop app written in JavaScript on Electron](https://github.com/zulip/zulip-desktop).
@ -528,7 +528,7 @@ Experts: Akash Nimare, Abhighyan Khaund
application](https://github.com/zulip/zulip-desktop). There's application](https://github.com/zulip/zulip-desktop). There's
plenty of feature/UI work to do, but focus areas for us include plenty of feature/UI work to do, but focus areas for us include
things to (1) improve the release process for the app, using things to (1) improve the release process for the app, using
automated testing, typescript, etc. and (2) polish the UI. Browse automated testing, TypeScript, etc. and (2) polish the UI. Browse
the open issues and get involved! the open issues and get involved!
**Skills required**: JavaScript experience, Electron experience. You **Skills required**: JavaScript experience, Electron experience. You

View File

@ -1,4 +1,4 @@
# The Zulip Roadmap # The Zulip roadmap
Zulip has received a great deal of interest and attention since it was Zulip has received a great deal of interest and attention since it was
released as free and open source software by Dropbox. That attention released as free and open source software by Dropbox. That attention

View File

@ -1,5 +1,5 @@
################### ###################
Zulip in Production Zulip in production
################### ###################
.. toctree:: .. toctree::

View File

@ -2,7 +2,7 @@
:orphan: :orphan:
``` ```
# Production Installation on Existing Server # Production installation on existing server
Here are some tips for installing the latest release Zulip on a Here are some tips for installing the latest release Zulip on a
production server running Debian or Ubuntu. The Zulip installation production server running Debian or Ubuntu. The Zulip installation

View File

@ -1,4 +1,4 @@
# Production Installation # Production installation
You'll need an Ubuntu or Debian system that satisfies You'll need an Ubuntu or Debian system that satisfies
[the installation requirements](../production/requirements.md). Alternatively, [the installation requirements](../production/requirements.md). Alternatively,

View File

@ -157,10 +157,10 @@ Zulip open source project understand how many people are using Zulip,
and help us allocate resources towards supporting self-hosted and help us allocate resources towards supporting self-hosted
installations. installations.
Our use of these statistics is governed by the same ToS and Our use of these statistics is governed by the same Terms of Service
Privacy Policy that covers the Mobile Push Notifications Service and Privacy Policy that covers the Mobile Push Notifications Service
itself. If your organization does not want to submit these itself. If your organization does not want to submit these statistics,
statistics, you can disable this feature at any time by setting you can disable this feature at any time by setting
`SUBMIT_USAGE_STATISTICS=False` in `/etc/zulip/settings.py`. `SUBMIT_USAGE_STATISTICS=False` in `/etc/zulip/settings.py`.
## Sending push notifications directly from your server ## Sending push notifications directly from your server

View File

@ -50,7 +50,7 @@ For servers hosting a large number of organizations, like
= True` in `/etc/zulip/settings.py` so that the homepage for the = True` in `/etc/zulip/settings.py` so that the homepage for the
server is a copy of the Zulip homepage. server is a copy of the Zulip homepage.
### SSL Certificates ### SSL certificates
You'll need to install an SSL certificate valid for all the You'll need to install an SSL certificate valid for all the
(sub)domains you're using your Zulip server with. You can get an SSL (sub)domains you're using your Zulip server with. You can get an SSL
@ -125,7 +125,7 @@ like "Notification Bot", "Welcome Bot", etc. exist. In the future,
we're considering moving these bots to exist in every realm, so that we're considering moving these bots to exist in every realm, so that
we wouldn't need the system realm anymore. we wouldn't need the system realm anymore.
### Migrating / Troubleshooting ### Migrating / troubleshooting
If you're migrating from a configuration using the root domain to one If you're migrating from a configuration using the root domain to one
with realms hosted on subdomains, be sure to clear cookies in any with realms hosted on subdomains, be sure to clear cookies in any

View File

@ -139,7 +139,7 @@ with this approach, since it does bypass some of the work that
pg_ctlcluster does. pg_ctlcluster does.
#### Postgres Vacuuming alerts #### Postgres vacuuming alerts
The `autovac_freeze` postgres alert from `check_postgres` is The `autovac_freeze` postgres alert from `check_postgres` is
particularly important. This alert indicates that the age (in terms particularly important. This alert indicates that the age (in terms

View File

@ -1,4 +1,4 @@
# Requirements and Scalability # Requirements and scalability
To run a Zulip server, you will need: To run a Zulip server, you will need:
* A dedicated machine or VM * A dedicated machine or VM
@ -26,7 +26,7 @@ disregard our advice and use a server that hosts other services, we
can't support you, but can't support you, but
[we do have some notes on issues you'll encounter](install-existing-server.md). [we do have some notes on issues you'll encounter](install-existing-server.md).
#### Operating System #### Operating system
Ubuntu 20.04 Focal, 18.04 Bionic, and Debian 10 Buster are supported Ubuntu 20.04 Focal, 18.04 Bionic, and Debian 10 Buster are supported
for running Zulip in production. 64-bit is recommended. We recommend for running Zulip in production. 64-bit is recommended. We recommend
@ -48,7 +48,7 @@ sudo apt update
https://help.ubuntu.com/community/Repositories/Ubuntu https://help.ubuntu.com/community/Repositories/Ubuntu
[enable-universe]: https://help.ubuntu.com/community/Repositories/CommandLine#Adding_the_Universe_and_Multiverse_Repositories [enable-universe]: https://help.ubuntu.com/community/Repositories/CommandLine#Adding_the_Universe_and_Multiverse_Repositories
#### Hardware Specifications #### Hardware specifications
* CPU and Memory: For installations with 100+ users you'll need a * CPU and Memory: For installations with 100+ users you'll need a
minimum of **2 CPUs** and **4GB RAM**. For installations with fewer minimum of **2 CPUs** and **4GB RAM**. For installations with fewer
@ -66,7 +66,7 @@ https://help.ubuntu.com/community/Repositories/Ubuntu
See our [documentation on scalability](#scalability) below for advice See our [documentation on scalability](#scalability) below for advice
on hardware requirements for larger organizations. on hardware requirements for larger organizations.
#### Network and Security Specifications #### Network and security specifications
* Incoming HTTPS access (usually port 443, though this is * Incoming HTTPS access (usually port 443, though this is
[configurable](../production/deployment.html#using-an-alternate-port)) [configurable](../production/deployment.html#using-an-alternate-port))
@ -96,7 +96,7 @@ on hardware requirements for larger organizations.
## Credentials needed ## Credentials needed
#### SSL Certificate #### SSL certificate
Your Zulip server will need an SSL certificate for the domain name it Your Zulip server will need an SSL certificate for the domain name it
uses. For most Zulip servers, the recommended (and simplest) way to uses. For most Zulip servers, the recommended (and simplest) way to

View File

@ -1,4 +1,4 @@
# Security Model # Security model
This section attempts to document the Zulip security model. It likely This section attempts to document the Zulip security model. It likely
does not cover every issue; if there are details you're curious about, does not cover every issue; if there are details you're curious about,
@ -25,7 +25,7 @@ announcement).
entire message history, and thus someone with control over the entire message history, and thus someone with control over the
server has access to that data as well. server has access to that data as well.
## Encryption and Authentication ## Encryption and authentication
* Traffic between clients (web, desktop and mobile) and the Zulip is * Traffic between clients (web, desktop and mobile) and the Zulip is
encrypted using HTTPS. By default, all Zulip services talk to each encrypted using HTTPS. By default, all Zulip services talk to each
@ -90,7 +90,7 @@ strength allowed is controlled by two settings in
[zxcvbn-paper]: https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_wheeler.pdf [zxcvbn-paper]: https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_wheeler.pdf
[Bon12]: http://ieeexplore.ieee.org/document/6234435/ [Bon12]: http://ieeexplore.ieee.org/document/6234435/
## Messages and History ## Messages and history
* Zulip message content is rendered using a specialized Markdown * Zulip message content is rendered using a specialized Markdown
parser which escapes content to protect against cross-site scripting parser which escapes content to protect against cross-site scripting
@ -132,7 +132,7 @@ strength allowed is controlled by two settings in
[Configuring message editing and deletion](https://zulip.com/help/configure-message-editing-and-deletion) [Configuring message editing and deletion](https://zulip.com/help/configure-message-editing-and-deletion)
for more details. for more details.
## Users and Bots ## Users and bots
* There are several types of users in a Zulip organization: Organization * There are several types of users in a Zulip organization: Organization
Owners, Organization Administrators, Members (normal users), Guests, Owners, Organization Administrators, Members (normal users), Guests,

View File

@ -21,7 +21,7 @@ su zulip -c '/home/zulip/deployments/current/scripts/restart-server'
## Specific settings ## Specific settings
### Domain and Email settings ### Domain and email settings
`EXTERNAL_HOST`: the user-accessible domain name for your Zulip `EXTERNAL_HOST`: the user-accessible domain name for your Zulip
installation (i.e., what users will type in their web browser). This installation (i.e., what users will type in their web browser). This
@ -34,7 +34,7 @@ maintaining this installation and who will get support and error
emails. If you passed `--email` to the installer, this will be emails. If you passed `--email` to the installer, this will be
prefilled with that value. prefilled with that value.
### Authentication Backends ### Authentication backends
`AUTHENTICATION_BACKENDS`: Zulip supports a wide range of popular `AUTHENTICATION_BACKENDS`: Zulip supports a wide range of popular
options for authenticating users to your server, including Google options for authenticating users to your server, including Google

View File

@ -1,4 +1,4 @@
# Installing SSL Certificates # Installing SSL certificates
To keep your communications secure, Zulip runs over HTTPS only. To keep your communications secure, Zulip runs over HTTPS only.
You'll need an SSL/TLS certificate. You'll need an SSL/TLS certificate.

View File

@ -63,7 +63,7 @@ doing the final upgrade at off hours, or buying a support contract.
See the [troubleshooting guide](#troubleshooting-and-rollback) if you See the [troubleshooting guide](#troubleshooting-and-rollback) if you
run into any issues or need to roll back the upgrade. run into any issues or need to roll back the upgrade.
## Upgrading from a git repository ## Upgrading from a Git repository
Zulip supports upgrading a production installation to any commit in a Zulip supports upgrading a production installation to any commit in a
Git repository, which is great for [running pre-release changes from Git repository, which is great for [running pre-release changes from
@ -489,7 +489,7 @@ cd zulip
git fetch --tags upstream git fetch --tags upstream
git checkout acme-branch git checkout acme-branch
git rebase --onto 2.1.0 2.0.4 git rebase --onto 2.1.0 2.0.4
# Fix any errors or merge conflicts; see Zulip's Git Guide for advice # Fix any errors or merge conflicts; see Zulip's Git guide for advice
# Use `git diff` to verify your changes are what you expect # Use `git diff` to verify your changes are what you expect
git diff 2.1.0 acme-branch git diff 2.1.0 acme-branch

View File

@ -123,7 +123,7 @@ efficient:
year, most of whose values are 0. A related note is to be cautious about year, most of whose values are 0. A related note is to be cautious about
adding queries that are typically non-0 instead of being typically 0. adding queries that are typically non-0 instead of being typically 0.
## Backend Testing ## Backend testing
There are a few types of automated tests that are important for this sort of There are a few types of automated tests that are important for this sort of
system: system:
@ -156,7 +156,7 @@ statistics, etc.). There is currently a reference implementation of a
## Analytics UI development and testing ## Analytics UI development and testing
### Setup and Testing ### Setup and testing
The main testing approach for the /stats page UI is manual testing. The main testing approach for the /stats page UI is manual testing.
For most UI testing, you can visit `/stats/realm/analytics` while For most UI testing, you can visit `/stats/realm/analytics` while

View File

@ -61,11 +61,11 @@ Things that we still may need:
We have a few major classes of data. They are listed below in the order We have a few major classes of data. They are listed below in the order
that we process them in `do_export_realm()`: that we process them in `do_export_realm()`:
#### Public Realm Data #### Public realm data
`Realm/RealmDomain/RealmEmoji/RealmFilter/DefaultStream`. `Realm/RealmDomain/RealmEmoji/RealmFilter/DefaultStream`.
#### Cross Realm Data #### Cross realm data
`Client/zerver_userprofile_cross_realm` `Client/zerver_userprofile_cross_realm`
@ -75,18 +75,18 @@ This includes `Client` and three bots.
`UserProfile` or `Realm` (unless you somewhat painfully tie it back to `UserProfile` or `Realm` (unless you somewhat painfully tie it back to
users in a bottom-up fashion though other tables). users in a bottom-up fashion though other tables).
#### Disjoint User Data #### Disjoint user data
`UserProfile/UserActivity/UserActivityInterval/UserPresence`. `UserProfile/UserActivity/UserActivityInterval/UserPresence`.
#### Recipient Data #### Recipient data
`Recipient/Stream/Subscription/Huddle`. `Recipient/Stream/Subscription/Huddle`.
These tables are tied back to users, but they introduce complications These tables are tied back to users, but they introduce complications
when you try to deal with multi-user subsets. when you try to deal with multi-user subsets.
#### File-related Data #### File-related data
`Attachment` `Attachment`
@ -95,7 +95,7 @@ of `UserProfile`. Most importantly, of course, it requires us to grab
files from S3. Finally, `Attachment`'s `m2m` relationship ties to files from S3. Finally, `Attachment`'s `m2m` relationship ties to
`Message`. `Message`.
#### Message Data #### Message data
`Message/UserMessage` `Message/UserMessage`
@ -116,13 +116,13 @@ process the data, which isn't surprising for a top-down approach.)
The next section of the document talks about risk factors. The next section of the document talks about risk factors.
## Risk Mitigation ## Risk mitigation
### Generic considerations ### Generic considerations
We have two major mechanisms for getting data: We have two major mechanisms for getting data:
##### Top Down ##### Top down
Get realm data, then all users in realm, then all recipients, then all Get realm data, then all users in realm, then all recipients, then all
messages, etc. messages, etc.
@ -131,7 +131,7 @@ The problem with the top-down approach will be **filtering**. Also,
if errors arise during top-down passes, it may be time consuming to if errors arise during top-down passes, it may be time consuming to
re-run the processes. re-run the processes.
##### Bottom Up ##### Bottom up
Start with users, get their recipient data, etc. Start with users, get their recipient data, etc.
@ -139,14 +139,14 @@ The problems with the bottom up approach will be **merging**. Also,
if we run multiple bottom-up passes, there is the danger of if we run multiple bottom-up passes, there is the danger of
duplicating some work, particularly on the message side of things. duplicating some work, particularly on the message side of things.
### Approved Transfers ### Approved transfers
We have not yet integrated the approved-transfer model, which tells us We have not yet integrated the approved-transfer model, which tells us
which users can be moved. which users can be moved.
### Risk factors broken out by data categories ### Risk factors broken out by data categories
#### Message Data #### Message data
- models: `Message`/`UserMessage`. - models: `Message`/`UserMessage`.
- assets: `messages-*.json`, subprocesses, partial files - assets: `messages-*.json`, subprocesses, partial files
@ -165,7 +165,7 @@ We currently have these measures in place for top-down processing:
- messages are filtered by both sender and recipient - messages are filtered by both sender and recipient
#### File Related Data #### File related data
- models: `Attachment` - models: `Attachment`
- assets: S3, `attachment.json`, `uploads-temp/`, image files in - assets: S3, `attachment.json`, `uploads-temp/`, image files in
@ -185,7 +185,7 @@ parts**:
- At import time we have to populate the `m2m` table (but fortunately, - At import time we have to populate the `m2m` table (but fortunately,
this is pretty low risk in terms of breaking anything.) this is pretty low risk in terms of breaking anything.)
#### Recipient Data #### Recipient data
- models: `Recipient/Stream/Subscription/Huddle` - models: `Recipient/Stream/Subscription/Huddle`
- assets: `realm.json`, `(user,stream,huddle)_(recipient,subscription)` - assets: `realm.json`, `(user,stream,huddle)_(recipient,subscription)`
@ -219,7 +219,7 @@ Recommendation: We probably want to get a backup of all this data that
is very simply bulk-exported from the entire DB, and we should is very simply bulk-exported from the entire DB, and we should
obviously put it in a secure place. obviously put it in a secure place.
#### Cross Realm Data #### Cross realm data
- models: `Client` - models: `Client`
- assets: `realm.json`, three bots (`notification`/`email`/`welcome`), - assets: `realm.json`, three bots (`notification`/`email`/`welcome`),
`id_maps` `id_maps`
@ -245,7 +245,7 @@ example. As for possibly missing messages that the welcome bot and
friends have sent in the past, I am not sure what our risk profile is friends have sent in the past, I am not sure what our risk profile is
there, but I imagine it is relatively low. there, but I imagine it is relatively low.
#### Disjoint User Data #### Disjoint user data
- models: `UserProfile/UserActivity/UserActivityInterval/UserPresence` - models: `UserProfile/UserActivity/UserActivityInterval/UserPresence`
- assets: `realm.json`, `password`, `api_key`, `avatar salt`, - assets: `realm.json`, `password`, `api_key`, `avatar salt`,
`id_maps` `id_maps`
@ -259,7 +259,7 @@ We have code in place to exclude `password` and `api_key` from
`UserProfile` rows. The import process calls `UserProfile` rows. The import process calls
`set_unusable_password()`. `set_unusable_password()`.
#### Public Realm Data #### Public realm data
- models: `Realm/RealmDomain/RealmEmoji/RealmFilter/DefaultStream` - models: `Realm/RealmDomain/RealmEmoji/RealmFilter/DefaultStream`
- asserts: `realm.json` - asserts: `realm.json`

View File

@ -1,4 +1,4 @@
# Real-time Push and Events # Real-time push and events
Zulip's "events system" is the server-to-client push system that Zulip's "events system" is the server-to-client push system that
powers our real-time sync. This document explains how it works; to powers our real-time sync. This document explains how it works; to

View File

@ -27,7 +27,7 @@ changes made in source files will immediately take effect in open
browser windows, either by live-updating the CSS or reloading the browser windows, either by live-updating the CSS or reloading the
browser window (following backend changes). browser window (following backend changes).
## CSS Style guidelines ## CSS style guidelines
### Avoid duplicated code ### Avoid duplicated code
@ -147,7 +147,7 @@ relevant background as well.
### Primary build process ### Primary build process
Zulip's frontend is primarily JavaScript in the `static/js` directory; Zulip's frontend is primarily JavaScript in the `static/js` directory;
we are working on migrating these to Typescript modules. Stylesheets we are working on migrating these to TypeScript modules. Stylesheets
are written in the Sass extension of CSS (with the scss syntax), they are written in the Sass extension of CSS (with the scss syntax), they
are converted from plain CSS, and we have yet to take full advantage of are converted from plain CSS, and we have yet to take full advantage of
the features Sass offers. We use Webpack to transpile and build JS the features Sass offers. We use Webpack to transpile and build JS
@ -237,7 +237,7 @@ server is restarted, files are copied into that directory.
without breaking the rendering of old messages (or doing a without breaking the rendering of old messages (or doing a
mass-rerender of old messages). mass-rerender of old messages).
### CommonJS/Typescript modules ### CommonJS/TypeScript modules
Webpack provides seamless interoperability between different module Webpack provides seamless interoperability between different module
systems such as CommonJS, AMD and ES6. Our JS files are written in the systems such as CommonJS, AMD and ES6. Our JS files are written in the
@ -257,7 +257,7 @@ analysis. TypeScript uses an ES6-like module system. Any declaration
can be made public by adding the `export` keyword. Consuming can be made public by adding the `export` keyword. Consuming
variables, functions, etc exported from another module should be done variables, functions, etc exported from another module should be done
with the `import` statement as oppose to accessing them from the with the `import` statement as oppose to accessing them from the
global `window` scope. Internally our typescript compiler is global `window` scope. Internally our TypeScript compiler is
configured to transpile TS to the ES6 module system. configured to transpile TS to the ES6 module system.
Read more about these module systems here: Read more about these module systems here:

View File

@ -1,5 +1,5 @@
######################## ########################
Subsystems Documentation Subsystems documentation
######################## ########################
.. toctree:: .. toctree::

View File

@ -1,4 +1,4 @@
# UI: Input Pills # UI: input pills
This is a high level and API explanation of the input pill interface in the This is a high level and API explanation of the input pill interface in the
frontend of the Zulip web application. frontend of the Zulip web application.
@ -15,7 +15,7 @@ A pill container should have the following markup:
The pills will automatically be inserted in before the ".input" in order. The pills will automatically be inserted in before the ".input" in order.
## Basic Usage ## Basic usage
```js ```js
var pill_containter = $("#input_container"); var pill_containter = $("#input_container");

View File

@ -1,4 +1,4 @@
# Logging and Error reporting # Logging and error reporting
Having a good system for logging error reporting is essential to Having a good system for logging error reporting is essential to
making a large project like Zulip successful. Without reliable error making a large project like Zulip successful. Without reliable error

View File

@ -196,7 +196,7 @@ and users are generally writing quickly. Zulip's Markdown strategy is
based on the principles of giving users the power they need to express based on the principles of giving users the power they need to express
complicated ideas in a chat context while minimizing those two error rates. complicated ideas in a chat context while minimizing those two error rates.
## Zulip's Changes to Markdown ## Zulip's changes to Markdown
Below, we document the changes that Zulip has against stock Below, we document the changes that Zulip has against stock
Python-Markdown; some of the features we modify / disable may already Python-Markdown; some of the features we modify / disable may already

View File

@ -9,14 +9,14 @@ The
[production docs on multiple realms](../production/multiple-organizations.md) [production docs on multiple realms](../production/multiple-organizations.md)
are likely also relevant reading. are likely also relevant reading.
## Creating Realms ## Creating realms
There are two main methods for creating realms. There are two main methods for creating realms.
* Using unique link generator * Using unique link generator
* Enabling open realm creation * Enabling open realm creation
#### Using Unique Link Generator #### Using unique link generator
```bash ```bash
./manage.py generate_realm_creation_link ./manage.py generate_realm_creation_link
@ -28,10 +28,10 @@ after the creation of the realm. The link also expires if not used
within 7 days. The expiration period can be changed by modifying within 7 days. The expiration period can be changed by modifying
`REALM_CREATION_LINK_VALIDITY_DAYS` in settings.py. `REALM_CREATION_LINK_VALIDITY_DAYS` in settings.py.
### Enabling Open Realm Creation ### Enabling open realm creation
If you want anyone to be able to create new realms on your server, you If you want anyone to be able to create new realms on your server, you
can enable Open Realm Creation. This will add a **Create new can enable open realm creation. This will add a **Create new
organization** link to your Zulip homepage footer, and anyone can organization** link to your Zulip homepage footer, and anyone can
create a new realm by visiting this link (**/new**). This create a new realm by visiting this link (**/new**). This
feature is disabled by default in production instances, and can be feature is disabled by default in production instances, and can be
@ -55,7 +55,7 @@ releases had much less nice handling for subdomains. See our
[docs on using subdomains](../production/multiple-organizations.md) for [docs on using subdomains](../production/multiple-organizations.md) for
user-facing documentation on this. user-facing documentation on this.
### Working With Subdomains In Development Environment ### Working with subdomains in development environment
By default, Linux does not provide a convenient way to use subdomains By default, Linux does not provide a convenient way to use subdomains
in your local development environment. To solve this problem, we use in your local development environment. To solve this problem, we use

View File

@ -1,4 +1,4 @@
# Schema Migrations # Schema migrations
Zulip uses the [standard Django system for doing schema Zulip uses the [standard Django system for doing schema
migrations](https://docs.djangoproject.com/en/1.10/topics/migrations/). migrations](https://docs.djangoproject.com/en/1.10/topics/migrations/).

View File

@ -284,7 +284,7 @@ of about 1 second per 2000 users subscribed to receive the message.
While these delays may not be immediately obvious to users (Zulip, While these delays may not be immediately obvious to users (Zulip,
like many other chat applications, like many other chat applications,
[local echoes](../subsystems/markdown.md) messages that a user sends [local echoes](../subsystems/markdown.md) messages that a user sends
as soon as the user hits “send”), latency beyond a second or two as soon as the user hits “Send”), latency beyond a second or two
significantly impacts the feeling of interactivity in a chat significantly impacts the feeling of interactivity in a chat
experience (i.e. it feels like everyone takes a long time to reply to experience (i.e. it feels like everyone takes a long time to reply to
even simple questions). even simple questions).

View File

@ -231,7 +231,7 @@ but you don't want to have to modify the Zulip server codebase
to turn on those features. This is where our "zform" to turn on those features. This is where our "zform"
architecture comes to the rescue. architecture comes to the rescue.
## zform (Trivia Quiz bot) ## zform (trivia quiz bot)
This section will describe our "zform" architecture. This section will describe our "zform" architecture.

View File

@ -1,5 +1,5 @@
############ ############
Code Testing Code testing
############ ############
.. toctree:: .. toctree::

View File

@ -195,7 +195,7 @@ We use Puppet as our tool to manage configuration files, using
puppet "manifests." To lint puppet manifests, we use the "parser validate" puppet "manifests." To lint puppet manifests, we use the "parser validate"
option of puppet. option of puppet.
#### HTML Templates #### HTML templates
Zulip uses two HTML templating systems: Zulip uses two HTML templating systems:

View File

@ -11,7 +11,7 @@ This doc assumes you know how to set up a local development server
and open the Zulip app in the browser. It also assumes a basic and open the Zulip app in the browser. It also assumes a basic
knowledge of how to use Zulip. knowledge of how to use Zulip.
## Basic Stuff ## ## Basic stuff ##
When testing Zulip manually, here are things to focus on: When testing Zulip manually, here are things to focus on:
@ -453,7 +453,7 @@ Test per-stream options:
messages view messages view
- Verify stream subscriber counts in the main stream view - Verify stream subscriber counts in the main stream view
### User Settings ### ### User settings ###
You can modify per-user settings by choosing "Settings" in the gear menu. You can modify per-user settings by choosing "Settings" in the gear menu.
Do these tasks as Cordelia. Do these tasks as Cordelia.
@ -492,7 +492,7 @@ Do these tasks as Cordelia.
- Turn on/off "Enable desktop notifications for new streams" and test. - Turn on/off "Enable desktop notifications for new streams" and test.
(We may eliminate this option soon.) (We may eliminate this option soon.)
### Keyboard Shortcuts ### ### Keyboard shortcuts ###
We mostly test keyboard shortcuts as part of other tasks. We mostly test keyboard shortcuts as part of other tasks.

View File

@ -87,7 +87,7 @@ an `Any` or `# type: ignore[code]` so you're not blocked waiting for help,
add a `# TODO: ` comment so it doesn't get forgotten in code review, add a `# TODO: ` comment so it doesn't get forgotten in code review,
and ask for help in chat.zulip.org. and ask for help in chat.zulip.org.
## mypy stubs for third-party modules. ## Mypy stubs for third-party modules
For the Python standard library and some popular third-party modules, For the Python standard library and some popular third-party modules,
the [typeshed project](https://github.com/python/typeshed) has the [typeshed project](https://github.com/python/typeshed) has

View File

@ -1,4 +1,4 @@
# Testing Philosophy # Testing philosophy
Zulip's automated tests are a huge part of what makes the project able Zulip's automated tests are a huge part of what makes the project able
to make progress. This page records some of the key principles behind to make progress. This page records some of the key principles behind
@ -195,4 +195,3 @@ these tests are defense in depth; the main way we prevent invalid
access to streams is not offering developers a way to get a Stream access to streams is not offering developers a way to get a Stream
object in server code except as mediated through these security check object in server code except as mediated through these security check
functions. functions.

View File

@ -1,4 +1,4 @@
# Web frontend black-box casperjs tests # Web frontend black-box CasperJS tests
These live in `frontend_tests/casper_tests/`. This is a "black box" These live in `frontend_tests/casper_tests/`. This is a "black box"
integration test; we load the frontend in a real (headless) browser, integration test; we load the frontend in a real (headless) browser,
@ -17,7 +17,7 @@ You can run the casper tests with `./tools/test-js-with-casper` or as
`./tools/test-js-with-casper 06-settings.js` to run a single test file `./tools/test-js-with-casper 06-settings.js` to run a single test file
from `frontend_tests/casper_tests/`. from `frontend_tests/casper_tests/`.
## Debugging Casper.JS ## Debugging CasperJS
When a Casper test fails, the first things to check (before you bother When a Casper test fails, the first things to check (before you bother
trying to use the Casper debugging tools are: trying to use the Casper debugging tools are:
@ -46,7 +46,7 @@ can sometimes give insight into exactly what's happening.
### Remote debugging ### Remote debugging
Casper.js (via PhantomJS) has support for remote debugging. However, it CasperJS (via PhantomJS) has support for remote debugging. However, it
is not perfect. Here are some steps for using it and gotchas you might is not perfect. Here are some steps for using it and gotchas you might
want to know; you'll likely also want to read the section on writing want to know; you'll likely also want to read the section on writing
tests (below) if you get stuck, since the advice on how to write tests (below) if you get stuck, since the advice on how to write

View File

@ -298,7 +298,7 @@ A common use is to prevent a call to a third-party service from using
the Internet; `git grep mock.patch | grep requests` is a good way to the Internet; `git grep mock.patch | grep requests` is a good way to
find several examples of doing this. find several examples of doing this.
## Zulip Testing Philosophy ## Zulip testing philosophy
If there is one word to describe Zulip's philosophy for writing tests, If there is one word to describe Zulip's philosophy for writing tests,
it is probably "flexible." (Hopefully "thorough" goes without saying.) it is probably "flexible." (Hopefully "thorough" goes without saying.)

View File

@ -7,7 +7,7 @@ following general translation rules.
## Rules ## Rules
### Formal or Informal? ### Formal or informal?
**Informal.** **Informal.**
@ -114,7 +114,7 @@ to get a feeling for the vocabulary.
* Balance common verbs and nouns with specific IT-related translations * Balance common verbs and nouns with specific IT-related translations
of English terms - this can be tricky, try to check how other resources of English terms - this can be tricky, try to check how other resources
were translated (e.g. GMail, Microsoft websites, Facebook) to decide were translated (e.g. Gmail, Microsoft websites, Facebook) to decide
what wouldn't sound awkward / rude in German. what wouldn't sound awkward / rude in German.
* For additional translation information, feel free to check out * For additional translation information, feel free to check out
@ -144,7 +144,7 @@ Since we try to avoid concatenating words whenever possible, don't use
We go with "markiert" instead of "gesternt" (which is not even a proper We go with "markiert" instead of "gesternt" (which is not even a proper
German word) here, since it comes closer to the original meaning of "starred". German word) here, since it comes closer to the original meaning of "starred".
*"Markierte Nachricht" (GMail, Transifex), *"Markierte Nachricht" (Gmail, Transifex),
"Nachricht mit Stern" (WhatsApp)* "Nachricht mit Stern" (WhatsApp)*
*"Bereich" (Transifex), "Community" (Google+)* *"Bereich" (Transifex), "Community" (Google+)*

View File

@ -16,7 +16,7 @@ Use informal Hindi for translation:
* Balance common verbs and nouns with specific IT-related translations * Balance common verbs and nouns with specific IT-related translations
of English terms - this can be tricky, try to check how other of English terms - this can be tricky, try to check how other
resources were translated (e.g. GMail, Microsoft websites, Facebook) resources were translated (e.g. Gmail, Microsoft websites, Facebook)
to decide what wouldn't sound awkward / rude in Hindi. to decide what wouldn't sound awkward / rude in Hindi.
Some terms are very tricky to translate, so be sure to communicate Some terms are very tricky to translate, so be sure to communicate

View File

@ -1,4 +1,4 @@
# Internationalization for Developers # Internationalization for developers
Zulip, like many popular applications, is designed with Zulip, like many popular applications, is designed with
internationalization (i18n) in mind, which means users can fully use internationalization (i18n) in mind, which means users can fully use

View File

@ -30,7 +30,7 @@ Use semi-formal Polish for translation, some specifics:
* Balance common verbs and nouns with specific IT-related translations * Balance common verbs and nouns with specific IT-related translations
of English terms - this can be tricky, try to check how other of English terms - this can be tricky, try to check how other
resources were translated (e.g. GMail, Microsoft websites, Facebook) resources were translated (e.g. Gmail, Microsoft websites, Facebook)
to decide what wouldn't sound awkward in Polish. to decide what wouldn't sound awkward in Polish.
Some terms are very tricky to translate, so be sure to communicate Some terms are very tricky to translate, so be sure to communicate

View File

@ -1,4 +1,4 @@
# Russian Translation Style Guide # Russian translation style guide
Вот некоторые правила, которых стоит придерживаться для поддержания Вот некоторые правила, которых стоит придерживаться для поддержания
качества перевода. Они продиктованы опытом - собственным и коллег, качества перевода. Они продиктованы опытом - собственным и коллег,

View File

@ -1,4 +1,4 @@
# Spanish Translation Style Guide # Spanish translation style guide
Use informal Spanish for translation: Use informal Spanish for translation:
@ -20,7 +20,7 @@ Use informal Spanish for translation:
* Balance common verbs and nouns with specific IT-related translations * Balance common verbs and nouns with specific IT-related translations
of English terms - this can be tricky, try to check how other of English terms - this can be tricky, try to check how other
resources were translated (e.g. GMail, Microsoft websites, Facebook) resources were translated (e.g. Gmail, Microsoft websites, Facebook)
to decide what wouldn't sound awkward / rude in Spanish. to decide what wouldn't sound awkward / rude in Spanish.
* Latest RAE rule ("solo" should * Latest RAE rule ("solo" should

View File

@ -1,4 +1,4 @@
# Translation Guidelines # Translation guidelines
Zulip's has full support for Unicode (and partial support for RTL Zulip's has full support for Unicode (and partial support for RTL
languages), so you can use your preferred language everywhere in languages), so you can use your preferred language everywhere in

View File

@ -1,5 +1,5 @@
################### ###################
Developer Tutorials Developer tutorials
################### ###################
.. toctree:: .. toctree::

View File

@ -1,4 +1,4 @@
# Life of a Request # Life of a request
It can sometimes be confusing to figure out how to write a new feature, It can sometimes be confusing to figure out how to write a new feature,
or debug an existing one. Let us try to follow a request through the or debug an existing one. Let us try to follow a request through the
@ -37,7 +37,7 @@ location /static/ {
} }
``` ```
## Nginx routes other requests [between django and tornado][tornado-django] ## Nginx routes other requests [between Django and Tornado][tornado-django]
[tornado-django]: ../overview/architecture-overview.html?highlight=tornado#django-and-tornado [tornado-django]: ../overview/architecture-overview.html?highlight=tornado#django-and-tornado

View File

@ -26,7 +26,7 @@ organized. And finally, the
[message sending](../subsystems/sending-messages.md) documentation on [message sending](../subsystems/sending-messages.md) documentation on
the additional complexity involved in sending messages. the additional complexity involved in sending messages.
## General Process ## General process
### Files impacted ### Files impacted
@ -50,12 +50,12 @@ organization in Zulip). The following files are involved in the process:
(ex: pushing an organization change to other open browsers and updating (ex: pushing an organization change to other open browsers and updating
the application's state). the application's state).
**Backend Testing** **Backend testing**
- `zerver/tests/test_realm.py`: end-to-end API tests for updating realm settings. - `zerver/tests/test_realm.py`: end-to-end API tests for updating realm settings.
- `zerver/tests/test_events.py`: tests for possible race bugs in the - `zerver/tests/test_events.py`: tests for possible race bugs in the
zerver/lib/events.py implementation. zerver/lib/events.py implementation.
**Frontend Testing** **Frontend testing**
- `frontend_tests/casper_tests/10-admin.js`: end-to-end tests for the organization - `frontend_tests/casper_tests/10-admin.js`: end-to-end tests for the organization
admin settings pages. admin settings pages.
- `frontend_tests/node_tests/dispatch.js` - `frontend_tests/node_tests/dispatch.js`
@ -134,7 +134,7 @@ or JavaScript/TypeScript code that generates user-facing strings, be sure to
**Testing:** There are two types of frontend tests: node-based unit **Testing:** There are two types of frontend tests: node-based unit
tests and blackbox end-to-end tests. The blackbox tests are run in a tests and blackbox end-to-end tests. The blackbox tests are run in a
headless browser using Casper.js and are located in headless browser using CasperJS and are located in
`frontend_tests/casper_tests/`. The unit tests use Node's `assert` `frontend_tests/casper_tests/`. The unit tests use Node's `assert`
module are located in `frontend_tests/node_tests/`. For more module are located in `frontend_tests/node_tests/`. For more
information on writing and running tests, see the information on writing and running tests, see the
@ -461,7 +461,7 @@ with the new value. E.g., for `authentication_methods`, we created
This completes the backend implementation. A great next step is to This completes the backend implementation. A great next step is to
write automated backend tests for your new feature. write automated backend tests for your new feature.
### Backend Tests ### Backend tests
To test the new setting syncs correctly with the `property_types` To test the new setting syncs correctly with the `property_types`
framework, one usually just needs to add a line in each of framework, one usually just needs to add a line in each of
@ -637,7 +637,7 @@ Here are few important cases you should consider when testing your changes:
buttons, so changes and saving in one subsection shouldn't affect buttons, so changes and saving in one subsection shouldn't affect
the others. the others.
### Front End Tests ### Front end tests
A great next step is to write front end tests. There are two types of A great next step is to write front end tests. There are two types of
frontend tests: [node-based unit tests](../testing/testing-with-node.md) and frontend tests: [node-based unit tests](../testing/testing-with-node.md) and

View File

@ -154,13 +154,13 @@ Some titles have been shortened for organizational purposes.
[TypeScript Declaration Files Introduction]: https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html [TypeScript Declaration Files Introduction]: https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html
## Git/Version Control Systems (VCS) ## Git/version control systems (VCS)
You may want to take a look first at our [Git and GitHub guide][]. You may want to take a look first at our [Git and GitHub guide][].
[Git and GitHub guide]: ../git/index.md [Git and GitHub guide]: ../git/index.md
## Computer Science/Algorithms ## Computer science/algorithms
*Blog* - [GeeksforGeeks][] *Blog* - [GeeksforGeeks][]
@ -216,7 +216,7 @@ You may want to take a look first at our [Git and GitHub guide][].
[List of good projects for new contributors]: https://github.com/MunGell/awesome-for-beginners [List of good projects for new contributors]: https://github.com/MunGell/awesome-for-beginners
## Competitions/Camps ## Competitions/camps
[CodeForces][] [CodeForces][]
@ -226,7 +226,7 @@ You may want to take a look first at our [Git and GitHub guide][].
[Free Code Camp]: https://www.freecodecamp.com [Free Code Camp]: https://www.freecodecamp.com
## Massive Open Online Courses (MOOC) Platforms ## Massive open online courses (MOOC) platforms
[Coursera][] [Coursera][]

View File

@ -340,7 +340,7 @@ extremely useful and even easy to use (at least the 99% of the time).
To learn more about how to use it, read To learn more about how to use it, read
[our docs](../git/index.md) on Git and [our docs](../git/index.md) on Git and
Github. GitHub.
[This cheatsheet][git-cheat-detailed] [This cheatsheet][git-cheat-detailed]
will be useful in your journey, as well. will be useful in your journey, as well.

View File

@ -222,7 +222,7 @@ casper.then(function () {
casper.fill( casper.fill(
'form[action^="/json/messages"]', 'form[action^="/json/messages"]',
{ {
content: "**Markdown Preview** >> Test for Markdown preview", content: "**Markdown preview** >> Test for Markdown preview",
}, },
false false
); );
@ -235,7 +235,7 @@ casper.then(function () {
casper.waitForSelectorTextChange("#preview_content", function () { casper.waitForSelectorTextChange("#preview_content", function () {
casper.test.assertEquals( casper.test.assertEquals(
casper.getHTML("#preview_content"), casper.getHTML("#preview_content"),
"<p><strong>Markdown Preview</strong> &gt;&gt; Test for Markdown preview</p>", "<p><strong>Markdown preview</strong> &gt;&gt; Test for Markdown preview</p>",
"Check Markdown is previewed properly" "Check Markdown is previewed properly"
); );
}); });

View File

@ -286,7 +286,7 @@ run_test("basic_chars", () => {
overlays.is_active = return_false; overlays.is_active = return_false;
assert_mapping("d", "drafts.launch"); assert_mapping("d", "drafts.launch");
// Test opening and closing of Recent Topics // Test opening and closing of recent topics
overlays.is_active = return_true; overlays.is_active = return_true;
overlays.recent_topics_open = return_true; overlays.recent_topics_open = return_true;
assert_mapping("t", "overlays.close_overlay"); assert_mapping("t", "overlays.close_overlay");

View File

@ -192,12 +192,12 @@ async function test_markdown_rendering(page) {
"", "",
); );
await common.fill_form(page, 'form[action^="/json/messages"]', { await common.fill_form(page, 'form[action^="/json/messages"]', {
content: "**Markdown Preview** >> Test for Markdown preview", content: "**Markdown preview** >> Test for Markdown preview",
}); });
await page.click("#markdown_preview"); await page.click("#markdown_preview");
await page.waitForSelector("#preview_content", {visible: true}); await page.waitForSelector("#preview_content", {visible: true});
const expected_markdown_html = const expected_markdown_html =
"<p><strong>Markdown Preview</strong> &gt;&gt; Test for Markdown preview</p>"; "<p><strong>Markdown preview</strong> &gt;&gt; Test for Markdown preview</p>";
await page.waitForFunction(() => $("#preview_content").html() !== ""); await page.waitForFunction(() => $("#preview_content").html() !== "");
markdown_preview_element = await page.$("#preview_content"); markdown_preview_element = await page.$("#preview_content");
assert.equal( assert.equal(

View File

@ -316,7 +316,7 @@ exports.create = function (opts) {
const id = $pill.data("id"); const id = $pill.data("id");
funcs.removePill(id); funcs.removePill(id);
$next.trigger("focus"); $next.trigger("focus");
// the "backspace" key in FireFox will go back a page if you do // the "backspace" key in Firefox will go back a page if you do
// not prevent it. // not prevent it.
e.preventDefault(); e.preventDefault();
} }

View File

@ -336,7 +336,7 @@ exports.user_initiated_animate_scroll = function (scroll_amount) {
exports.recenter_view = function (message, opts) { exports.recenter_view = function (message, opts) {
opts = opts || {}; opts = opts || {};
// Barnowl-style recentering: if the pointer is too high, move it to // BarnOwl-style recentering: if the pointer is too high, move it to
// the 1/2 marks. If the pointer is too low, move it to the 1/7 mark. // the 1/2 marks. If the pointer is too low, move it to the 1/7 mark.
// See keep_pointer_in_view() for related logic to keep the pointer onscreen. // See keep_pointer_in_view() for related logic to keep the pointer onscreen.

View File

@ -30,16 +30,16 @@ mirror script instead of using Webathena.</p>
web application will warn you if the Zephyr mirroring script is web application will warn you if the Zephyr mirroring script is
not running.</p> not running.</p>
<p>If you already have Barnowl running in screen/tmux somewhere, <p>If you already have BarnOwl running in screen/tmux somewhere,
you can just run:</p> you can just run:</p>
<p><code>/mit/tabbott/zulip/zephyr_mirror.py</code></p> <p><code>/mit/tabbott/zulip/zephyr_mirror.py</code></p>
<p>inside that screen session.</p> <p>inside that screen session.</p>
<h4>Mirroring without a Barnowl session</h4> <h4>Mirroring without a BarnOwl session</h4>
<p>If you are not already running a screen/tmux for Barnowl, you <p>If you are not already running a screen/tmux for BarnOwl, you
can setup a screen session to run the Zephyr mirroring script by can setup a screen session to run the Zephyr mirroring script by
running the following on a dialup such running the following on a dialup such
as <a href="https://linerva.mit.edu">linerva.mit.edu</a>:</p> as <a href="https://linerva.mit.edu">linerva.mit.edu</a>:</p>

View File

@ -42,7 +42,7 @@
<code>/mit/tabbott/zulip/zephyr_mirror.py --sync-subscriptions</code></p> <code>/mit/tabbott/zulip/zephyr_mirror.py --sync-subscriptions</code></p>
<p> <strong>NOTE</strong>: Zulip supports several ways to control what messages you want to read <p> <strong>NOTE</strong>: Zulip supports several ways to control what messages you want to read
right now, but Zulip does not yet have a direct equivalent to Barnowl filters. right now, but Zulip does not yet have a direct equivalent to BarnOwl filters.
If you have more subscriptions than you generally read, we recommend that you use If you have more subscriptions than you generally read, we recommend that you use
Zulip's "Mute" option to hide those subscriptions from your Zulip's "Mute" option to hide those subscriptions from your
home view that you less commonly read. You can still easily access those streams home view that you less commonly read. You can still easily access those streams

View File

@ -12,9 +12,9 @@ images and/or website links.
{settings_tab|organization-settings} {settings_tab|organization-settings}
1. Under **Other Settings**, toggle **Show previews of uploaded and linked images**. 1. Under **Other settings**, toggle **Show previews of uploaded and linked images**.
1. Under **Other Settings**, toggle **Show previews of linked websites**. 1. Under **Other settings**, toggle **Show previews of linked websites**.
{!save-changes.md!} {!save-changes.md!}

View File

@ -118,7 +118,7 @@ Organization administrators can also configure a default syntax
highlighting language. In this configuration, one can use ````text` highlighting language. In this configuration, one can use ````text`
to display content without any syntax highlighting. to display content without any syntax highlighting.
## Latex ## LaTeX
~~~ ~~~
Inline: $$O(n^2)$$ Inline: $$O(n^2)$$

View File

@ -1,4 +1,4 @@
# GDPR Compliance # GDPR compliance
This page covers how Zulip interacts with the EU's landmark GDPR This page covers how Zulip interacts with the EU's landmark GDPR
legislation; you can read the legislation; you can read the
@ -13,7 +13,7 @@ give them control over how their personal data is collected,
processed, and used. The law applies to any company that collects or processed, and used. The law applies to any company that collects or
processes the data of European consumers. processes the data of European consumers.
## Controllers and Processors ## Controllers and processors
There are two key relationships that are defined in the GDPR. As a There are two key relationships that are defined in the GDPR. As a
customer of Zulip Cloud, you operate as the controller when using our customer of Zulip Cloud, you operate as the controller when using our
@ -35,7 +35,7 @@ personal data. These entities are commonly referred to as
sub-processors. For example, Kandra Labs leverages cloud service sub-processors. For example, Kandra Labs leverages cloud service
providers like Amazon Web Services and Mailgun to host Zulip Cloud. providers like Amazon Web Services and Mailgun to host Zulip Cloud.
## How Zulip Supports GDPR Compliance ## How Zulip supports GDPR compliance
Were committed to the compliance of all parties including you, Were committed to the compliance of all parties including you,
third-parties, and us. third-parties, and us.
@ -66,7 +66,7 @@ this page but not defined have the meaning set forth in Zulip's Terms
of Service or superseding written agreement between Customer and of Service or superseding written agreement between Customer and
Kandra Labs (the "Agreement"). Kandra Labs (the "Agreement").
### Third Parties ### Third parties
Zulip currently uses third party Subprocessors to provide Zulip currently uses third party Subprocessors to provide
infrastructure services, and to help us provide customer support and infrastructure services, and to help us provide customer support and

View File

@ -9,7 +9,7 @@ W3C's Web Content Accessibility Guidelines.
2. Under **Display settings**, select **High contrast mode**. 2. Under **Display settings**, select **High contrast mode**.
## Related Articles ## Related articles
* [Accessibility in Zulip](https://zulip.readthedocs.io/en/latest/contributing/accessibility.html) * [Accessibility in Zulip](https://zulip.readthedocs.io/en/latest/contributing/accessibility.html)
* [View emoji as text](/help/view-emoji-as-text) * [View emoji as text](/help/view-emoji-as-text)

View File

@ -115,7 +115,7 @@
* [Export your organization](/help/export-your-organization) * [Export your organization](/help/export-your-organization)
* [Change organization URL](/help/change-organization-url) * [Change organization URL](/help/change-organization-url)
* [Deactivate your organization](/help/deactivate-your-organization) * [Deactivate your organization](/help/deactivate-your-organization)
* [GDPR Compliance](/help/gdpr-compliance) * [GDPR compliance](/help/gdpr-compliance)
## Organization settings ## Organization settings
* [Restrict stream creation](/help/configure-who-can-create-streams) * [Restrict stream creation](/help/configure-who-can-create-streams)

View File

@ -1,4 +1,4 @@
# Zulip User Documentation # Zulip user documentation
Zulip is a group chat app. Its most distinctive characteristic is that Zulip is a group chat app. Its most distinctive characteristic is that
conversation within an organization is divided into “**streams**” conversation within an organization is divided into “**streams**”

View File

@ -137,10 +137,10 @@ title="thumbs up"/>**: `+`
(including All messages), and don't contribute to unread counts. Read more about (including All messages), and don't contribute to unread counts. Read more about
[muting topics](/help/mute-a-topic). [muting topics](/help/mute-a-topic).
## Recent Topics ## Recent topics
* **View Recent Topics**: `t` * **View recent topics**: `t`
* **Hide Recent Topics**: `Esc` * **Hide recent topics**: `Esc`
Keyboard navigation (e.g. arrow keys) works as expected. Keyboard navigation (e.g. arrow keys) works as expected.
Use `Enter` to engage with elements. Use `Enter` to engage with elements.

View File

@ -32,6 +32,6 @@ Muted streams still appear in the left sidebar, though they are grayed out.
{end_tabs} {end_tabs}
## Related Articles ## Related articles
* [Mute a topic](/help/mute-a-topic) * [Mute a topic](/help/mute-a-topic)

View File

@ -1,4 +1,4 @@
# Organize the Streams sidebar # Organize the streams sidebar
At an organization level, we recommend starting with a few streams and At an organization level, we recommend starting with a few streams and
growing organically, and doing a cleanup once every year or two to archive growing organically, and doing a cleanup once every year or two to archive

View File

@ -1,4 +1,4 @@
# Restrict Profile picture change # Restrict profile picture change
{!admin-only.md!} {!admin-only.md!}

View File

@ -1,4 +1,4 @@
# SAML Authentication # SAML authentication
Zulip supports using SAML authentication for Single Sign On, both when Zulip supports using SAML authentication for Single Sign On, both when
self-hosting or on the Zulip Cloud Plus plan. self-hosting or on the Zulip Cloud Plus plan.
@ -57,7 +57,7 @@ Zulip with various common SAML Identity Providers.
* Optionally you can also send us an icon that should be shown on the button. * Optionally you can also send us an icon that should be shown on the button.
1. We will take care of the server-side setup and let you know as soon as it's ready. 1. We will take care of the server-side setup and let you know as soon as it's ready.
## Related Articles ## Related articles
* [SAML configuration][saml-readthedocs] for self-hosting. * [SAML configuration][saml-readthedocs] for self-hosting.

View File

@ -1,4 +1,4 @@
# Zulip in a Terminal # Zulip in a terminal
At present, there are a few alpha-quality implementations of a terminal At present, there are a few alpha-quality implementations of a terminal
client for Zulip: client for Zulip:
@ -8,9 +8,9 @@ terminal interface for Zulip using [Urwid](http://urwid.org). It is
written in python and is being very actively developed; feedback and written in python and is being very actively developed; feedback and
bug reports are very welcome! bug reports are very welcome!
* [Barnowl](https://github.com/aglasgall/barnowl/tree/zulip) is a * [BarnOwl](https://github.com/aglasgall/barnowl/tree/zulip) is a
multi-protocol terminal client for various chat systems, written in multi-protocol terminal client for various chat systems, written in
Perl. [Barnowl itself](https://barnowl.mit.edu/) is very mature Perl. [BarnOwl itself](https://barnowl.mit.edu/) is very mature
software, and the Zulip integration has been used for a few years, but software, and the Zulip integration has been used for a few years, but
it isn't integrated into the mainline branch and needs work on it isn't integrated into the mainline branch and needs work on
documentation. documentation.

View File

@ -35,7 +35,7 @@
that previously created that previously created
<a href="https://www.ksplice.com">Ksplice</a>, software for <a href="https://www.ksplice.com">Ksplice</a>, software for
live-patching a running Linux kernel. Zulip was inspired by live-patching a running Linux kernel. Zulip was inspired by
the <a href="https://barnowl.mit.edu/">Barnowl</a> client for the <a href="https://barnowl.mit.edu/">BarnOwl</a> client for
the <a href="https://en.wikipedia.org/wiki/Zephyr_(protocol)">Zephyr</a> the <a href="https://en.wikipedia.org/wiki/Zephyr_(protocol)">Zephyr</a>
protocol, and the incredible community that Zephyr supported at MIT. protocol, and the incredible community that Zephyr supported at MIT.
</p> </p>

View File

@ -17,7 +17,7 @@ class Command(ZulipBaseCommand):
def add_arguments(self, parser: ArgumentParser) -> None: def add_arguments(self, parser: ArgumentParser) -> None:
parser.add_argument('--entire-server', action="store_true", default=False, parser.add_argument('--entire-server', action="store_true", default=False,
help="Send to every user on the server. ") help="Send to every user on the server.")
parser.add_argument('--markdown-template-path', '--path', parser.add_argument('--markdown-template-path', '--path',
dest='markdown_template_path', dest='markdown_template_path',
required=True, required=True,

View File

@ -18,7 +18,7 @@ VIDEO_CHAT_PROVIDERS = {
def remove_google_hangouts_provider(apps: StateApps, schema_editor: DatabaseSchemaEditor) -> None: def remove_google_hangouts_provider(apps: StateApps, schema_editor: DatabaseSchemaEditor) -> None:
# We are removing the Google Hangout integration because Google has # We are removing the Google Hangout integration because Google has
# removed the Hangouts brand. All the realms that used Hangouts as # removed the Hangouts brand. All the realms that used Hangouts as
# their video chat provided are now set to the default, jitsi. # their video chat provided are now set to the default, Jitsi.
Realm = apps.get_model('zerver', 'Realm') Realm = apps.get_model('zerver', 'Realm')
Realm.objects.filter(video_chat_provider=VIDEO_CHAT_PROVIDERS['google_hangouts']['id']).update( Realm.objects.filter(video_chat_provider=VIDEO_CHAT_PROVIDERS['google_hangouts']['id']).update(
video_chat_provider=VIDEO_CHAT_PROVIDERS['jitsi_meet']['id'] video_chat_provider=VIDEO_CHAT_PROVIDERS['jitsi_meet']['id']

View File

@ -78,7 +78,7 @@ docs_without_macros = [
def render_markdown_path(markdown_file_path: str, def render_markdown_path(markdown_file_path: str,
context: Mapping[str, Any]={}, context: Mapping[str, Any]={},
pure_markdown: bool=False) -> str: pure_markdown: bool=False) -> str:
"""Given a path to a Markdown file, return the rendered html. """Given a path to a Markdown file, return the rendered HTML.
Note that this assumes that any HTML in the Markdown file is Note that this assumes that any HTML in the Markdown file is
trusted; it is intended to be used for documentation, not user trusted; it is intended to be used for documentation, not user