← All articles
PRODUCTIVITY Self-Hosting Zipline: A Modern File Sharing and Scre... 2026-02-09 · zipline · file-sharing · screenshots

Self-Hosting Zipline: A Modern File Sharing and Screenshot Server

Productivity 2026-02-09 zipline file-sharing screenshots sharex image-hosting

Taking a screenshot, uploading it somewhere, and sharing the link should be a two-second operation. But most screenshot tools either compress your images, slap watermarks on them, delete files after 30 days, or wrap everything in ads. If you share files and screenshots regularly — for bug reports, documentation, quick collaboration, or just showing someone something on your screen — a self-hosted upload server eliminates all of that friction.

Zipline is a modern, self-hosted file sharing and screenshot upload server. It handles image uploads, file sharing, URL shortening, code/text paste, and more, all behind a clean dashboard with user management and a powerful API.

What Zipline Does

Zipline is designed to be the backend for your screenshot and file sharing workflow:

Why not just use Imgur or similar services

Third-party image hosts come with trade-offs:

Zipline vs. Alternatives

Feature Zipline Linx XBackBone Lsky Pro
Self-hosted Yes Yes Yes Yes
File uploads Any type Any type Images Images
URL shortener Yes No No No
Text paste Yes Yes No No
Multi-user Yes No Yes Yes
ShareX support Excellent Good Good Good
Gallery view Yes No Yes Yes
Discord embeds Customizable Basic Basic Basic
Folders Yes No Yes Yes
API Full REST API Yes Basic Yes
Expiring uploads Yes Yes No No
Syntax highlighting Yes Yes N/A N/A
Tech stack Next.js Go PHP PHP
Resource usage Moderate Very low Low Low
Active development Very active Maintained Slow Active

Why Zipline

Zipline is the most feature-complete option. It combines file uploading, URL shortening, and text paste into a single application with a polished dashboard. If you only need image hosting, XBackBone is simpler. If you want minimal resource usage, Linx (written in Go) is lighter. But for a full-featured upload server, Zipline is the strongest choice.

Screenshot Tool ShareX / Flameshot macOS / cURL upload Zipline API Next.js application File processing URL shortening & paste Storage Local disk / S3 / R2 store Shareable URL Direct link to file Discord embeds serve Dashboard Gallery, stats, user mgmt PostgreSQL backend

Self-Hosting Zipline: Setup

Server requirements

Docker Compose setup

services:
  zipline:
    container_name: zipline
    image: ghcr.io/diced/zipline:latest
    ports:
      - "3000:3000"
    environment:
      CORE_SECRET: "change-me-to-a-long-random-string"
      CORE_DATABASE_URL: "postgresql://zipline:zipline@postgres:5432/zipline"
      CORE_RETURN_HTTPS: "true"
      CORE_HOST: "0.0.0.0"
      CORE_PORT: "3000"
    volumes:
      - zipline-uploads:/zipline/uploads
      - zipline-public:/zipline/public
    depends_on:
      postgres:
        condition: service_healthy
    restart: always

  postgres:
    container_name: zipline-db
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: "zipline"
      POSTGRES_USER: "zipline"
      POSTGRES_PASSWORD: "zipline"
    volumes:
      - zipline-db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U zipline"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: always

volumes:
  zipline-uploads:
  zipline-public:
  zipline-db:

Generating the secret

openssl rand -hex 32

Replace change-me-to-a-long-random-string with the generated value.

Starting the service

docker compose up -d

Access Zipline at http://your-server:3000. The default administrator credentials are:

Change these immediately after first login.

ShareX Integration

ShareX is the most popular screenshot tool on Windows, and Zipline's integration is first-class.

Configuring ShareX

  1. In Zipline, go to your user settings and copy your upload token
  2. In ShareX, go to Destinations > Custom Uploader Settings
  3. Create a new uploader with these settings:
Request type: POST
Request URL: https://your-zipline-domain.com/api/upload
Headers:
  Authorization: your-upload-token
Body: Form data (multipart/form-data)
File form name: file
URL: {json:files[0]}
  1. Set the custom uploader as your default image and file destination
  2. Take a screenshot — it uploads to Zipline and copies the URL to your clipboard automatically

Flameshot integration (Linux)

For Linux users using Flameshot:

#!/bin/bash
# Save screenshot and upload to Zipline
flameshot gui -r | curl -s \
  -H "Authorization: your-upload-token" \
  -F "file=@-;filename=screenshot.png" \
  "https://your-zipline-domain.com/api/upload" | jq -r '.files[0]' | xclip -selection clipboard

Save this as a script and bind it to a keyboard shortcut.

macOS integration

Use the built-in screenshot tool with a script:

#!/bin/bash
# Take screenshot to temp file
screencapture -i /tmp/screenshot.png

# Upload to Zipline
URL=$(curl -s \
  -H "Authorization: your-upload-token" \
  -F "file=@/tmp/screenshot.png" \
  "https://your-zipline-domain.com/api/upload" | jq -r '.files[0]')

echo "$URL" | pbcopy
rm /tmp/screenshot.png

URL Shortening

Zipline includes a built-in URL shortener:

  1. Go to URLs in the dashboard
  2. Enter the long URL and optionally set a custom slug
  3. Get a short URL like https://your-domain.com/go/abc123

You can also create short URLs via the API:

curl -X POST "https://your-zipline-domain.com/api/shorten" \
  -H "Authorization: your-upload-token" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/very/long/path", "vanity": "mylink"}'

Text and Code Paste

Zipline works as a paste bin with syntax highlighting:

  1. Go to Text in the dashboard
  2. Paste your code or text
  3. Select the language for syntax highlighting
  4. Get a shareable link with a clean, highlighted view

This is useful for sharing code snippets, configuration files, or log excerpts.

Discord Embed Customization

When you share a Zipline link in Discord, it generates an embed preview. You can customize this:

  1. Go to Settings > Embed
  2. Set a custom title, description, and color
  3. The embed will show a preview of the uploaded image or file info

Per-upload embed overrides are also available via the API, letting you set custom titles and descriptions for specific uploads.

User Management

For shared instances, Zipline supports multiple users:

API Overview

Zipline's REST API covers all functionality:

# Upload a file
curl -X POST "https://your-domain.com/api/upload" \
  -H "Authorization: your-token" \
  -F "[email protected]"

# List uploads
curl "https://your-domain.com/api/user/files" \
  -H "Authorization: your-token"

# Delete a file
curl -X DELETE "https://your-domain.com/api/user/files/abc123" \
  -H "Authorization: your-token"

# Shorten a URL
curl -X POST "https://your-domain.com/api/shorten" \
  -H "Authorization: your-token" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'

The API enables automation — automated screenshot uploads, CI/CD artifact sharing, or programmatic file distribution.

Reverse Proxy Setup

Caddy:

share.yourdomain.com {
    reverse_proxy localhost:3000
}

Nginx:

server {
    server_name share.yourdomain.com;

    client_max_body_size 100M;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Note the client_max_body_size directive in Nginx — without it, large file uploads will fail. Set this to match the maximum file size you want to allow.

Storage Management

Over time, uploads accumulate. Manage storage with these strategies:

S3 storage configuration

For offloading storage to S3 or a compatible service (MinIO, Cloudflare R2):

environment:
  DATASOURCE_TYPE: "s3"
  DATASOURCE_S3_ACCESS_KEY_ID: "your-access-key"
  DATASOURCE_S3_SECRET_ACCESS_KEY: "your-secret-key"
  DATASOURCE_S3_BUCKET: "zipline-uploads"
  DATASOURCE_S3_ENDPOINT: "https://s3.amazonaws.com"
  DATASOURCE_S3_REGION: "us-east-1"

Honest Trade-offs

Zipline is great if you:

Consider Linx instead if you:

Consider XBackBone instead if you:

Consider just using a CDN/S3 bucket if you:

The bottom line: Zipline is the best self-hosted option for people who share files and screenshots as part of their daily workflow. The ShareX integration makes the capture-upload-share loop nearly instant, the dashboard is genuinely well-designed, and features like URL shortening and text paste mean you get a multi-purpose sharing tool in one package. The main cost is resource usage — it runs a Next.js application with PostgreSQL, which is heavier than simpler alternatives.