#pastebin #link-shortener #self-hosted #qrcode #actix #microbin

app karton

Simple, performant, configurable, entirely self-contained Pastebin and URL shortener

2 stable releases

2.0.1 Mar 10, 2023
2.0.0 Mar 5, 2023

#629 in HTTP server

BSD-3-Clause

1.5MB
1K SLoC

Karton

A small, rusty pastebin with URL shortener functionality.

The github repository is a mirror of this gitlab repository.

This is a fork of MicroBin.

Features

  • Animal names (by default) or custom namefiles instead of just hashes (though hashes are an option too!)
  • File and image uploads
  • raw text serving
  • URL shortening
  • QR codes
  • Listing and removing pastas (though currently everyone can do that)
  • Expiration times
  • Editable pastas
  • Syntax highlighting
  • Styling via water.css
  • Customizable endpoints

Installation guide

Karton is available on Docker hub, crates.io and using the nix flake.

The only "officially supported" (I will actively debug and search for the problem) method is the last one using nix flakes.

Installation via the nix flake

Add the repository to your inputs.

	karton.url = "git+https://gitlab.com/obsidianical/microbin.git";
# microbin.nix
{ inputs, config, pkgs, ... }:
{
  environment.systemPackages = [ inputs.karton.defaultPackage."x86_64-linux" ];
  systemd.services.karton = {
    after = [ "network.target" ];
    wantedBy = [ "multi-user.target" ];
    environment = {
	  # set environment variables to configure karton
      KARTON_HASH_IDS = "";
      KARTON_EDITABLE = "";
      KARTON_PRIVATE = "";
      KARTON_HIGHLIGHTSYNTAX = "";
      # adjust this to your domain
      KARTON_PUBLIC_PATH = "https://example.org";
      KARTON_QR = "";
      # configure endpoints to be shorter
      KARTON_URL_EP = "u";
      KARTON_RAW_EP = "r";
      KARTON_PASTA_EP = "p";
    };
    script = "${inputs.karton.defaultPackage."x86_64-linux"}/bin/karton";
    # register a simple systemd service
    serviceConfig = {
      Type = "simple";
      RootDirectory="/";
      WorkingDirectory = "/karton";
    };
  };
}

Roadmap

This is only a rough time guide for what to get done by which version, nothing fixed.

v2.0

  • Removed light mode
  • Rebrand
    • New name and logo
    • New README
    • New theme
  • Distribution on crates.io
  • Distribution on Docker hub
  • Image embedding in pasta page
  • Custom names file
  • Click logo/name to get to root

v2.1

  • Installation guides
    • nix flake
  • Copying embed urls more easily (some button for that)
  • Api for requesting customized url info
  • Config file support
  • Markdown pastas

v2.2

  • Proper docs
  • Improved rustdoc
  • Non-web client library
  • CLI client
  • Easier customization of instance names and logos
  • Easier basic themeing
    • Colors
    • Corner rounding

v2.3

  • Encrypted pastas

v3.0

  • Deprecate JSON db, replace with SQLite
  • Rework internal data structures
    • Map custom keys to ids
    • Make hash ids, names and custom keys usable at once
  • Users
    • Reporting pastas
    • Admin panel
  • Improve remove api
  • Status/health/info improvements
    • Storage thats left
    • Db status
    • Pastas on the instance
    • Users
    • Errors

future

  • Federation
    • Requesting pastas from other instances
    • When cli is complete, set default instance to route requests over
    • Fine grained permissions
  • Postgresql db support
  • Pasta comments?
  • Official central instance
  • Donation setup?
  • Distribution on nixpkgs
  • Website

Contact

This fork of MicroBin was created by Schrottkatze.

Join the matrix room to chat!

Contact me via e-mail at contact@schrottkatze.de.

Dependencies

~27–39MB
~678K SLoC