We only have/had a short eval phase and our use case is a small raceengineering team with 40 people at the racetrack, independent of internet access. So a very particualar use case, and our needs might not cover you needs.
Zulip pro
* Threading model (can't value that high enough)
* All messages overview, no matter what stream they were written in
* Zulip community at chat.zulip.org with direct contact to the devs. Tim Abbott the lead dev helped me out in a issue with a user login (haven't used the Mattermost support so can't compare)
Zulip con
* Most ops work has to be done by a python script manage.py, API has room to improve
Mattermost pro
* API
* haven't measured but the UI felt smoother, faster
Mattermost con
* you have to pay for Enterprise features
Both have great docs and a docker deployment