Sign inSign up

w3kllc/microbin

By w3kllc

Updated 4 months ago

A secure, configurable file-sharing and URL shortening web app written in Rust.

Image
Buildkit cache
0

7.2K

w3kllc/microbin repository overview

MicroBin — w3K Edition

A fast, self-hosted, privacy-first pastebin and file-sharing service written in Rust. Share text snippets, upload files, set optional passwords, custom URLs, and expiry times — entirely self-contained, no external dependencies, no tracking.

This is the w3K fork of MicroBin, with production-hardened defaults and additional features. Live at microbin.cc.


What's Different in This Fork

FeatureUpstreamw3K Fork
QR code generationDisabledEnabled
Eternal (never-expiring) pastesDisabledEnabled
Default expiry1 hourNever
TelemetryEnabledDisabled
Hash IDs with animal namesDisabledEnabled
Client-side encryptionDisabledEnabled
Server-side encryptionDisabledEnabled
Custom URL preservationBrokenFixed
HTML file inline renderingNoYes
Admin dashboardBroken (/admin 404)Fixed (/@)

Quick Start

docker run -d \
  -p 8080:8080 \
  -e MICROBIN_PUBLIC_PATH=https://paste.example.com \
  -v microbin-data:/app/microbin_data \
  --name microbin \
  w3kllc/microbin:latest

Visit http://localhost:8080 — admin panel at http://localhost:8080/@.


Supported Platforms

  • linux/amd64 — Intel/AMD 64-bit (desktops, servers, cloud VMs)
  • linux/arm64 — ARM 64-bit (Raspberry Pi 4+, Apple Silicon, AWS Graviton, Oracle Cloud)

Docker pulls the correct image for your platform automatically.


Docker Compose

services:
  microbin:
    image: w3kllc/microbin:latest
    container_name: microbin
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - microbin-data:/app/microbin_data
    environment:
      - MICROBIN_PORT=8080
      - MICROBIN_PUBLIC_PATH=https://paste.example.com
      - MICROBIN_ADMIN_USERNAME=admin
      - MICROBIN_ADMIN_PASSWORD=changeme
      - MICROBIN_QR=true
      - MICROBIN_ETERNAL_PASTA=true
      - MICROBIN_HASH_IDS=true
      - MICROBIN_DISABLE_TELEMETRY=true

volumes:
  microbin-data:
With a reverse proxy (Traefik)
services:
  microbin:
    image: w3kllc/microbin:latest
    container_name: microbin
    restart: unless-stopped
    volumes:
      - microbin-data:/app/microbin_data
    environment:
      - MICROBIN_PUBLIC_PATH=https://paste.example.com
      - MICROBIN_ADMIN_USERNAME=admin
      - MICROBIN_ADMIN_PASSWORD=changeme
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.microbin.rule=Host(`paste.example.com`)"
      - "traefik.http.routers.microbin.entrypoints=websecure"
      - "traefik.http.routers.microbin.tls.certresolver=letsencrypt"
      - "traefik.http.services.microbin.loadbalancer.server.port=8080"

volumes:
  microbin-data:
With Nginx Proxy Manager / CloudPanel

Point your domain to the container's port 8080. Set MICROBIN_PUBLIC_PATH to your full public URL including https://.


Configuration

VariableDefaultDescription
MICROBIN_PORT8080Port to listen on
MICROBIN_BIND0.0.0.0Bind address
MICROBIN_PUBLIC_PATH(unset)Full public URL — required for QR codes and copy-URL
MICROBIN_DATA_DIRmicrobin_dataData directory path
MICROBIN_ADMIN_USERNAMEadminAdmin panel username
MICROBIN_ADMIN_PASSWORDm1cr0b1nAdmin panel password — change this
MICROBIN_QRtrue*Enable QR code generation
MICROBIN_ETERNAL_PASTAtrue*Allow never-expiring pastes
MICROBIN_HASH_IDStrue*Use hash IDs with animal names
MICROBIN_PRIVATEtrueEnable private pastes
MICROBIN_EDITABLEtrueAllow paste editing
MICROBIN_ENCRYPTION_CLIENT_SIDEtrueEnable client-side encryption
MICROBIN_ENCRYPTION_SERVER_SIDEtrueEnable server-side encryption
MICROBIN_ENABLE_BURN_AFTERtrueEnable burn-after-read
MICROBIN_HIGHLIGHTSYNTAXtrueEnable syntax highlighting
MICROBIN_DISABLE_TELEMETRYtrue*Disable telemetry
MICROBIN_READONLYfalseRequire upload password
MICROBIN_PURE_HTMLfalseDisable CSS/JS (accessibility mode)
MICROBIN_LIST_SERVERfalseEnable public paste listing
MICROBIN_HIDE_LOGOfalseHide the MicroBin logo
MICROBIN_HIDE_FOOTERfalseHide footer

*Defaults differ from upstream — set by this fork.

Privacy Levels
LevelListedURL RequiredPassword to ViewEncrypted
publicYesNoNoNo
unlistedNoYesNoNo
readonlyNoYesNoNo
privateNoYesYesServer-side AES-256
secretNoYesYesClient-side (browser)
Expiry Options

1min · 10min · 1hour · 24hour · 3days · 1week · never


Admin Panel

Access at <your-url>/@ — sign in with your configured username and password.

The admin panel lists all pastes regardless of privacy level, allows deletion, and shows server status and version info.


HTML File Rendering

Upload any .html or .htm file and it renders inline in the browser instead of downloading. A small non-printable navigation button (bottom-right) links back to MicroBin. The button is hidden automatically when printing or saving as PDF.

This makes MicroBin useful for sharing formatted documents — resumes, reports, proposals — with or without a password, at a clean custom URL.

microbin.cc/juanitaresume          # public — visit and read
microbin.cc/q4report               # unlisted — share link to read
microbin.cc/contractdraft          # private — password required

Custom URLs

Set a custom URL slug when creating a paste. It persists across all operations including auth redirects, incorrect-password flows, edit, and remove.

URLs must be alphanumeric with hyphens/underscores, max 100 characters.


Image Tags

TagDescription
latestMost recent stable release
v2.x.xSpecific version
buildcache-linux-amd64Build layer cache (internal)
buildcache-linux-arm64Build layer cache (internal)

Building Locally

# Single platform
docker build -t microbin:local .

# Multi-platform (requires buildx)
docker buildx build --platform linux/amd64,linux/arm64 -t microbin:local .

# From source (Rust)
cargo build --release
./target/release/microbin --port 8080


License

BSD-3-Clause — see LICENSE.

Tag summary

Content type

Image

Digest

sha256:def780ba4

Size

49.1 MB

Last updated

4 months ago

docker pull w3kllc/microbin