ZipLine - A Self Hosted ShareX Server

Self host your own screenshots, video clips, code and URL shortener in one FOSS application. Let's take a look at ZipLine for ShareX.

ZipLine - A Self Hosted ShareX Server

Previously I wrote about XbackBone paired with ShareX for automatically storing your screenshots, video clips and code snippets. It's a fantastic application on it's own. As more applications are being developed like ZipLine with beautifully crafted dashboards, we are enticed to take a look and I am sure glad we did!

What is ZipLine?

ZipLine is a ShareX file upload server that is easy to use, packed with features, and with an easy setup! You can also use ZipLine as a standalone application without ShareX by manually uploading your files in the dashboard.

Ok then what is ShareX?

ShareX is a free and open source program that lets you capture or record any area of your screen and share it with a single press of a key. It also allows uploading images, text or other types of files to many supported destinations you can choose from.

ShareX will act as the tool we use to take screenshots and short videos then automatically upload them to our ZipLine server. You can read more about how ShareX works with a custom uploader here. No need to re-write all the details here again!

Install ZipLine using Docker Compose

This compose stack consists of  Postgres and ZipLine app.

version: '3'
services:
  postgres:
    image: postgres:15
    restart: unless-stopped
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DATABASE=postgres
    volumes:
      - /docker/zipline/pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U postgres']
      interval: 10s
      timeout: 5s
      retries: 5

  zipline:
    image: ghcr.io/diced/zipline
    ports:
      - '3000:3000'
    restart: unless-stopped
    environment:
      - MFA_TOTP_ENABLED=true
      - WEBSITE_SHOW_FILES_PER_USER=true
      - WEBSITE_TITLE=Noted.lol
      - CORE_RETURN_HTTPS=false
      - CORE_SECRET=C9dde56j8fCWLo9000XcgW
      - CORE_HOST=0.0.0.0
      - CORE_PORT=3000
      - CORE_DATABASE_URL=postgres://postgres:postgres@postgres/postgres
      - CORE_LOGGER=true
    volumes:
      - '/docker/zipline/uploads:/zipline/uploads'
      - '/docker/zipline/public:/zipline/public'
    depends_on:
      - 'postgres'

volumes:
  pg_data:

Note that this is the database URL if you want to change it.

CORE_DATABASE_URL=postgres://user:password@host:port/database

Once the install completes, navigate to your host IP on port 3000. Then login using administrator:password. Be sure to go to your profile and change the password! I also added 2FA by adding the MFA_TOTP_ENABLED=true environment variable to the stack which can be enabled from your profile page.

0:00
/

Uploading files and text to ZipLine Manually

As we browse around, you will notice 2 main upload types shown on the side bar that you can use in the dashboard under "Upload". These can be used to manually upload text or code snippets and files to the server.

Adding a YAML snippet as an eample, you can choose the YAML syntax option to properly colorize the code snippet.

0:00
/

You can also set an expiration date, password and other custom upload options before submitting to to the server for upload. By default, all uploads are made without these options if you do not manually add them before uploading.

0:00
/

While ZipLine can definitely be used as a standalone file server, the real power shines within when paired with ShareX. We will cover that in just  a minute!

ZipLine Users and Registration

By default, there is no public registration. You can enable public registration via environment variable if you want.

Otherwise, any new user will have to be added manually by the server administrator. You can also give trusted users the administrator role.

Each user has their own profile and can choose to use ZipLine with either ShareX for Windows or Flameshot for Linux. Users will see only their own files when logged in but can see the overall server stats. This can easily be changed via Environment variables in your Docker Compose stack.

There are several more options you can choose to add such as the types of file extensions allowed, file sizes for users, rate limiting how fast images can be uploaded, default expiration time and much more. You can see all of these options on the ZipLine docs but more specifically under the Uploader section.

Create a ShareX Config File

To upload using Sharex you will have to go to your profile page and generate a ShareX config file.

0:00
/

This will give you a few options when using ShareX as your screenshot tool. Once you download the config file, all you have to do is double click it to add your ZipLine instance to ShareX and any screenshot or video you take will then be sent to your ZipLine server.

If you plan to send links in Discord or other chat locations, choose the embed option to prettify your links as embeds. You can further customize the way these embeds appear in your profile page using variables listed on the Zipline docs page here.

Here is what mine looks like with custom variables. The link was shared in a Discord channel and you can see how the variables we used convert in the embed.

Creating short URLs with ZipLine

This requires a domain name and assumes you already have the domain setup and pointing at your ZipLine instance.

You can set short URLs to only allow a certain amount of views before it will self destruct and automatically remove itself from the database. You can also manually delete them. There is a copy button where you can copy the generated URL for each URL in the dashboard.

ZipLine Stats

Once you start adding media to ZipLine, take a look over on the Stats page for detailed information about your server.

Here you can see all of the valuable information about the content on your ZipLine server. This page is updated every 1800 seconds to save on load but can be modified via environment variable.

Final Notes and Thoughts

You can see how customizable ZipLine is through environment variables and Docker Compose. It's a powerful tool that offers an all-in-one solution for image, file, text/code uploads while also offering a URL shortening option.

One thing missing from ZipLine that I liked about Xbackbone is the download button on the dashboard. Having to right click on a video to download it is a bit tedious and easily rectifiable so I was a bit surprised that feature is missing. There are no download buttons for media anywhere to be seen! WHY!? 😆 I guess I will be doing a lot of right clicking.

With that being said, ZipLine is my new ShareX partner and I am pleased to say I will be using it moving forward. I see an active development team that pays close attention to issues on the ZipLine Github repo and on their Discord server. A great group of people over there doing amazing things!

If you find ZipLine to be useful, be sure to give it a star on their Github repo.