• Docs
  • Changelog
Sign in
Get started
    • Home
    • Your first deploy
    • Free instances
    • Platform features by plan
    • Use with coding agents
    • FAQ
    • Templates
      • Migrate from…
        • Heroku
        • Railway
    • Compute plans
    • SandboxesBeta
      • Service types
        • Which to use?
        • Static sites
        • Web services
        • Private services
        • Background workers
        • Cron jobs
        • Workflows
        • Multi-service architectures
      • Data storage
        • Render Postgres
        • Render Key Value (Redis®-compatible)
        • Persistent disks
    • How deploys work
    • Supported languages
    • Git providers (GitHub, etc.)
    • Build pipeline
    • Deploy hooks
    • Monorepo support
    • Troubleshooting deploys
      • Previewing changes
        • Single-service previews
        • Preview environments (multi-service)
      • Docker deploys
        • Overview
        • Deploy a registered image
        • Using secrets
      • Runtime
        • Native runtimes
        • Environment variables & secrets
        • Default environment variables
    • Intro to sandboxes
    • Limits
      • How to…
        • Create & configure sandboxes
        • Execute commands
        • Manage files
        • Manage snapshots
      • Use with…
        • Claude Managed Agents
        • Cursor Cloud Agents
        • OpenAI Agents API
      • SDK/CLI reference
        • TypeScript SDK
        • Python SDK
        • CLI commands
    • Intro to workflows
    • Tutorial
    • Limits & pricing
      • How to…
        • Define tasks
        • Define flowsNew
        • Trigger runs
        • Develop locally
      • SDK reference
        • TypeScript SDK
        • Python SDK
      • Example workflows
        • TypeScript examples
        • Python examples
    • Overview
    • Create & connect
    • Database credentials
    • Extensions
    • Version upgrades
    • Logical replication
    • Legacy instance types
      • Database recovery
        • Recovery & backups
        • High availability
      • Database performance
        • Read replicas
        • Connection pooling
        • Admin apps
        • Repacking tables
        • Troubleshooting performance
    • Regions
    • Inbound IP rules
    • Edge caching
    • WebSockets
    • TLS certificates
      • Custom domains
        • Overview
        • Cloudflare
        • Namecheap
        • Other DNS providers
      • Internal traffic
        • Private network
        • Private links
      • Outbound traffic
        • Default IP ranges
        • Dedicated IP addresses
        • Outbound bandwidth
        • Handling network changes
      • Static site config
        • Custom response headers
        • Redirects & rewrites
    • The Render Dashboard
    • SSH / Shell access
    • Projects & environments
      • Service actions
        • Scaling
        • Rollbacks
        • Maintenance mode
        • One-off jobs
      • Infrastructure as code
        • Blueprints overview
        • render.yaml reference
        • Terraform provider
    • In-dashboard metrics
    • Health checks
    • Uptime best practices
      • Logging
        • In-dashboard logs
        • Log streams (syslog/HTTPS)
      • OpenTelemetry (OTel) metrics
        • Provider setup
        • Metrics reference
      • Notifications
        • Webhooks
        • Email / Slack
    • MCP Server
      • Render CLI
        • Overview
        • Command reference
      • REST API
        • Overview
        • API reference
      • Third-party connections
        • OIDC support
        • Datadog
    • Workspaces, members, & roles
    • Login settings
    • Audit logs
      • Organizations
        • Overview
        • SAML SSO
    • DDoS protection
    • Platform maintenance
      • Compliance
        • Overview
        • HIPAA (US health data)
        • HIPAA best practices
        • Shared responsibility model
        • Pentest policy
    • Heroku vs Render
    • Vercel vs Render

Deploy Zulip

Zulip is an open source real-time chat application like Slack, but with an email-like threading model. The email threading model allows you to catch up on important conversations while ignoring irrelevant ones. Zulip's features include:

  • Highly configurable notifications.
  • Keyboard shortcuts.
  • Mobile and desktop apps.
  • Integrations with Trac, Nagios, GitHub, and more.
  • Restful API with Python bindings.
  • and more!

Example Zulip screen showing streams and threads

One-Click Deploy

Use the button below to deploy Zulip on Render.

Deploy to Render

It uses the github.com/render-examples/zulip repository to create the following components on Render:

  • Zulip web/application server: contains Nginx, Django, Tornado, and Supervisor.
  • Memcached instance: used to cache database model objects.
  • Redis instance: used for short-term datastores.
  • RabbitMQ instance: used as a queuing system and to communicate between Django and Tornado.
  • PostgreSQL instance: used to store all persistent data.

More details on Zulip’s architecture here.

Zulip recommends deploying the main application/webserver with more than 2 GB RAM (ideally 4). The 1c-2g compute plan gives you 2 GB of RAM, but we recommend upgrading to the 2c-4g compute plan for production use. Zulip has documentation on how resource needs scale with the number of users on the app.

Environment Variables

You only need one environment variable to test your Zulip install:

KeyValue
SETTING_ZULIP_ADMINISTRATORemail address of the Zulip administrator

You will be able to set up your account and use all of Zulip's features as a single user. Inviting other users to join your realm (Zulip's term for organization) requires setting up email-related environment variables, which are explained below.

Setup

Once the zulip service is deployed and live, navigate to the Shell tab and type in:

Visit the link generated by the command and create your Zulip administrator account with the email you used for SETTING_ZULIP_ADMINISTRATOR.

Production

Zulip requires a mail server to send emails to users. Reliable mail delivery requires more work than just running the mail server, so we strongly recommend using a third-party email provider.

Zulip provides a list of recommended email providers you can use. We have tested this repo successfully with Mailgun, but other providers in the recommended list should work equally well.

These are the environment variables you will need to set for production use:

KeyValue
SETTING_EXTERNAL_HOSThostname your users will use to connect to your Zulip server; leave empty to use onrender.com domain
SETTING_EMAIL_HOSTaddress of your SMTP provider (ex. smtp.mailgun.org)
SETTING_EMAIL_HOST_USERyour SMTP provider username (ex. postmaster@mg.example.com)
SECRETS_email_passwordyour SMTP provider password
SETTING_EMAIL_PORTport your SMTP provider uses to connect (ex. 587)
SETTING_EMAIL_USE_SSLset to True if SETTING_EMAIL_PORT is using SSL; False otherwise
SETTING_EMAIL_USE_TLSset to True if SETTING_EMAIL_PORT is using TLS; False otherwise

Third-party email providers support unencrypted and SSL/TLS-encrypted connections on multiple ports. SendGrid and Mailgun recommend the following settings:

KeyRecommended Value
SETTING_EMAIL_PORT587
SETTING_EMAIL_USE_SSLFalse
SETTING_EMAIL_USE_TLSTrue

Optional

Other environment variables you might change:

KeyDefault Values
QUEUE_WORKERS_MULTIPROCESSFalse sets Zulip to run in multithreaded mode, which is ideal for lower memory instances. Set to True if Zulip is run in a Pro instance or larger
ZULIP_AUTH_BACKENDSEmailAuthBackend supports email and password authentication, but Zulip also supports other authentication methods
Deploy Zulip
  • One-Click Deploy
    • Environment Variables
    • Setup
    • Production
All Systems Operational
© Render Inc. All rights reserved.