Commit Graph

3563 Commits

Author SHA1 Message Date
Alya Abbott
f10e8d0273 docs: Expand manual testing in "reviewing Zulip code" guide. 2026-05-29 15:08:30 -05:00
Gajendra Malviya
11ad4811ba docs: Fix miscellaneous typos and grammar errors. 2026-05-29 21:41:34 +02:00
Alya Abbott
bf87af5a6b docs: Add marketing items to release checklist. 2026-05-29 20:45:27 +02:00
Shubham Padia
2ca9e11e8a export: Include realm string_id and timestamp in tarball filename.
The download URL for a realm export tarball previously contained
only a random suffix, making it easy to download the wrong file
when multiple exports were available in the admin UI -- or when
an admin manages exports across multiple organizations.

Embed both the realm's string_id (when non-empty) and the UTC
timestamp of the export in the tempdir prefix, producing tarballs
named like zulip-export-<string_id>-2026-05-25-09-30-45-<rand>.tar.gz
(or zulip-export-2026-05-25-09-30-45-<rand>.tar.gz for the root
realm, whose string_id is empty). The timestamp format matches
the convention used by `./manage.py backup`; the random suffix is
retained to disambiguate same-second exports.

The prefix is built by a new `export_tarball_prefix()` helper in
`zerver/lib/export.py`, shared by the `export` and
`export_single_user` management commands and the deferred-work
queue worker that handles admin-UI export requests.

Fixes https://chat.zulip.org/#narrow/channel/9-issues/topic/discrepancies.20in.20data.20export/with/2467409

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 00:14:43 +08:00
Alex Vandiver
26189578c6 docs: Rework schema migrations guide around the online-deploy model.
Most of what makes a Zulip migration tricky to write follows from
how Zulip Cloud deploys: staging and production share a database,
staging deploys first and runs the migration against the shared
DB, production deploys some time later, and Django processes
restart in a rolling fashion. Together these mean migrations must
be safe for the previous release's code to keep running against,
and that staging-time problems are also live production problems.

The previous version of this page didn't describe any of that,
and as a result didn't motivate most of the rules contributors
need to follow. Rework the page around the deploy model so each
rule traces back to a property of how migrations actually run on
Cloud.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 15:59:32 +08:00
Prakhar Pratyush
7013f22bbd push_notifications: Skip legacy notifications when E2EE is required.
Previously, the `require_e2ee_push_notifications` setting would
send legacy push notifications with redacted content.

Now, legacy push notifications are skipped entirely when this
setting is enabled, so only clients supporting E2EE will receive
push notifications.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2026-05-25 13:25:05 +05:30
Tim Abbott
c7788c612e docs: Document the integration review process. 2026-05-22 09:11:23 -04:00
Alya Abbott
d092478f91 contributor docs: Tweak number for accuracy.
There are 11 GSoC participants in 2026.
2026-05-22 14:23:03 +02:00
apoorva
0c345ebe08 docs: Document keypress visualizers for screencasts.
Signed-off-by: apoorva <apoorvavpendse@gmail.com>
2026-05-21 10:05:02 -05:00
Karl Stolley
26c7fc8564 bootstrap: Remove bootstrap-btn file and refs. 2026-05-21 17:31:24 +05:30
Lauryn Menard
5acdb8cac9 docs: Create "Project processes" directory.
Moves 'api-design', 'release-checklist' and 'api-release-checklist'
to the new 'processes' directory.
2026-05-12 23:49:49 -07:00
Lauryn Menard
b54e2364ea docs: Move "Directory structure" to subsystems directory. 2026-05-12 23:49:49 -07:00
Lauryn Menard
2a4e19609f docs: Drop "Glossary" section from architecture-overview.
The terms listed here are largely things that Zulip self-documents
now.
2026-05-12 23:49:49 -07:00
Alya Abbott
23dc231b57 docs: Sync Polish translator glossary with current "Combined feed" string.
The 2024 left-sidebar rename (commit 1594011b67) replaced "All
messages" with "Combined feed" in this glossary entry's English
half but left the Polish translation as "wszystkie wiadomości"
(literally "all messages"). The actual Polish translation in
locale/pl/translations.json is "Strumień mieszany"; update the
glossary entry and example to match.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 23:17:11 -07:00
Mateusz Mandera
18a5405ec9 docs: Fix typo in api-design doc.
Double "require" in the sentence.
2026-05-09 23:00:35 -07:00
Greg Price
6e06e507c5 docs: Add developer doc on API design and API changes. 2026-05-09 12:27:13 -07:00
Anders Kaseorg
a2fb7b672a message_summary: Replace litellm with the OpenAI Python SDK.
Switch the topic summarization integration from the litellm wrapper
library to the OpenAI Python SDK directly. The SDK can be pointed at
any OpenAI-compatible endpoint via a new TOPIC_SUMMARIZATION_API_BASE
setting, so provider/model strings like "groq/llama-3.3-70b-versatile"
become a plain model name plus a base URL.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2026-05-07 16:18:53 -07:00
Shubham Padia
deab2475de docs: Add note that outreach programs are not a competition. 2026-05-06 17:52:31 -07:00
Shubham Padia
21d7a2a98b docs: Add note to check-ins frequency to post no matter the progress.
Also add a note asking participants to include info on what has changed
since the last checkin.
2026-05-06 17:52:31 -07:00
Shubham Padia
11af4a14d0 docs: Limit new outreach program checkins to the #checkins channel. 2026-05-06 17:52:31 -07:00
Alya Abbott
95879029b8 docs: Extend and reorganize help center writing guide.
- Split technical and non-technical sections.
- Describe writing approach in more detail.
2026-05-06 16:47:44 -07:00
Aman Agrawal
467b4047b8 provision: Add Fedora 44 support.
Fedora 44 ships Postgres 17 in PGDG and shares Fedora 43's package
list, so support is just a matter of accepting the new version in
the provision check.
2026-05-06 07:34:15 +05:30
Alex Vandiver
d2fd636009 docs: Add stable anchors for cross-references from the Docker docs.
The Docker subproject references specific sections of these pages —
the Backups model, the WAL-g archiving setup, and the S3 backend —
from several places, but without explicit anchors those references
land at page top.
2026-05-05 17:57:43 -07:00
Alex Vandiver
9b41d4787a docs: Cross-reference Docker equivalents where mechanisms diverge.
Most pages under docs/production/ describe Zulip's standard install
in terms of files (`/etc/zulip/settings.py`,
`/etc/zulip/zulip.conf`), commands (`zulip-puppet-apply`,
`supervisorctl`, `/home/zulip/deployments/current/manage.py …`),
and Puppet-managed services. None of those are how a Docker
deployment is configured: settings come from environment variables
on the container, secrets from Docker secrets, certificates from
`CERTIFICATES`, and so on. The Docker docs already cross-reference
these pages from the other side, but the standard-install pages had
no pointer back, so a Docker user looking up how to configure
something would land on instructions that don't apply.

Use the same `important` admonition shape on every affected page
or section, so the divergence pattern is recognizable as readers
move between pages.
2026-05-05 17:57:43 -07:00
Alex Vandiver
b4517b4801 docs: Document the Docker backup model.
The Backups section currently presents `manage.py backup` as the
single tool to use, with no awareness that Docker deployments use
a different unit of backup. A Docker user following the existing
text would produce a tarball that omits certificates, post-setup
scripts, and the configuration mirror under `/data/etc-zulip/` —
state that lives in the `/data` volume but not in the standard
backup tarball.

Add an admonition redirecting Docker readers to the volume-snapshot
recipes, and a paragraph describing the Docker inclusion list. The
admonition redirects rather than warns off: `manage.py backup`
remains the right tool for migrating between Docker and a standard
installation in either direction, capturing whichever side is the
source of the migration.
2026-05-05 17:57:43 -07:00
Alex Vandiver
39eb99def4 docs: Add Docker as a top-level entry in the production sidebar.
The official Docker image's documentation is published as a Read the
Docs subproject and is searchable from the parent project, but it
has no entry in the main docs sidebar — so a user navigating
zulip.readthedocs.io has no path to discover it short of a search
query.

Add a thin shim page in the production toctree, and redirect
existing in-prose `docker:index` references to it so the sidebar
entry becomes the canonical Docker navigation anchor.
2026-05-05 17:57:43 -07:00
Alex Vandiver
625f5ec581 docs: Drop the gif-picker-integrations stable-link workaround.
This has been released in stable.
2026-05-05 17:57:43 -07:00
KasarapuRajeev
92ede4490a
docs: Fix grammar issues in code reviewing documentation. 2026-05-03 09:43:26 -07:00
Tim Abbott
3b6643dc94 version: Start 13.0 development branch.
Some checks failed
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
Code scanning / CodeQL (push) Has been cancelled
Zulip production suite / Ubuntu 22.04 production build (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:bookworm, true, false, Debian 12 (Python 3.11, backend + documentation), bookworm) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:jammy, false, true, Ubuntu 22.04 (Python 3.10, backend + frontend), jammy) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:noble, false, false, Ubuntu 24.04 (Python 3.12, backend), noble) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:resolute, false, false, Ubuntu 26.04 (Python 3.14, backend), resolute) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:trixie, false, false, Debian 13 (Python 3.13, backend), trixie) (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm, --test-custom-db, Debian 12 production install with custom db name and user, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy, , Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble, , Ubuntu 24.04 production install, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:resolute, , Ubuntu 26.04 production install, resolute) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie, , Debian 13 production install, trixie) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-7.0, 7.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-8.0, 8.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy-6.0, 6.0 Version Upgrade, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-10.0, 10.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-9.0, 9.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie-11.0, 11.0 Version Upgrade, trixie) (push) Has been cancelled
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
2026-04-27 17:37:21 -07:00
Tim Abbott
a37e628b24 Release Zulip Server 12.0. 2026-04-27 15:54:02 -07:00
Tim Abbott
caeb627613 docs: Remove unnecessary release checklist items.
The production suite CI job covers the risks that manual testing of
this form might catch well, and as far as I know, we last did this
class of additional extensive manual testing for a release years ago.

(We do such manual testing when authoring/merging a change to the
installer experience, but not at release time).
2026-04-27 15:14:12 -07:00
Mateusz Mandera
7788ce98e9 ldap: Support ExternalAuthID in the sync_ldap_user_data system.
Closes #35196.

In #34850 we implemented this for the ldap authentication codepath.
This PR makes it support also during the sync_ldap_user_data job.

What this means practically is that if this functionality is enabled and
correctly configured, sync_ldap_user_data is able to find the associated
user in the ldap directory even if the email value in the directory has
changed. The UserProfile's delivery_email will be updated to sync this
change, in addition to the regular syncing for other attributes.
Email changes used to break the association between UserProfile and the
ldap user entry.

The primary challenge making this implementation fairly complex is the
fact that django-auth-ldap is designed with authentication in mind, so
it doesn't make arbitrary LDAP searches easy - and the regular direction
is:
user ldap credentials -> LDAP user data -> Django user object.

However, the sync job searches in the opposite direction. We begin with
a Django UserProfile - we need to find the ExternalAuthID entry (if it
exists), and then based on the configuration of this feature, do an
appropriate LDAP search to find the LDAP user entry with the matching
value in the attribute configured as the `unique_account_id`.
2026-04-27 13:50:27 -07:00
Aman Agrawal
a89b9036d9 docs: Replace Twitter (X) references with Bluesky.
The README badge, post-install "follow us" link, release-
checklist announcement step, and support-Zulip help page all
linked to twitter.com/zulip or x.com/zulip. Point them at
bsky.app/profile/zulip.bsky.social, since that is where Zulip
now posts updates.

Customer testimonials in templates/corporate/for/ that quote
dated tweets are intentionally left alone, as their text uses
Twitter @-mention syntax and the link sources the quote.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-27 08:15:11 -07:00
Tim Abbott
1064f17140 Release Zulip Server 12.0-beta2. 2026-04-26 00:17:44 -07:00
Aman Agrawal
75afa9c055 provision: Replace Fedora 38 support with Fedora 43.
Fedora 38 reached end of life upstream; replace it with Fedora 43,
which ships dnf5 and a recent enough groonga to skip the source
build. Concretely, to make `tools/provision` run cleanly on
Fedora 43:

* dnf5 (Fedora 41+) dropped the `groupinstall` alias and no longer
  resolves the "Development Tools" display name, so switch the
  Fedora branch of `setup-yum-repo` to
  `dnf group install development-tools` (by group ID). Move the
  existing CentOS/RHEL `groupinstall` calls into their own branches
  so they keep working on yum/dnf4.

* Map Fedora 43 to PostgreSQL 17, and add `groonga-devel`,
  `xxhash-devel`, `meson`, and `redhat-rpm-config` to the Fedora
  package list. PGroonga 4.0.6 switched its build system to meson;
  on Fedora, PostgreSQL's `pg_config` exports CFLAGS containing
  `-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1` and
  `-specs=.../redhat-annobin-cc1`, and without `redhat-rpm-config`
  the PGroonga build fails with "cannot read spec file".
  `xxhash-devel` is required because `xxhash-libs` is often pulled
  in transitively (by blosc2, pyarrow, etc.) without its headers,
  in which case meson detects libxxhash via pkg-config and skips
  the vendored fallback that would otherwise build it from source.

* Use the packaged groonga from Fedora's main repo (15.0.4 on
  Fedora 43, satisfying PGroonga 4.0.6's >= 14.1.0 requirement)
  instead of compiling groonga from source. This removes the only
  remaining caller of `scripts/lib/build-groonga` and the
  BUILD_GROONGA_FROM_SOURCE plumbing in provision.py, which the
  prior Fedora 38 path was the only user of.

Verified end-to-end on a Fedora 43 host and in a fresh fedora:43
podman container: setup-yum-repo, the package install, and the
PGroonga source build against the system groonga all complete
cleanly.
2026-04-25 22:27:34 -07:00
Tim Abbott
a78abf7a96 presence: Restore legacy fields on single-user presence endpoint.
4c3aa4c007 migrated the GET
/users/{user_id_or_email}/presence endpoint to return only the modern
format (active_timestamp and idle_timestamp). The assumption that the
endpoint had no significant consumers turned out to be wrong: the
Zulip web app itself was a consumer (in user_card_popover, where it
caused a "Failed to parse presence API response" error for any
currently active user), and there are likely third-party integrations
relying on the legacy format as well.

Restore the legacy website and aggregated dictionaries alongside the
new modern fields, so existing clients keep working. Clients should
migrate to the modern fields, which is now phrased as a recommendation
rather than a breaking change in the API and self-hosted upgrade
notes.

Additionally, add a top-level server_timestamp field to the response,
matching the behavior of other presence endpoints. This lets clients
compute presence-status age against the server's clock rather than
guessing with the local clock.

Refactor the view to query UserPresence once and format both the
modern and legacy presence dicts from the same row, rather than
issuing two queries that fetch the same data.
2026-04-24 16:49:56 -07:00
Mateusz Mandera
1a1fb1d226 saml: Support full_name sync upon login.
Relatively simple change, adding full_name support to our upon-login
user data sync mechanism.
Addresses the user problem noted in
https://github.com/zulip/zulip/issues/38583#issuecomment-4138042890

Fixes #34071 partially, which was about OIDC specifically.
This commit adds the necessary underlying mechanism, but it remains only
available via SAML for now. We still have to enable
`SOCIAL_AUTH_SYNC_ATTRS_DICT` support for the OIDC backend.
2026-04-24 15:19:38 -07:00
Niloth P
d1bc81409c video_calls: Fix an error name and a typo in the docs. 2026-04-23 17:14:36 -07:00
Tim Abbott
a9a25b9c56 docs: Explain security/data access model for E2EE push notifications.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 23:26:31 -07:00
Anders Kaseorg
34ed22a117 install: Support Ubuntu 26.04.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2026-04-22 22:00:04 -07:00
Aman Agrawal
19bc668fc5 ui_init: Pass fetch_event_types to skip unused stream data on reload.
The web app doesn't use state["streams"] from /register — it relies
on "subscription" data instead (see comment in
zerver/lib/events.py). On initial page load, home.py already skips
this via include_streams=False.

Use the existing fetch_event_types parameter to achieve the same
optimization for client-triggered reloads, avoiding a redundant
do_get_streams() call.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-21 08:13:38 -07:00
apoorvapendse
ac44749739 integrations: Document Webex video call integration.
Fixes: #36455.
Signed-off-by: apoorvapendse <apoorvavpendse@gmail.com>
2026-04-18 16:11:01 -07:00
Alya Abbott
4422f19454 docs and portico: List Discord auth method alongside others. 2026-04-17 16:51:12 -07:00
Mateusz Mandera
3b4ec0bf58 docs: Update Authentik SAML documentation.
Fixes #38583.
2026-04-17 16:18:28 -07:00
Tim Abbott
e674b796f2 docs: Add an upgrade note about the presence API change. 2026-04-14 15:48:17 -07:00
sandeep
7112a1706a left_sidebar: Use 'zulip-icon-hash' for View channels icon.
Replace the recently added 'hashtag-thin.svg' icon in the folder popover
View channels menu item with the existing 'zulip-icon-hash'. The hash
icon is already used in the gear menu for channel settings.

Remove 'hashtag-thin.svg' and its THIRDPARTY entry, as it is no longer
needed.
2026-04-14 10:48:21 -07:00
PieterCK
1aa5338c28 social_auth: Add Discord as an authentication option.
Fixes part of #38149.

Co-authored-by: Kevin Chang <13548854+sf302@users.noreply.github.com>
2026-04-13 09:34:19 -07:00
apoorvapendse
5c7adf65d1 gifs: Introduce KLIPY as a GIF provider.
Signed-off-by: apoorvapendse <apoorvavpendse@gmail.com>
2026-04-11 22:51:27 -05:00
Niloth P
c634cdc349 integration_url_modal: Support boolean URL params defaulting to true. 2026-04-11 22:36:08 -05:00
Niloth P
ae1fbd239d integrations: Rename WebhookUrlOption's validator to input_type.
And convert its type from `Callable` to `str`.

It's type was previously set to a string in the frontend, and validator
functions in the backend, which were never called.
2026-04-11 22:36:08 -05:00