Overview
|
Interno |
Passing Juice |
Zulip overview
|
Interno |
Passing Juice |
Getting started
|
Interno |
Passing Juice |
Contributing to Zulip
|
Interno |
Passing Juice |
Community
|
Interno |
Passing Juice |
Ways to contribute
|
Interno |
Passing Juice |
Your first (codebase) contribution
|
Interno |
Passing Juice |
Picking an issue
|
Interno |
Passing Juice |
Working on an issue
|
Interno |
Passing Juice |
And beyond
|
Interno |
Passing Juice |
What makes a great Zulip contributor?
|
Interno |
Passing Juice |
Reporting issues
|
Interno |
Passing Juice |
User feedback
|
Interno |
Passing Juice |
Outreach programs
|
Interno |
Passing Juice |
Google Summer of Code
|
Interno |
Passing Juice |
Zulip outreach
|
Interno |
Passing Juice |
Zulip architectural overview
|
Interno |
Passing Juice |
Key codebases
|
Interno |
Passing Juice |
Usage assumptions and concepts
|
Interno |
Passing Juice |
Components
|
Interno |
Passing Juice |
Django and Tornado
|
Interno |
Passing Juice |
nginx
|
Interno |
Passing Juice |
Supervisor
|
Interno |
Passing Juice |
memcached
|
Interno |
Passing Juice |
Redis
|
Interno |
Passing Juice |
RabbitMQ
|
Interno |
Passing Juice |
PostgreSQL
|
Interno |
Passing Juice |
Nagios
|
Interno |
Passing Juice |
Glossary
|
Interno |
Passing Juice |
Directory structure
|
Interno |
Passing Juice |
Core Python files
|
Interno |
Passing Juice |
HTML templates
|
Interno |
Passing Juice |
JavaScript, TypeScript, and other static assets
|
Interno |
Passing Juice |
Tests
|
Interno |
Passing Juice |
Management commands
|
Interno |
Passing Juice |
Scripts
|
Interno |
Passing Juice |
API and bots
|
Interno |
Passing Juice |
Production Puppet configuration
|
Interno |
Passing Juice |
Additional Django apps
|
Interno |
Passing Juice |
Jinja2 compatibility files
|
Interno |
Passing Juice |
Translation files
|
Interno |
Passing Juice |
Documentation
|
Interno |
Passing Juice |
Release lifecycle
|
Interno |
Passing Juice |
Server and web app
|
Interno |
Passing Juice |
Stable releases
|
Interno |
Passing Juice |
Git versions
|
Interno |
Passing Juice |
Compatibility and upgrading
|
Interno |
Passing Juice |
Security releases
|
Interno |
Passing Juice |
Upgrade nag
|
Interno |
Passing Juice |
Operating system support
|
Interno |
Passing Juice |
Server roadmap
|
Interno |
Passing Juice |
Client apps
|
Interno |
Passing Juice |
API bindings
|
Interno |
Passing Juice |
Version history
|
Interno |
Passing Juice |
Zulip 5.x series
|
Interno |
Passing Juice |
5.0 – unreleased
|
Interno |
Passing Juice |
Zulip 4.x series
|
Interno |
Passing Juice |
4.3 – 2021-06-02
|
Interno |
Passing Juice |
4.2 – 2021-05-13
|
Interno |
Passing Juice |
4.1 – 2021-05-13
|
Interno |
Passing Juice |
4.0 – 2021-05-13
|
Interno |
Passing Juice |
Zulip 3.x series
|
Interno |
Passing Juice |
3.4 – April 14, 2021
|
Interno |
Passing Juice |
3.3 – December 1, 2020
|
Interno |
Passing Juice |
3.2 – September 15, 2020
|
Interno |
Passing Juice |
3.1 – July 30, 2020
|
Interno |
Passing Juice |
3.0 – July 16, 2020
|
Interno |
Passing Juice |
Zulip 2.1.x series
|
Interno |
Passing Juice |
2.1.7 – 2020-06-25
|
Interno |
Passing Juice |
2.1.6 – 2020-06-17
|
Interno |
Passing Juice |
2.1.5 – 2020-06-16
|
Interno |
Passing Juice |
2.1.4 – 2020-04-16
|
Interno |
Passing Juice |
2.1.3 – 2020-04-01
|
Interno |
Passing Juice |
2.1.2 – 2020-01-16
|
Interno |
Passing Juice |
2.1.1 – 2019-12-13
|
Interno |
Passing Juice |
2.1.0 – 2019-12-12
|
Interno |
Passing Juice |
Zulip 2.0.x series
|
Interno |
Passing Juice |
2.0.8 – 2019-12-12
|
Interno |
Passing Juice |
2.0.7 – 2019-11-21
|
Interno |
Passing Juice |
2.0.6 – 2019-09-23
|
Interno |
Passing Juice |
2.0.5 – 2019-09-11
|
Interno |
Passing Juice |
2.0.4 – 2019-06-29
|
Interno |
Passing Juice |
2.0.3 – 2019-04-23
|
Interno |
Passing Juice |
2.0.2 – 2019-03-15
|
Interno |
Passing Juice |
2.0.1 – 2019-03-04
|
Interno |
Passing Juice |
2.0.0 – 2019-03-01
|
Interno |
Passing Juice |
Zulip 1.9.x series
|
Interno |
Passing Juice |
1.9.2 – 2019-01-29
|
Interno |
Passing Juice |
1.9.1 – 2018-11-30
|
Interno |
Passing Juice |
1.9.0 – 2018-11-07
|
Interno |
Passing Juice |
Zulip 1.8.x series
|
Interno |
Passing Juice |
1.8.1 – 2018-05-07
|
Interno |
Passing Juice |
1.8.0 – 2018-04-17
|
Interno |
Passing Juice |
Zulip 1.7.x series
|
Interno |
Passing Juice |
1.7.2 – 2018-04-12
|
Interno |
Passing Juice |
1.7.1 – 2017-11-21
|
Interno |
Passing Juice |
1.7.0 – 2017-10-25
|
Interno |
Passing Juice |
Zulip 1.6.x and older
|
Interno |
Passing Juice |
1.6.0 – 2017-06-06
|
Interno |
Passing Juice |
1.5.2 – 2017-06-01
|
Interno |
Passing Juice |
1.5.1 – 2017-02-07
|
Interno |
Passing Juice |
1.5.0 – 2017-02-06
|
Interno |
Passing Juice |
1.4.3 - 2017-01-29
|
Interno |
Passing Juice |
1.4.2 - 2016-09-27
|
Interno |
Passing Juice |
1.4.1 - 2016-09-03
|
Interno |
Passing Juice |
1.4.0 - 2016-08-25
|
Interno |
Passing Juice |
1.3.13 - 2016-06-21
|
Interno |
Passing Juice |
1.3.12 - 2016-05-10
|
Interno |
Passing Juice |
1.3.11 - 2016-05-02
|
Interno |
Passing Juice |
1.3.10 - 2016-01-21
|
Interno |
Passing Juice |
1.3.9 - 2015-11-16
|
Interno |
Passing Juice |
1.3.8 - 2015-11-15
|
Interno |
Passing Juice |
1.3.7 - 2015-10-19
|
Interno |
Passing Juice |
Upgrade notes
|
Interno |
Passing Juice |
Zulip in production
|
Interno |
Passing Juice |
Requirements and scalability
|
Interno |
Passing Juice |
Server
|
Interno |
Passing Juice |
General
|
Interno |
Passing Juice |
Operating system
|
Interno |
Passing Juice |
Hardware specifications
|
Interno |
Passing Juice |
Network and security specifications
|
Interno |
Passing Juice |
Credentials needed
|
Interno |
Passing Juice |
SSL certificate
|
Interno |
Passing Juice |
Outgoing email
|
Interno |
Passing Juice |
Scalability
|
Interno |
Passing Juice |
Installing a production server
|
Interno |
Passing Juice |
Step 1: Download the latest release
|
Interno |
Passing Juice |
Step 2: Install Zulip
|
Interno |
Passing Juice |
Installer options
|
Interno |
Passing Juice |
Step 3: Create a Zulip organization, and log in
|
Interno |
Passing Juice |
Step 4: Configure and use
|
Interno |
Passing Juice |
Details: What the installer does
|
Interno |
Passing Juice |
Troubleshooting
|
Interno |
Passing Juice |
Troubleshooting and monitoring
|
Interno |
Passing Juice |
Using supervisorctl
|
Interno |
Passing Juice |
Troubleshooting services
|
Interno |
Passing Juice |
Restrict unattended upgrades
|
Interno |
Passing Juice |
Monitoring
|
Interno |
Passing Juice |
Nagios configuration
|
Interno |
Passing Juice |
Memory leak mitigation
|
Interno |
Passing Juice |
Management commands
|
Interno |
Passing Juice |
Running management commands
|
Interno |
Passing Juice |
manage.py shell
|
Interno |
Passing Juice |
Other useful manage.py commands
|
Interno |
Passing Juice |
Custom management commands
|
Interno |
Passing Juice |
Customize Zulip
|
Interno |
Passing Juice |
Making changes
|
Interno |
Passing Juice |
Specific settings
|
Interno |
Passing Juice |
Domain and email settings
|
Interno |
Passing Juice |
Authentication backends
|
Interno |
Passing Juice |
Mobile and desktop apps
|
Interno |
Passing Juice |
Terms of Service and Privacy policy
|
Interno |
Passing Juice |
Miscellaneous server settings
|
Interno |
Passing Juice |
Zulip announcement list
|
Interno |
Passing Juice |
Enjoy your Zulip installation!
|
Interno |
Passing Juice |
Mobile push notification service
|
Interno |
Passing Juice |
How to sign up
|
Interno |
Passing Juice |
Updating your server’s registration
|
Interno |
Passing Juice |
Why this is necessary
|
Interno |
Passing Juice |
Security and privacy
|
Interno |
Passing Juice |
Submitting statistics
|
Interno |
Passing Juice |
Sending push notifications directly from your server
|
Interno |
Passing Juice |
Upgrade or modify Zulip
|
Interno |
Passing Juice |
Upgrading to a release
|
Interno |
Passing Juice |
Upgrading from a Git repository
|
Interno |
Passing Juice |
Troubleshooting and rollback
|
Interno |
Passing Juice |
Rolling back to a prior version
|
Interno |
Passing Juice |
Preserving local changes to service configuration files
|
Interno |
Passing Juice |
nginx configuration changes
|
Interno |
Passing Juice |
Upgrading the operating system
|
Interno |
Passing Juice |
Upgrading from Ubuntu 18.04 Bionic to 20.04 Focal
|
Interno |
Passing Juice |
Upgrading from Ubuntu 16.04 Xenial to 18.04 Bionic
|
Interno |
Passing Juice |
Upgrading from Ubuntu 14.04 Trusty to 16.04 Xenial
|
Interno |
Passing Juice |
Upgrading from Debian Stretch to Debian Buster
|
Interno |
Passing Juice |
Upgrading PostgreSQL
|
Interno |
Passing Juice |
Modifying Zulip
|
Interno |
Passing Juice |
Making changes
|
Interno |
Passing Juice |
Upgrading to future releases
|
Interno |
Passing Juice |
Making changes with docker-zulip
|
Interno |
Passing Juice |
Applying changes from master
|
Interno |
Passing Juice |
Applying a small change
|
Interno |
Passing Juice |
Upgrading to master
|
Interno |
Passing Juice |
Contributing patches
|
Interno |
Passing Juice |
Security model
|
Interno |
Passing Juice |
Secure your Zulip server like your email server
|
Interno |
Passing Juice |
Encryption and authentication
|
Interno |
Passing Juice |
Passwords
|
Interno |
Passing Juice |
Messages and history
|
Interno |
Passing Juice |
Users and bots
|
Interno |
Passing Juice |
User-uploaded content and user-generated requests
|
Interno |
Passing Juice |
Final notes and security response
|
Interno |
Passing Juice |
Authentication methods
|
Interno |
Passing Juice |
Email and password
|
Interno |
Passing Juice |
Plug-and-play SSO (Google, GitHub, GitLab)
|
Interno |
Passing Juice |
LDAP (including Active Directory)
|
Interno |
Passing Juice |
Synchronizing data
|
Interno |
Passing Juice |
Multiple LDAP searches
|
Interno |
Passing Juice |
Restricting access to an LDAP group
|
Interno |
Passing Juice |
Restricting LDAP user access to specific organizations
|
Interno |
Passing Juice |
Troubleshooting
|
Interno |
Passing Juice |
SAML
|
Interno |
Passing Juice |
IdP-initiated SSO
|
Interno |
Passing Juice |
Restricting access to specific organizations
|
Interno |
Passing Juice |
Setup instructions for Apache-based SSO
|
Interno |
Passing Juice |
Troubleshooting Apache-based SSO
|
Interno |
Passing Juice |
Life of an Apache-based SSO login attempt
|
Interno |
Passing Juice |
Sign in with Apple
|
Interno |
Passing Juice |
OpenID Connect
|
Interno |
Passing Juice |
Adding more authentication backends
|
Interno |
Passing Juice |
Development only
|
Interno |
Passing Juice |
Backups, export and import
|
Interno |
Passing Juice |
Backups
|
Interno |
Passing Juice |
Restoring backups
|
Interno |
Passing Juice |
What is included
|
Interno |
Passing Juice |
Restore from manual backups
|
Interno |
Passing Juice |
PostgreSQL streaming replication
|
Interno |
Passing Juice |
Data export
|
Interno |
Passing Juice |
Preventing changes during the export
|
Interno |
Passing Juice |
Export your Zulip data
|
Interno |
Passing Juice |
Import into a new Zulip server
|
Interno |
Passing Juice |
Import options
|
Interno |
Passing Juice |
Logging in
|
Interno |
Passing Juice |
Deleting and re-importing
|
Interno |
Passing Juice |
PostgreSQL database details
|
Interno |
Passing Juice |
Remote PostgreSQL database
|
Interno |
Passing Juice |
Debugging PostgreSQL database issues
|
Interno |
Passing Juice |
Stopping the Zulip PostgreSQL database
|
Interno |
Passing Juice |
Debugging issues starting PostgreSQL
|
Interno |
Passing Juice |
PostgreSQL vacuuming alerts
|
Interno |
Passing Juice |
File upload backends
|
Interno |
Passing Juice |
S3 backend configuration
|
Interno |
Passing Juice |
S3 bucket policy
|
Interno |
Passing Juice |
Migrating from local uploads to Amazon S3 backend
|
Interno |
Passing Juice |
Installing SSL certificates
|
Interno |
Passing Juice |
Manual install
|
Interno |
Passing Juice |
Testing
|
Interno |
Passing Juice |
Certbot (recommended)
|
Interno |
Passing Juice |
At initial Zulip install
|
Interno |
Passing Juice |
After Zulip is already installed
|
Interno |
Passing Juice |
How it works
|
Interno |
Passing Juice |
Self-signed certificate
|
Interno |
Passing Juice |
Troubleshooting
|
Interno |
Passing Juice |
The Android app can’t connect to the server
|
Interno |
Passing Juice |
The iOS app can’t connect to the server
|
Interno |
Passing Juice |
The Android app connects to the server on some devices but not others
|
Interno |
Passing Juice |
Outgoing email
|
Interno |
Passing Juice |
How to configure
|
Interno |
Passing Juice |
Email services
|
Interno |
Passing Juice |
Free outgoing email services
|
Interno |
Passing Juice |
Using system email
|
Interno |
Passing Juice |
Using Gmail for outgoing email
|
Interno |
Passing Juice |
Logging outgoing email to a file for prototyping
|
Interno |
Passing Juice |
Troubleshooting
|
Interno |
Passing Juice |
Advanced troubleshooting
|
Interno |
Passing Juice |
Deployment options
|
Interno |
Passing Juice |
Installing Zulip from Git
|
Interno |
Passing Juice |
Zulip in Docker
|
Interno |
Passing Juice |
Advanced installer options
|
Interno |
Passing Juice |
Installing on an existing server
|
Interno |
Passing Juice |
Running Zulip’s service dependencies on different machines
|
Interno |
Passing Juice |
Using Zulip with Amazon RDS as the database
|
Interno |
Passing Juice |
Using an alternate port
|
Interno |
Passing Juice |
Using an outgoing HTTP proxy
|
Interno |
Passing Juice |
Putting the Zulip application behind a reverse proxy
|
Interno |
Passing Juice |
Installer options
|
Interno |
Passing Juice |
nginx configuration
|
Interno |
Passing Juice |
Apache2 configuration
|
Interno |
Passing Juice |
HAProxy configuration
|
Interno |
Passing Juice |
Other proxies
|
Interno |
Passing Juice |
System and deployment configuration
|
Interno |
Passing Juice |
Incoming email integration
|
Interno |
Passing Juice |
Local delivery setup
|
Interno |
Passing Juice |
Polling setup
|
Interno |
Passing Juice |
Video call providers
|
Interno |
Passing Juice |
Zoom
|
Interno |
Passing Juice |
BigBlueButton
|
Interno |
Passing Juice |
GIPHY GIF integration
|
Interno |
Passing Juice |
Apply for API key
|
Interno |
Passing Juice |
Development environment
|
Interno |
Passing Juice |
Development environment installation
|
Interno |
Passing Juice |
Requirements
|
Interno |
Passing Juice |
Recommended setup (Vagrant)
|
Interno |
Passing Juice |
Advanced setup
|
Interno |
Passing Juice |
Slow internet connections
|
Interno |
Passing Juice |
Installing remotely
|
Interno |
Passing Juice |
Next steps
|
Interno |
Passing Juice |
Recommended setup (Vagrant)
|
Interno |
Passing Juice |
Requirements
|
Interno |
Passing Juice |
Step 0: Set up Git & GitHub
|
Interno |
Passing Juice |
Step 1: Install prerequisites
|
Interno |
Passing Juice |
macOS
|
Interno |
Passing Juice |
Ubuntu
|
Interno |
Passing Juice |
Debian
|
Interno |
Passing Juice |
Windows 10
|
Interno |
Passing Juice |
Running Git BASH as an administrator
|
Interno |
Passing Juice |
Step 2: Get Zulip code
|
Interno |
Passing Juice |
Step 3: Start the development environment
|
Interno |
Passing Juice |
Step 4: Developing
|
Interno |
Passing Juice |
Where to edit files
|
Interno |
Passing Juice |
Understanding run-dev.py debugging output
|
Interno |
Passing Juice |
Committing and pushing changes with Git
|
Interno |
Passing Juice |
Maintaining the development environment
|
Interno |
Passing Juice |
Rebuilding the development environment
|
Interno |
Passing Juice |
Shutting down the development environment for use later
|
Interno |
Passing Juice |
Resuming the development environment
|
Interno |
Passing Juice |
Next steps
|
Interno |
Passing Juice |
Troubleshooting and common errors
|
Interno |
Passing Juice |
Vagrant guest doesn’t show (zulip-py3-venv) at start of prompt
|
Interno |
Passing Juice |
Vagrant was unable to mount VirtualBox shared folders
|
Interno |
Passing Juice |
ssl read error
|
Interno |
Passing Juice |
Unmet dependencies error
|
Interno |
Passing Juice |
ssh connection closed by remote host
|
Interno |
Passing Juice |
os.symlink error
|
Interno |
Passing Juice |
Hyper-V error messages
|
Interno |
Passing Juice |
Vagrant was unable to communicate with the guest machine
|
Interno |
Passing Juice |
Vagrant up fails with subprocess.CalledProcessError
|
Interno |
Passing Juice |
VBoxManage errors related to VT-x or WHvSetupPartition
|
Interno |
Passing Juice |
OSError: [Errno 26] Text file busy
|
Interno |
Passing Juice |
Specifying an Ubuntu mirror
|
Interno |
Passing Juice |
Specifying a proxy
|
Interno |
Passing Juice |
Using a different port for Vagrant
|
Interno |
Passing Juice |
Customizing CPU and RAM allocation
|
Interno |
Passing Juice |
Advanced setup (non-Vagrant)
|
Interno |
Passing Juice |
Installing directly on Ubuntu, Debian, CentOS, or Fedora
|
Interno |
Passing Juice |
Installing directly on Windows 10 with WSL 2
|
Interno |
Passing Juice |
Using the Vagrant Hyper-V provider on Windows (beta)
|
Interno |
Passing Juice |
Problems you may encounter
|
Interno |
Passing Juice |
Newer versions of supported platforms
|
Interno |
Passing Juice |
Installing on Cloud9
|
Interno |
Passing Juice |
Install zulip-cloud9
|
Interno |
Passing Juice |
Using the development environment
|
Interno |
Passing Juice |
Common
|
Interno |
Passing Juice |
Server
|
Interno |
Passing Juice |
Web
|
Interno |
Passing Juice |
Mobile
|
Interno |
Passing Juice |
Developing remotely
|
Interno |
Passing Juice |
Connecting to the remote environment
|
Interno |
Passing Juice |
Setting up user accounts
|
Interno |
Passing Juice |
Setting up the development environment
|
Interno |
Passing Juice |
Running the development server
|
Interno |
Passing Juice |
Making changes to code on your remote development server
|
Interno |
Passing Juice |
Editing locally
|
Interno |
Passing Juice |
Editing remotely
|
Interno |
Passing Juice |
Next steps
|
Interno |
Passing Juice |
Using an nginx reverse proxy
|
Interno |
Passing Juice |
Authentication in the development environment
|
Interno |
Passing Juice |
Email and password
|
Interno |
Passing Juice |
Google
|
Interno |
Passing Juice |
GitHub
|
Interno |
Passing Juice |
GitLab
|
Interno |
Passing Juice |
Apple
|
Interno |
Passing Juice |
SAML
|
Interno |
Passing Juice |
When SSL is required
|
Interno |
Passing Juice |
Testing LDAP in development
|
Interno |
Passing Juice |
Testing avatar and custom profile field synchronization
|
Interno |
Passing Juice |
Automated testing
|
Interno |
Passing Juice |
Two factor authentication
|
Interno |
Passing Juice |
Password form implementation
|
Interno |
Passing Juice |
Testing the installer
|
Interno |
Passing Juice |
Configuring
|
Interno |
Passing Juice |
Running a test install
|
Interno |
Passing Juice |
Build and unpack a release tarball
|
Interno |
Passing Juice |
Test an install
|
Interno |
Passing Juice |
See running containers after installation
|
Interno |
Passing Juice |
Connect to a running container
|
Interno |
Passing Juice |
Stopping and destroying containers
|
Interno |
Passing Juice |
Iterating on the installer
|
Interno |
Passing Juice |
Developer tutorials
|
Interno |
Passing Juice |
Writing a new application feature
|
Interno |
Passing Juice |
General process
|
Interno |
Passing Juice |
Files impacted
|
Interno |
Passing Juice |
Adding a field to the database
|
Interno |
Passing Juice |
Backend changes
|
Interno |
Passing Juice |
Frontend changes
|
Interno |
Passing Juice |
Documentation changes
|
Interno |
Passing Juice |
Example feature
|
Interno |
Passing Juice |
Update the model
|
Interno |
Passing Juice |
Create the migration
|
Interno |
Passing Juice |
Test your migration changes
|
Interno |
Passing Juice |
Handle database interactions
|
Interno |
Passing Juice |
Update application state
|
Interno |
Passing Juice |
Add a new view
|
Interno |
Passing Juice |
Backend tests
|
Interno |
Passing Juice |
Update the frontend
|
Interno |
Passing Juice |
Frontend tests
|
Interno |
Passing Juice |
Update documentation
|
Interno |
Passing Juice |
Writing views in Zulip
|
Interno |
Passing Juice |
What this covers
|
Interno |
Passing Juice |
What is a view?
|
Interno |
Passing Juice |
Modifying urls.py
|
Interno |
Passing Juice |
Writing human-readable views
|
Interno |
Passing Juice |
Decorators used for webpage views
|
Interno |
Passing Juice |
Writing a template
|
Interno |
Passing Juice |
Writing API REST endpoints
|
Interno |
Passing Juice |
Request variables
|
Interno |
Passing Juice |
Deciding which HTTP verb to use
|
Interno |
Passing Juice |
Idempotency
|
Interno |
Passing Juice |
Making changes to the database
|
Interno |
Passing Juice |
Calling from the web application
|
Interno |
Passing Juice |
Calling from an API client
|
Interno |
Passing Juice |
Legacy endpoints used by the web client
|
Interno |
Passing Juice |
Incoming webhook integrations
|
Interno |
Passing Juice |
Life of a request
|
Interno |
Passing Juice |
A request is sent to the server, and handled by Nginx
|
Interno |
Passing Juice |
Static files are served directly by Nginx
|
Interno |
Passing Juice |
Nginx routes other requests between Django and Tornado
|
Interno |
Passing Juice |
Django routes the request to a view in urls.py files
|
Interno |
Passing Juice |
Views serving HTML are internationalized by server path
|
Interno |
Passing Juice |
API endpoints use REST
|
Interno |
Passing Juice |
PUT is only for creating new things
|
Interno |
Passing Juice |
OPTIONS
|
Interno |
Passing Juice |
Legacy endpoints are used by the web client
|
Interno |
Passing Juice |
Incoming webhook integrations may not be RESTful
|
Interno |
Passing Juice |
Django calls rest_dispatch for REST endpoints, and authenticates
|
Interno |
Passing Juice |
The view will authorize the user, extract request variables, and validate them
|
Interno |
Passing Juice |
Results are given as JSON
|
Interno |
Passing Juice |
Reading list
|
Interno |
Passing Juice |
General programming/IT
|
Interno |
Passing Juice |
Python
|
Interno |
Passing Juice |
Java/Android
|
Interno |
Passing Juice |
JavaScript/ECMAScript
|
Interno |
Passing Juice |
TypeScript
|
Interno |
Passing Juice |
Git/version control systems (VCS)
|
Interno |
Passing Juice |
Computer science/algorithms
|
Interno |
Passing Juice |
Community experience
|
Interno |
Passing Juice |
Competitions/camps
|
Interno |
Passing Juice |
Massive open online courses (MOOC) platforms
|
Interno |
Passing Juice |
Screenshot and GIF software
|
Interno |
Passing Juice |
Screenshot tools by platform
|
Interno |
Passing Juice |
Browser
|
Interno |
Passing Juice |
macOS
|
Interno |
Passing Juice |
Windows
|
Interno |
Passing Juice |
Linux
|
Interno |
Passing Juice |
GIF tools by platform
|
Interno |
Passing Juice |
Browser
|
Interno |
Passing Juice |
macOS
|
Interno |
Passing Juice |
Windows
|
Interno |
Passing Juice |
Linux
|
Interno |
Passing Juice |
Shell tips
|
Interno |
Passing Juice |
Escaping characters
|
Interno |
Passing Juice |
Sequencing commands
|
Interno |
Passing Juice |
Splitting commands into multiple lines
|
Interno |
Passing Juice |
Arguments
|
Interno |
Passing Juice |
Shebang
|
Interno |
Passing Juice |
Understanding commands
|
Interno |
Passing Juice |
Cheatsheet
|
Interno |
Passing Juice |
Git
|
Interno |
Passing Juice |
Git guide
|
Interno |
Passing Juice |
Quick start
|
Interno |
Passing Juice |
Set up Git
|
Interno |
Passing Juice |
Install and configure Git, join GitHub
|
Interno |
Passing Juice |
Get a graphical client
|
Interno |
Passing Juice |
Zulip-specific tools
|
Interno |
Passing Juice |
Set up Git repo script
|
Interno |
Passing Juice |
Configure continuous integration for your Zulip fork
|
Interno |
Passing Juice |
Reset to pull request
|
Interno |
Passing Juice |
Fetch a pull request and rebase
|
Interno |
Passing Juice |
Fetch a pull request without rebasing
|
Interno |
Passing Juice |
Push to a pull request
|
Interno |
Passing Juice |
Delete unimportant branches
|
Interno |
Passing Juice |
Merge conflict on yarn.lock file
|
Interno |
Passing Juice |
How Git is different
|
Interno |
Passing Juice |
Important Git terms
|
Interno |
Passing Juice |
branch
|
Interno |
Passing Juice |
cache
|
Interno |
Passing Juice |
checkout
|
Interno |
Passing Juice |
commit
|
Interno |
Passing Juice |
fast-forward
|
Interno |
Passing Juice |
fetch
|
Interno |
Passing Juice |
hash
|
Interno |
Passing Juice |
head
|
Interno |
Passing Juice |
HEAD
|
Interno |
Passing Juice |
index
|
Interno |
Passing Juice |
pull
|
Interno |
Passing Juice |
push
|
Interno |
Passing Juice |
rebase
|
Interno |
Passing Juice |
Get Zulip code
|
Interno |
Passing Juice |
Step 1a: Create your fork
|
Interno |
Passing Juice |
Step 1b: Clone to your machine
|
Interno |
Passing Juice |
Step 1c: Connect your fork to Zulip upstream
|
Interno |
Passing Juice |
Step 2: Set up the Zulip development environment
|
Interno |
Passing Juice |
Step 3: Configure continuous integration for your fork
|
Interno |
Passing Juice |
Working copies
|
Interno |
Passing Juice |
Workflows
|
Interno |
Passing Juice |
Relevant Git commands
|
Interno |
Passing Juice |
Using Git as you work
|
Interno |
Passing Juice |
Know what branch you’re working on
|
Interno |
Passing Juice |
Keep your fork up to date
|
Interno |
Passing Juice |
Work on a feature branch
|
Interno |
Passing Juice |
Run linters and tests locally
|
Interno |
Passing Juice |
Stage changes
|
Interno |
Passing Juice |
Get status of working directory
|
Interno |
Passing Juice |
Stage additions with git add
|
Interno |
Passing Juice |
Stage deletions with git rm
|
Interno |
Passing Juice |
Commit changes
|
Interno |
Passing Juice |
Push your commits to GitHub
|
Interno |
Passing Juice |
Examine and tidy your commit history
|
Interno |
Passing Juice |
Force-push changes to GitHub after you’ve altered your history
|
Interno |
Passing Juice |
Pull requests
|
Interno |
Passing Juice |
Work in progress pull requests
|
Interno |
Passing Juice |
Create a pull request
|
Interno |
Passing Juice |
Step 1: Update your branch with git rebase
|
Interno |
Passing Juice |
Step 2: Push your updated branch to your remote fork
|
Interno |
Passing Juice |
Step 3: Open the pull request
|
Interno |
Passing Juice |
Update a pull request
|
Interno |
Passing Juice |
Collaborate
|
Interno |
Passing Juice |
Fetch another contributor’s branch
|
Interno |
Passing Juice |
Check out a pull request locally
|
Interno |
Passing Juice |
Fixing commits
|
Interno |
Passing Juice |
Fixing the last commit
|
Interno |
Passing Juice |
Changing the last commit message
|
Interno |
Passing Juice |
Changing the last commit
|
Interno |
Passing Juice |
Fixing older commits
|
Interno |
Passing Juice |
Changing commit messages
|
Interno |
Passing Juice |
Deleting old commits
|
Interno |
Passing Juice |
Squashing commits
|
Interno |
Passing Juice |
Reordering commits
|
Interno |
Passing Juice |
Pushing commits after tidying them
|
Interno |
Passing Juice |
Reviewing changes
|
Interno |
Passing Juice |
Changes on (local) working tree
|
Interno |
Passing Juice |
Changes within branches
|
Interno |
Passing Juice |
Changes between branches
|
Interno |
Passing Juice |
Get and stay out of trouble
|
Interno |
Passing Juice |
Undo a merge commit
|
Interno |
Passing Juice |
Restore a lost commit
|
Interno |
Passing Juice |
Recover from a git rebase failure
|
Interno |
Passing Juice |
Working from multiple computers
|
Interno |
Passing Juice |
Git cheat sheet
|
Interno |
Passing Juice |
Common commands
|
Interno |
Passing Juice |
Detailed cheat sheet
|
Interno |
Passing Juice |
Code contribution guide
|
Interno |
Passing Juice |
Version control
|
Interno |
Passing Juice |
Commit discipline
|
Interno |
Passing Juice |
Commit messages
|
Interno |
Passing Juice |
Good summaries:
|
Interno |
Passing Juice |
Message body:
|
Interno |
Passing Juice |
Code style and conventions
|
Interno |
Passing Juice |
Be consistent!
|
Interno |
Passing Juice |
Lint tools
|
Interno |
Passing Juice |
Secrets
|
Interno |
Passing Juice |
Dangerous constructs
|
Interno |
Passing Juice |
Too many database queries
|
Interno |
Passing Juice |
UserProfile.objects.get() / Client.objects.get() / etc.
|
Interno |
Passing Juice |
Using Django model objects as keys in sets/dicts
|
Interno |
Passing Juice |
user_profile.save()
|
Interno |
Passing Juice |
Using raw saves to update important model objects
|
Interno |
Passing Juice |
Naive datetime objects
|
Interno |
Passing Juice |
Translation tags
|
Interno |
Passing Juice |
Paths to state or log files
|
Interno |
Passing Juice |
JS array/object manipulation
|
Interno |
Passing Juice |
More arbitrary style things
|
Interno |
Passing Juice |
Line length
|
Interno |
Passing Juice |
JavaScript and TypeScript
|
Interno |
Passing Juice |
HTML / CSS
|
Interno |
Passing Juice |
Python
|
Interno |
Passing Juice |
Tests
|
Interno |
Passing Juice |
Third party code
|
Interno |
Passing Juice |
Reviewing Zulip code
|
Interno |
Passing Juice |
Protocol for authors
|
Interno |
Passing Juice |
Responding to a review feedback
|
Interno |
Passing Juice |
Principles of code review
|
Interno |
Passing Juice |
Anyone can review
|
Interno |
Passing Juice |
Please do reviews
|
Interno |
Passing Juice |
Fast replies are key
|
Interno |
Passing Juice |
Things to look for
|
Interno |
Passing Juice |
Zulip server
|
Interno |
Passing Juice |
Tooling
|
Interno |
Passing Juice |
Additional resources
|
Interno |
Passing Juice |
The chat.zulip.org community
|
Interno |
Passing Juice |
Community norms
|
Interno |
Passing Juice |
High traffic community
|
Interno |
Passing Juice |
This is a bleeding edge development server
|
Interno |
Passing Juice |
Streams
|
Interno |
Passing Juice |
Searching for past conversations
|
Interno |
Passing Juice |
Using zulipbot
|
Interno |
Passing Juice |
Usage
|
Interno |
Passing Juice |
Contributing
|
Interno |
Passing Juice |
Accessibility
|
Interno |
Passing Juice |
Guidelines
|
Interno |
Passing Juice |
Tools
|
Interno |
Passing Juice |
GitHub issues
|
Interno |
Passing Juice |
Additional resources
|
Interno |
Passing Juice |
Bug report guidelines
|
Interno |
Passing Juice |
Zulip Code of Conduct
|
Interno |
Passing Juice |
Expected behavior
|
Interno |
Passing Juice |
Unacceptable behavior
|
Interno |
Passing Juice |
Reporting and enforcement
|
Interno |
Passing Juice |
Scope
|
Interno |
Passing Juice |
License and attribution
|
Interno |
Passing Juice |
Google Summer of Code
|
Interno |
Passing Juice |
About us
|
Interno |
Passing Juice |
Our history with Google Open Source Programs
|
Interno |
Passing Juice |
Expectations for GSoC students
|
Interno |
Passing Juice |
Getting started
|
Interno |
Passing Juice |
Application tips, and how to be a strong candidate
|
Interno |
Passing Juice |
Mentors
|
Interno |
Passing Juice |
Project ideas
|
Interno |
Passing Juice |
Focus areas
|
Interno |
Passing Juice |
Full stack and web frontend focused projects
|
Interno |
Passing Juice |
React Native mobile app
|
Interno |
Passing Juice |
Electron desktop app
|
Interno |
Passing Juice |
Terminal app
|
Interno |
Passing Juice |
Archive tool
|
Interno |
Passing Juice |
Circulating proposals (March to April)
|
Interno |
Passing Juice |
How to have an amazing summer with Zulip
|
Interno |
Passing Juice |
What makes a successful summer
|
Interno |
Passing Juice |
Extra notes for mentors
|
Interno |
Passing Juice |
Code testing
|
Interno |
Passing Juice |
Testing overview
|
Interno |
Passing Juice |
Running tests
|
Interno |
Passing Juice |
Major test suites
|
Interno |
Passing Juice |
Other test suites
|
Interno |
Passing Juice |
Internet access inside test suites
|
Interno |
Passing Juice |
Documentation tests
|
Interno |
Passing Juice |
Linters
|
Interno |
Passing Juice |
Overview
|
Interno |
Passing Juice |
Running the linters
|
Interno |
Passing Juice |
General considerations
|
Interno |
Passing Juice |
Lint checks
|
Interno |
Passing Juice |
lint
|
Interno |
Passing Juice |
Special options
|
Interno |
Passing Juice |
Lint checks
|
Interno |
Passing Juice |
Philosophy
|
Interno |
Passing Juice |
Speed
|
Interno |
Passing Juice |
Accuracy
|
Interno |
Passing Juice |
Completeness
|
Interno |
Passing Juice |
Backend Django tests
|
Interno |
Passing Juice |
Overview
|
Interno |
Passing Juice |
Running tests
|
Interno |
Passing Juice |
Writing tests
|
Interno |
Passing Juice |
Setting up data for tests
|
Interno |
Passing Juice |
Testing code that accesses the filesystem
|
Interno |
Passing Juice |
Testing with mocks
|
Interno |
Passing Juice |
Zulip testing philosophy
|
Interno |
Passing Juice |
Endpoint tests
|
Interno |
Passing Juice |
Library tests
|
Interno |
Passing Juice |
Fixture-driven tests
|
Interno |
Passing Juice |
Mocks and stubs
|
Interno |
Passing Juice |
Template tests
|
Interno |
Passing Juice |
SQL performance tests
|
Interno |
Passing Juice |
Event-based tests
|
Interno |
Passing Juice |
Negative tests
|
Interno |
Passing Juice |
Testing considerations
|
Interno |
Passing Juice |
JavaScript/TypeScript unit tests
|
Interno |
Passing Juice |
How the node tests work
|
Interno |
Passing Juice |
Handling dependencies in unit tests
|
Interno |
Passing Juice |
Creating new test modules
|
Interno |
Passing Juice |
Coverage reports
|
Interno |
Passing Juice |
Editor debugger integration
|
Interno |
Passing Juice |
Webstorm integration setup
|
Interno |
Passing Juice |
Running tests with the debugger
|
Interno |
Passing Juice |
Web frontend black-box Puppeteer tests
|
Interno |
Passing Juice |
Running tests
|
Interno |
Passing Juice |
How Puppeteer tests work
|
Interno |
Passing Juice |
Debugging Puppeteer tests
|
Interno |
Passing Juice |
Writing Puppeteer tests
|
Interno |
Passing Juice |
Python static type checker (mypy)
|
Interno |
Passing Juice |
Installing mypy
|
Interno |
Passing Juice |
Running mypy on Zulip’s code locally
|
Interno |
Passing Juice |
Mypy is there to find bugs in Zulip before they impact users
|
Interno |
Passing Juice |
Mypy stubs for third-party modules
|
Interno |
Passing Juice |
Using @overload to accurately describe variations
|
Interno |
Passing Juice |
Best practices
|
Interno |
Passing Juice |
When is a type annotation justified?
|
Interno |
Passing Juice |
Avoid other unchecked constructs
|
Interno |
Passing Juice |
Read-only types
|
Interno |
Passing Juice |
Typing decorators
|
Interno |
Passing Juice |
Troubleshooting advice
|
Interno |
Passing Juice |
TypeScript static types
|
Interno |
Passing Juice |
Type checking
|
Interno |
Passing Juice |
Linting and style
|
Interno |
Passing Juice |
Migration strategy
|
Interno |
Passing Juice |
Continuous integration (CI)
|
Interno |
Passing Juice |
Goals
|
Interno |
Passing Juice |
GitHub Actions
|
Interno |
Passing Juice |
Useful debugging tips and tools
|
Interno |
Passing Juice |
Suites
|
Interno |
Passing Juice |
Configuration
|
Interno |
Passing Juice |
Images
|
Interno |
Passing Juice |
Performance optimizations
|
Interno |
Passing Juice |
Manual testing
|
Interno |
Passing Juice |
Basic stuff
|
Interno |
Passing Juice |
Message view
|
Interno |
Passing Juice |
Messagebox
|
Interno |
Passing Juice |
Message editing
|
Interno |
Passing Juice |
Narrowing
|
Interno |
Passing Juice |
Composing messages
|
Interno |
Passing Juice |
Popover menus
|
Interno |
Passing Juice |
Sidebar filtering
|
Interno |
Passing Juice |
Stream permissions
|
Interno |
Passing Juice |
Search
|
Interno |
Passing Juice |
Stream settings
|
Interno |
Passing Juice |
User settings
|
Interno |
Passing Juice |
Keyboard shortcuts
|
Interno |
Passing Juice |
Miscellaneous menu options
|
Interno |
Passing Juice |
Inviting users/tutorial
|
Interno |
Passing Juice |
To be continued…
|
Interno |
Passing Juice |
Testing philosophy
|
Interno |
Passing Juice |
Effective testing allows us to move quickly
|
Interno |
Passing Juice |
Test suite performance and reliability are critical
|
Interno |
Passing Juice |
Integration testing or unit testing?
|
Interno |
Passing Juice |
Avoid duplicating code with security impact
|
Interno |
Passing Juice |
Share test setup code
|
Interno |
Passing Juice |
What isn’t tested probably doesn’t work
|
Interno |
Passing Juice |
Subsystems documentation
|
Interno |
Passing Juice |
Provisioning and third-party dependencies
|
Interno |
Passing Juice |
Provisioning
|
Interno |
Passing Juice |
PROVISION_VERSION
|
Interno |
Passing Juice |
Philosophy on adding third-party dependencies
|
Interno |
Passing Juice |
System packages
|
Interno |
Passing Juice |
Python packages
|
Interno |
Passing Juice |
Upgrading packages
|
Interno |
Passing Juice |
JavaScript and other frontend packages
|
Interno |
Passing Juice |
Node and Yarn
|
Interno |
Passing Juice |
ShellCheck and shfmt
|
Interno |
Passing Juice |
Puppet packages
|
Interno |
Passing Juice |
Other third-party and generated files
|
Interno |
Passing Juice |
Emoji
|
Interno |
Passing Juice |
Translations data
|
Interno |
Passing Juice |
Pygments data
|
Interno |
Passing Juice |
Modifying provisioning
|
Interno |
Passing Juice |
Settings system
|
Interno |
Passing Juice |
Server settings
|
Interno |
Passing Juice |
Testing non-default settings
|
Interno |
Passing Juice |
Realm settings
|
Interno |
Passing Juice |
HTML and CSS
|
Interno |
Passing Juice |
Zulip CSS organization
|
Interno |
Passing Juice |
Editing Zulip CSS
|
Interno |
Passing Juice |
CSS style guidelines
|
Interno |
Passing Juice |
Avoid duplicated code
|
Interno |
Passing Juice |
Be consistent with existing similar UI
|
Interno |
Passing Juice |
Use clear, unique names for classes and object IDs
|
Interno |
Passing Juice |
Validating CSS
|
Interno |
Passing Juice |
HTML templates
|
Interno |
Passing Juice |
Behavior
|
Interno |
Passing Juice |
Backend templates
|
Interno |
Passing Juice |
Frontend templates
|
Interno |
Passing Juice |
Toolchain
|
Interno |
Passing Juice |
Translation
|
Interno |
Passing Juice |
Tooltips
|
Interno |
Passing Juice |
Static asset pipeline
|
Interno |
Passing Juice |
Primary build process
|
Interno |
Passing Juice |
Adding static files
|
Interno |
Passing Juice |
How it works in production
|
Interno |
Passing Juice |
ES6/TypeScript modules
|
Interno |
Passing Juice |
Real-time push and events
|
Interno |
Passing Juice |
Generation system
|
Interno |
Passing Juice |
Delivery system
|
Interno |
Passing Juice |
The initial data fetch
|
Interno |
Passing Juice |
Testing
|
Interno |
Passing Juice |
Messages
|
Interno |
Passing Juice |
Schema changes
|
Interno |
Passing Juice |
Sending messages
|
Interno |
Passing Juice |
Message lists
|
Interno |
Passing Juice |
Compose area
|
Interno |
Passing Juice |
Backend implementation
|
Interno |
Passing Juice |
Local echo
|
Interno |
Passing Juice |
Local echo in message editing
|
Interno |
Passing Juice |
Putting it all together
|
Interno |
Passing Juice |
Message editing
|
Interno |
Passing Juice |
Inline URL previews
|
Interno |
Passing Juice |
Soft deactivation
|
Interno |
Passing Juice |
Notifications in Zulip
|
Interno |
Passing Juice |
Important corner cases
|
Interno |
Passing Juice |
The mobile/email notifications flow
|
Interno |
Passing Juice |
Queue processors
|
Interno |
Passing Juice |
Adding a new queue processor
|
Interno |
Passing Juice |
Publishing events into a queue
|
Interno |
Passing Juice |
Clearing a RabbitMQ queue
|
Interno |
Passing Juice |
Unread counts and the pointer
|
Interno |
Passing Juice |
Pointer logic
|
Interno |
Passing Juice |
Recipient bar: message you clicked
|
Interno |
Passing Juice |
Search, sidebar click, or new tab: unread/recent matching narrow
|
Interno |
Passing Juice |
Unnarrow: previous sequence
|
Interno |
Passing Juice |
Forced reload: state preservation
|
Interno |
Passing Juice |
Unread count logic
|
Interno |
Passing Juice |
Testing and development
|
Interno |
Passing Juice |
Markdown implementation
|
Interno |
Passing Juice |
Testing
|
Interno |
Passing Juice |
Changing Zulip’s Markdown processor
|
Interno |
Passing Juice |
Per-realm features
|
Interno |
Passing Juice |
Zulip’s Markdown philosophy
|
Interno |
Passing Juice |
Zulip’s changes to Markdown
|
Interno |
Passing Juice |
Basic syntax
|
Interno |
Passing Juice |
Lists
|
Interno |
Passing Juice |
Links
|
Interno |
Passing Juice |
Code
|
Interno |
Passing Juice |
Other
|
Interno |
Passing Juice |
Caching in Zulip
|
Interno |
Passing Juice |
Backend caching with memcached
|
Interno |
Passing Juice |
The core implementation
|
Interno |
Passing Juice |
Cautions
|
Interno |
Passing Juice |
Cache invalidation after writes
|
Interno |
Passing Juice |
Production deployments and database migrations
|
Interno |
Passing Juice |
Automated testing and memcached
|
Interno |
Passing Juice |
Manual testing and memcached
|
Interno |
Passing Juice |
Performance
|
Interno |
Passing Juice |
In-process caching in Django
|
Interno |
Passing Juice |
Browser caching of state
|
Interno |
Passing Juice |
Performance and scalability
|
Interno |
Passing Juice |
Load profiles
|
Interno |
Passing Juice |
Major Zulip endpoints
|
Interno |
Passing Juice |
Tornado
|
Interno |
Passing Juice |
Presence
|
Interno |
Passing Juice |
Fetching page_params
|
Interno |
Passing Juice |
Fetching message history
|
Interno |
Passing Juice |
User uploads
|
Interno |
Passing Juice |
Sending and editing messages
|
Interno |
Passing Juice |
Other endpoints
|
Interno |
Passing Juice |
Queue processors and cron jobs
|
Interno |
Passing Juice |
Service scalability
|
Interno |
Passing Juice |
Realms in Zulip
|
Interno |
Passing Juice |
Creating realms
|
Interno |
Passing Juice |
Using unique link generator
|
Interno |
Passing Juice |
Enabling open realm creation
|
Interno |
Passing Juice |
Subdomains
|
Interno |
Passing Juice |
Working with subdomains in development environment
|
Interno |
Passing Juice |
Management commands
|
Interno |
Passing Juice |
Writing management commands
|
Interno |
Passing Juice |
Schema migrations
|
Interno |
Passing Juice |
Automated testing for migrations
|
Interno |
Passing Juice |
Schema and initial data changes
|
Interno |
Passing Juice |
URL hashes and deep linking
|
Interno |
Passing Juice |
Hashchange
|
Interno |
Passing Juice |
Server-initiated reloads
|
Interno |
Passing Juice |
All reloads
|
Interno |
Passing Juice |
Emoji
|
Interno |
Passing Juice |
Emoji codes
|
Interno |
Passing Juice |
Custom emoji
|
Interno |
Passing Juice |
Tooling
|
Interno |
Passing Juice |
Picking emoji names
|
Interno |
Passing Juice |
Hotspots
|
Interno |
Passing Juice |
Adding a new hotspot
|
Interno |
Passing Juice |
Step 1: Create hotspot content
|
Interno |
Passing Juice |
Step 2: Configure hotspot placement
|
Interno |
Passing Juice |
Step 3: Test manually
|
Interno |
Passing Juice |
Step 4 (if necessary): Tweak hotspot icon z-index
|
Interno |
Passing Juice |
Full-text search
|
Interno |
Passing Juice |
The default full-text search implementation
|
Interno |
Passing Juice |
Multi-language full-text search
|
Interno |
Passing Juice |
Enabling PGroonga
|
Interno |
Passing Juice |
Disabling PGroonga
|
Interno |
Passing Juice |
Email
|
Interno |
Passing Juice |
Development and testing
|
Interno |
Passing Juice |
Testing in a real email client
|
Interno |
Passing Juice |
Notes
|
Interno |
Passing Juice |
Email templates
|
Interno |
Passing Juice |
Analytics
|
Interno |
Passing Juice |
Analytics backend overview
|
Interno |
Passing Juice |
The *Count database tables
|
Interno |
Passing Juice |
CountStats
|
Interno |
Passing Juice |
The FillState table
|
Interno |
Passing Juice |
Performance strategy
|
Interno |
Passing Juice |
Backend testing
|
Interno |
Passing Juice |
LoggingCountStats
|
Interno |
Passing Juice |
Analytics UI development and testing
|
Interno |
Passing Juice |
Setup and testing
|
Interno |
Passing Juice |
Adding or editing /stats graphs
|
Interno |
Passing Juice |
/activity page
|
Interno |
Passing Juice |
Clients in Zulip
|
Interno |
Passing Juice |
Analytics
|
Interno |
Passing Juice |
Integrations
|
Interno |
Passing Juice |
Logging and error reporting
|
Interno |
Passing Juice |
Backend error reporting
|
Interno |
Passing Juice |
Backend logging
|
Interno |
Passing Juice |
Blueslip frontend error reporting
|
Interno |
Passing Juice |
Frontend performance reporting
|
Interno |
Passing Juice |
Typing indicators
|
Interno |
Passing Juice |
Writing user
|
Interno |
Passing Juice |
Server
|
Interno |
Passing Juice |
Receiving user
|
Interno |
Passing Juice |
Ecosystem
|
Interno |
Passing Juice |
Roadmap
|
Interno |
Passing Juice |
Upgrading Django
|
Interno |
Passing Juice |
Zulip server release checklist
|
Interno |
Passing Juice |
A week before the release
|
Interno |
Passing Juice |
Final release preparation
|
Interno |
Passing Juice |
Executing the release
|
Interno |
Passing Juice |
Post-release
|
Interno |
Passing Juice |
Zulip PyPI package release checklist
|
Interno |
Passing Juice |
UI: input pills
|
Interno |
Passing Juice |
Setup
|
Interno |
Passing Juice |
Basic usage
|
Interno |
Passing Juice |
Typeahead
|
Interno |
Passing Juice |
Presence
|
Interno |
Passing Juice |
Unread message synchronization
|
Interno |
Passing Juice |
Billing
|
Interno |
Passing Juice |
Upgrading Stripe API versions
|
Interno |
Passing Juice |
Widgets
|
Interno |
Passing Juice |
What is a widget?
|
Interno |
Passing Juice |
Polls, todo lists, and games
|
Interno |
Passing Juice |
Data flow
|
Interno |
Passing Juice |
Backward compatibility
|
Interno |
Passing Juice |
Adding widgets
|
Interno |
Passing Juice |
zform (trivia quiz bot)
|
Interno |
Passing Juice |
Data flow
|
Interno |
Passing Juice |
Slash commands
|
Interno |
Passing Juice |
Data flow
|
Interno |
Passing Juice |
Typeahead
|
Interno |
Passing Juice |
Writing documentation
|
Interno |
Passing Juice |
Documentation systems
|
Interno |
Passing Juice |
Developer and sysadmin documentation
|
Interno |
Passing Juice |
Core website documentation
|
Interno |
Passing Juice |
User facing documentation
|
Interno |
Passing Juice |
General user documentation
|
Interno |
Passing Juice |
Integrations documentation
|
Interno |
Passing Juice |
API documentation
|
Interno |
Passing Juice |
Automated testing
|
Interno |
Passing Juice |
User documentation
|
Interno |
Passing Juice |
Editing and testing
|
Interno |
Passing Juice |
Writing documentation
|
Interno |
Passing Juice |
User interface
|
Interno |
Passing Juice |
Voice
|
Interno |
Passing Juice |
Features
|
Interno |
Passing Juice |
Images
|
Interno |
Passing Juice |
Icons
|
Interno |
Passing Juice |
Macros
|
Interno |
Passing Juice |
Tips and warnings
|
Interno |
Passing Juice |
Tab switcher
|
Interno |
Passing Juice |
Documenting an integration
|
Interno |
Passing Juice |
Markdown macros
|
Interno |
Passing Juice |
Writing guidelines
|
Interno |
Passing Juice |
General writing guidelines
|
Interno |
Passing Juice |
Guidelines for specific steps
|
Interno |
Passing Juice |
Screenshots
|
Interno |
Passing Juice |
Documenting REST API endpoints
|
Interno |
Passing Juice |
How it works
|
Interno |
Passing Juice |
Description
|
Interno |
Passing Juice |
Usage examples
|
Interno |
Passing Juice |
Parameters
|
Interno |
Passing Juice |
Displaying example payloads/responses
|
Interno |
Passing Juice |
Step by step guide
|
Interno |
Passing Juice |
Why a custom system?
|
Interno |
Passing Juice |
OpenAPI configuration
|
Interno |
Passing Juice |
Configuration
|
Interno |
Passing Juice |
Endpoint definitions
|
Interno |
Passing Juice |
Schemas
|
Interno |
Passing Juice |
Zulip Swagger YAML style:
|
Interno |
Passing Juice |
Tips for working with YAML:
|
Interno |
Passing Juice |
Formatting help:
|
Interno |
Passing Juice |
Examples:
|
Interno |
Passing Juice |
Translating Zulip
|
Interno |
Passing Juice |
Translation guidelines
|
Interno |
Passing Juice |
Translators’ workflow
|
Interno |
Passing Juice |
Testing translations
|
Interno |
Passing Juice |
Translation style guides
|
Interno |
Passing Juice |
Capitalization
|
Interno |
Passing Juice |
Internationalization for developers
|
Interno |
Passing Juice |
Key details about human language
|
Interno |
Passing Juice |
Translation process
|
Interno |
Passing Juice |
Translation resource files
|
Interno |
Passing Juice |
HTML Templates
|
Interno |
Passing Juice |
Backend translations
|
Interno |
Passing Juice |
Jinja2 templates
|
Interno |
Passing Juice |
Python
|
Interno |
Passing Juice |
Frontend translations
|
Interno |
Passing Juice |
Handlebars templates
|
Interno |
Passing Juice |
Transifex config
|
Interno |
Passing Juice |
Transifex CLI setup
|
Interno |
Passing Juice |
Chinese translation style guide(中文翻译指南)
|
Interno |
Passing Juice |
Note(题记)
|
Interno |
Passing Juice |
Terms(术语)
|
Interno |
Passing Juice |
Phrases(习惯用语)
|
Interno |
Passing Juice |
Others(其它)
|
Interno |
Passing Juice |
French translation style guide
|
Interno |
Passing Juice |
Rules
|
Interno |
Passing Juice |
Terms
|
Interno |
Passing Juice |
German translation style guide (Richtlinien für die deutsche Übersetzung)
|
Interno |
Passing Juice |
Rules
|
Interno |
Passing Juice |
Formal or informal?
|
Interno |
Passing Juice |
Form of address
|
Interno |
Passing Juice |
Form of instruction
|
Interno |
Passing Juice |
Rules for labels
|
Interno |
Passing Juice |
Concatenation of words
|
Interno |
Passing Juice |
Anglicisms
|
Interno |
Passing Juice |
Special characters
|
Interno |
Passing Juice |
False friends
|
Interno |
Passing Juice |
Other
|
Interno |
Passing Juice |
Terms (Begriffe)
|
Interno |
Passing Juice |
Phrases (Ausdrücke)
|
Interno |
Passing Juice |
Other (Verschiedenes)
|
Interno |
Passing Juice |
Hindi translation style guide(हिन्दी अनुवाद शैली मार्गदर्शक)
|
Interno |
Passing Juice |
Terms(शर्तें)
|
Interno |
Passing Juice |
Phrases (वाक्यांशों)
|
Interno |
Passing Juice |
Others(अन्य)
|
Interno |
Passing Juice |
Polish translation style guide
|
Interno |
Passing Juice |
Special terms used in Zulip
|
Interno |
Passing Juice |
Russian translation style guide
|
Interno |
Passing Juice |
Перевод некоторых терминов
|
Interno |
Passing Juice |
Spanish translation style guide
|
Interno |
Passing Juice |
Términos
|
Interno |
Passing Juice |
Frases
|
Interno |
Passing Juice |
Otros
|
Interno |
Passing Juice |
Index
|
Interno |
Passing Juice |
Zulip
|
Interno |
Passing Juice |
Edit on GitHub
|
Externo |
Passing Juice |
¶
|
Interno |
Passing Juice |
User documentation
|
Externo |
Passing Juice |
API documentation
|
Externo |
Passing Juice |
https://www.zulip.com
|
Externo |
Passing Juice |
Sphinx
|
Externo |
Passing Juice |
theme
|
Externo |
Passing Juice |
Read the Docs
|
Externo |
Passing Juice |
latest
|
Interno |
Passing Juice |
stable
|
Interno |
Passing Juice |
4.3
|
Interno |
Passing Juice |
4.2
|
Interno |
Passing Juice |
4.1
|
Interno |
Passing Juice |
4.0
|
Interno |
Passing Juice |
3.4
|
Interno |
Passing Juice |
3.3
|
Interno |
Passing Juice |
3.2
|
Interno |
Passing Juice |
3.1
|
Interno |
Passing Juice |
3.0
|
Interno |
Passing Juice |
2.1.7
|
Interno |
Passing Juice |
2.1.6
|
Interno |
Passing Juice |
2.1.5
|
Interno |
Passing Juice |
2.1.4
|
Interno |
Passing Juice |
2.1.3
|
Interno |
Passing Juice |
2.1.2
|
Interno |
Passing Juice |
2.1.1
|
Interno |
Passing Juice |
2.1.0
|
Interno |
Passing Juice |
2.0.8
|
Interno |
Passing Juice |
2.0.7
|
Interno |
Passing Juice |
2.0.6
|
Interno |
Passing Juice |
2.0.5
|
Interno |
Passing Juice |
2.0.4
|
Interno |
Passing Juice |
2.0.3
|
Interno |
Passing Juice |
2.0.2
|
Interno |
Passing Juice |
2.0.1
|
Interno |
Passing Juice |
2.0.0
|
Interno |
Passing Juice |
1.9.2
|
Interno |
Passing Juice |
1.9.1
|
Interno |
Passing Juice |
1.9.0
|
Interno |
Passing Juice |
html
|
Interno |
Passing Juice |
Project Home
|
Interno |
Passing Juice |
Builds
|
Interno |
Passing Juice |