Programming language: Crystal
License: MIT License
Tags: Services And Apps    
Latest version: v0.7.2

mpngin alternatives and similar shards

Based on the "Services and Apps" category.
Alternatively, view mpngin alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of mpngin or a related project?

Add another 'Services and Apps' Shard


MPNG.IN Crystal CI

A simple and fast URL shortener with built in stats. Requires Redis and assumes it is local for lowest possible latency.


Copy env.example to .env and set the values. For the SECRET_TOKEN, try Random.new.hex(32).

NOTE: If building in release mode for production, ensure KEMAL_ENV is uncommented in .env and set to production.

Then run:

shards install
crystal run src/mpngin.cr

For production, make a release build:

# Assumes .env file is correctly filled out, including KEMAL_ENV=production
crystal build --release src/mpngin.cr


Creating an short URL and getting the stats require an application key first.

1) Create an application first:

โžœ curl -X "POST" "http://localhost:3000/application" -H "Authorization: bearer <SECRET_TOKEN_HERE>"

# New app key response

2) Use the app key in place of the SECRET_TOKEN to make shortened URLs, passing in the final redirect to URL as a application/x-form-urlencoded body param named redirect_url:

โžœ curl -X "POST" "http://localhost:3000/" \
     -H 'Authorization: bearer d48655ff210c3e9e4ed8f6ad4f1923a3' \
     -H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \
     --data-urlencode "redirect_url=https://www.nintendo.com"

# Your shiny new shortened redirect URL

3) Get number of requests for this shortened URL:

โžœ curl "http://localhost:3000/541450/stats" \
     -H 'Authorization: bearer d48655ff210c3e9e4ed8f6ad4f1923a3' \
     -H 'Accept: text/plain'

# Request count response

Link Report

MPNGIN can generate a link report in JSON, CSV, or HTML format. Use your SECRET_TOKEN to request the report endoint in which ever format you need:

# For JSON:
โžœ curl "http://localhost:3000/report.json" \
     -H 'Authorization: bearer d48655ff210c3e9e4ed8f6ad4f1923a3' \

# Response

# For HTML:
โžœ curl "http://localhost:3000/report.html" \
     -H 'Authorization: bearer d48655ff210c3e9e4ed8f6ad4f1923a3' \

# Response
<!doctype html>
<html lang="en">

# For CSV:
โžœ curl "http://localhost:3000/report.csv" \
     -H 'Authorization: bearer d48655ff210c3e9e4ed8f6ad4f1923a3' \

# Response
"Short Link","Expanded Link","Request Count"

HTML Report Customization

MPNGIN uses ECR to generate a plain table styled by Bootstrap. You can customize the layout (src/views/layouts/layout.ecr) or the table itself (src/views/report.ecr).

CSV Filename Customization

You can change the file name provided for the downloaded CSV by setting LINK_REPORT_CSV_NAME ENV variable (without extension). See the env.sample file.


For spec tests:

KEMAL_ENV=test crystal spec

For coverage:

KEMAL_ENV=test ./bin/crystal-coverage spec/mpngin_spec.cr
open coverage/index.html

NOTE: crystal-coverage generates false positives and is not recommended currently.

Static Analysis

To run static analysis checks, use locally installed Ameba (comes with shards install):



  1. Fork it ( https://github.com/thewalkingtoast/mpngin/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request