ali.mk

tutorial · Jul 2026

Break Free from Zotero Storage Limits: How to Host Your Own WebDAV Server

Stop suffering the 300MB of Zotero -- Start storing the PDFs!

contents

As a researcher, academic, or just someone who reads a lot of papers, you either already have a reference management software of your choice or you are just suffering (choose it; and choose Zotero!!)! If you already know what a reference manager is, then most likely it is Zotero that you are already using; an absolute lifesaver. With the recent release of Zotero 9, the reading and annotating experience has reached a whole new level with a great new UI and UX that I am personally enjoying much. Being able to highlight, take notes directly on PDFs, and seamlessly extract those annotations into your word processor makes it unparalleled in the reference management space. Also, there are many efforts in developing further MCP around zotero and connecting it to the AI assistants of your choice.

But there is one major catch.

As soon as you start aggressively saving webpages, full-text PDFs, and supplementary materials, you’ll hit a wall: Zotero’s free cloud storage is capped at 300 MB. That is enough for thousands of paper meta-data but not paper pdfs.

I was in agony for many years selecting and deleting pdfs of older papers (and I do not know why I didn’t do anything about it until now!). But I eventually solved it! and I recommend you to do so too. Especially before piling up your library. If you want your entire library (PDFs, highlights, and notes) synced to the cloud so you can read on your iPad/tablet on the train and then seamlessly switch back to your desktop, you need more space. Zotero offers paid storage plans, which are great and support the project. However, if you have a massive library, those costs can add up.

Fortunately, Zotero gives you another option for syncing your attachment files: WebDAV.

In this post, I’ll explain what WebDAV is and give you a comprehensive, step-by-step guide (that I did myself) on how to set up your own secure WebDAV server on an Ubuntu VPS to get practically unlimited storage for your Zotero library.

What is WebDAV?

WebDAV (Web Distributed Authoring and Versioning) is an extension of the standard HTTP protocol. Instead of just letting you view files on a web server, WebDAV allows you to create, edit, move, and upload files remotely.

Think of it like turning a web server into a network drive.

When you use WebDAV with Zotero, a clever division of labor happens:

  1. Metadata & Notes: Your library data (the citations, tags, and text notes) continues to sync seamlessly via Zotero’s free native sync servers (which do not count toward your file storage quota).
  2. Attachments: Your heavy files (PDFs, EPUBs, snapshots) are synced directly to your personal WebDAV server.

Note: If you don’t want to tinker with Linux servers, Zotero supports out-of-the-box integration with several 3rd-party cloud providers that offer WebDAV (like Koofr [I use this one] or Nextcloud). You can read more about these alternatives in the official Zotero documentation for WebDAV providers.

But if you already have a Virtual Private Server (VPS) or love self-hosting, setting up your own WebDAV server is incredibly rewarding. Let’s build it.

The Ultimate Ubuntu VPS Setup for Zotero WebDAV

We’re going to start from a fresh Ubuntu server (as I did). We will secure it, install Nginx and WebDAV, configure SSL for encryption, and hook it up to Zotero.

Prerequisites:

  • A VPS running Ubuntu (22.04 or later ---it would probably work with older versions too. But I personally just tried it with 26.04).
  • A domain or subdomain pointed to your server’s IP address (e.g., zotero.yourdomain.com).

Step 1: Secure Your Server

Never leave a fresh VPS exposed with default root passwords. Let’s create a new user, set up SSH keys, and disable password logins.

Log into your server as root and create a new user (I’ll use ali, but you can use your name):

sudo adduser ali
sudo usermod -aG sudo ali

Switch to your new user to set up your SSH keys:

sudo su - ali
mkdir -p ~/.ssh && chmod 700 ~/.ssh

Add your local computer’s public SSH key (~/.ssh/id_ed25519.pub or ~/.ssh/id_rsa.pub) to the server:

echo "YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
exit

Now, back as root, lock down SSH. We need to disable root login and password authentication:

# Temporarily fix terminal issues if using a modern terminal emulator like Ghostty
TERM=xterm-256color sudo nano /etc/ssh/sshd_config

Find and ensure these lines are set:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

Ubuntu 22.04+ Pro-Tip: Ubuntu often includes an override file for cloud setups. If you still get prompted for a password after the step above, edit this file too:

TERM=xterm-256color sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf

Change PasswordAuthentication yes to no.

Restart SSH and set up the UFW Firewall:

sudo systemctl restart ssh
sudo ufw allow ssh
sudo ufw allow 'Nginx Full'
sudo ufw enable

Test your SSH connection in a new terminal window before closing your root session. If you can log in without a password, you’re good to go!

Step 2: Install Nginx and WebDAV

Log in as your standard user (ali). We need a web server (Nginx) and the WebDAV extensions:

sudo apt update && sudo apt install -y nginx nginx-extras

Next, install Let’s Encrypt Certbot so we can secure our PDFs in transit:

sudo apt install -y certbot python3-certbot-nginx

Step 3: Create the Zotero Directory

Here is a specific quirk about Zotero: when you give it a WebDAV URL, it explicitly looks for a directory named zotero inside that location.

Let’s create the root directory, and the nested zotero directory it expects:

sudo mkdir -p /var/www/zotero/zotero
sudo chown -R www-data:www-data /var/www/zotero
sudo chmod -R 755 /var/www/zotero

Step 4: Set Up Authentication

You don’t want anyone on the internet accessing your PDFs. We will secure the server with Basic HTTP Authentication.

Install the required utilities:

sudo apt install -y apache2-utils

Generate a password file. Replace zoterouser with whatever username you want to type into your Zotero app (this has nothing to do with your system username):

sudo htpasswd -c /etc/nginx/.htpasswd zoterouser

You will be prompted to create a strong password. Note this down; you’ll need it later.

Step 5: Configure Nginx

Now we tell Nginx how to handle the WebDAV requests. Create a new site configuration:

sudo nano /etc/nginx/sites-available/zotero

Paste the following configuration (replace zotero.yourdomain.com with your actual subdomain):

server {
    listen 80;
    server_name zotero.yourdomain.com;

    root /var/www/zotero;

    auth_basic "Zotero WebDAV";
    auth_basic_user_file /etc/nginx/.htpasswd;

    client_max_body_size 100M;
    autoindex on;

    location / {
        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS;
        dav_access user:rw group:r all:r;
        create_full_put_path on;
    }
}

Note: Avoid using try_files in this location block. Doing so will block the PUT requests Zotero uses to verify the server, resulting in a 404 error during setup!

Enable the site and verify the Nginx syntax:

sudo ln -s /etc/nginx/sites-available/zotero /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Step 6: Secure with SSL (HTTPS)

Run Certbot to automatically fetch an SSL certificate and update your Nginx configuration to use HTTPS:

sudo certbot --nginx -d zotero.yourdomain.com

Follow the prompts. Certbot will automatically alter your Nginx file to route traffic securely over port 443.

To verify WebDAV is actually responding to requests, you can run this curl command from your terminal:

curl -u zoterouser -X PROPFIND https://zotero.yourdomain.com/zotero/

If you enter your password and see a block of XML code in the terminal, congratulations! Your WebDAV server is alive.

Step 7: Connect the Zotero App

The hard part is over. Now, let’s point Zotero to your new server:

  1. Open Zotero on your computer.
  2. Go to Edit > Settings (or Zotero > Preferences on Mac) > Sync.
  3. Under the File Syncing section, check “Sync attachment files in My Library using WebDAV”.
  4. Enter your details:
  • URL: https://zotero.yourdomain.com/zotero/
  • Username: The username you created in step 4 (zoterouser).
  • Password: The password you generated in step 4.
  1. Click “Verify Server”.

Zotero will reach out to your VPS, create a test file, and read it back. You should see a green checkmark and the message: “File sync is successfully set up!”

Conclusion

You now have a fully private, fully secure storage backend for your entire research library. Every time you drag a PDF into Zotero, it will quietly upload to your VPS. You can connect your laptop, your desktop, and your iPad to the same WebDAV URL and keep your entire workflow perfectly synchronized without ever worrying about hitting a 300 MB quota again.

Happy researching!

fin

Comments

Select any passage above to comment on it directly. Markdown supported.

Loading comments…