Sign inSign up

w3kllc/microbin

By w3kllc

•Updated 4 months ago

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

Buildkit cache
Image
0

7.6K

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