Zero Width Shortener (ZWS)

Shorten URLs with invisible spaces.

Or, configure your own instance to use any other kinds of characters.

Contributors

Code Contributors

This project exists thanks to all the people who contribute.

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

A status page for the official zws.im instance of ZWS is available at status.zws.im.

Self-hosting

Heroku

Running an instance of ZWS on Heroku is the easiest way to self-host. You can also stay totally within the free limits of both the web process and the Heroku Postgres database. Note that the Hobby Dev (free) plan of Heroku Postgres has a row limit of 10,000, which might not be enough for your use case.

  1. Copy db.example.env to db.env and fill in the values

  2. Copy example.env to .env and update the DATABASE_URL environment variable to match the values in db.env

  3. Run docker-compose up -d (this will automatically apply database migrations)

Database migrations

After you create an app using the above button you'll need to run the database migrations before shortening any URLs. These are done automatically, but manual usage may be required when upgrading versions.

This can be done easily through Docker Compose by running the following commands:

docker volume create --name=zws-postgres-storage
docker-compose up migration

Even if your database isn't being run through Docker Compose you'll still need to create the volume and start the db service. You can delete the volume right after. If you know a better way to do this, please open a pull request!

If you are using a Heroku database migrations are automatically applied, but to manually do so you'll need the credentials for your database:

  1. Get the Heroku Postgres connection URI from

  2. Create a .env file and enter in the connection URI

Example:

DATABASE_URL=postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public

Afterward you can run the migration commands shown above.

Badges

ZWS instances expose two routes that implement the Shields endpoint schema:

Image

Route

Description

Example

/stats/shields/urls

Number of shortened URLs

https://img.shields.io/endpoint?url=https://api.zws.im/stats/shields/urls

/stats/shields/visits

Number of visited URLs

https://img.shields.io/endpoint?url=https://api.zws.im/stats/shields/visits

/stats/shields/version

ZWS version

https://img.shields.io/endpoint?url=https://api.zws.im/stats/shields/version