ferry

module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 28, 2026 License: MIT

README

tailscale-ferry

CI Release Go Reference

Tailscale-first file sharing CLI. Publish files and directories as preview-rich URLs scoped to your tailnet, authenticated with per-share tokens.

Markdown article rendered with frontmatter, tags, and metadata

Previews

Code preview with syntax highlighting CSV rendered as a sortable table
PDF rendered with pdf.js Directory listing with breadcrumbs

Use it to

  • Share a draft markdown with your team. It opens as a polished article, not a download.
  • Preview a PDF on your phone without an iCloud handoff. Tap, scroll, done.
  • Post a CSV link in chat that opens sortable in the browser. No spreadsheet app required.

Features

  • Share files and directories as live or snapshot links
  • Rich previews: markdown (GFM), code (highlight.js), CSV (Tabulator), PDF (pdf.js), images, audio, video
  • HMAC-SHA256 token auth per share
  • Directory listing with breadcrumb navigation
  • Automatic share expiry and garbage collection
  • Snapshot mode for point-in-time copies

Usage

ferry publish returns a tailnet URL that renders the file as a polished preview in any browser:

$ ferry publish ~/Desktop/q3-roadmap.md
id: y4bLVYZQvSE
kind: file
mode: live
created: 2026-04-17T19:07:42-04:00
expires: 2026-04-24T19:07:42-04:00
url: https://laptop.tail-abc123.ts.net/s/y4bLVYZQvSE?t=veyZiAynxtU

Other commands:

# Publish a file (starts daemon automatically)
ferry publish ~/Desktop/report.pdf

# Publish a directory
ferry publish ~/Projects/docs/

# Snapshot mode (point-in-time copy)
ferry publish --snapshot ~/Desktop/draft.md

# Custom expiry (default: 7d)
ferry publish --expires-in 24h ~/Desktop/notes.txt

# List active shares
ferry list

# Get a share by id
ferry get <id>

# Extend share expiry
ferry renew <id>

# Revoke a share by id or exact path
ferry unshare <target>

# Check daemon and Tailscale health
ferry doctor

How it compares

Tool Tailnet-scoped Rich previews Per-share token Snapshot Auto expiry
ferry yes yes yes yes yes
Taildrop yes no identity no no
Tailscale Serve optional no optional no no
caddy file-server no no no no no
python -m http.server no no no no no

Architecture

ferry is the client CLI. ferryd is the background daemon that runs three HTTP listeners.

  • Public (tailnet IP, port 39124): preview and raw file endpoints
  • Loopback (127.0.0.1, port 39124): same as public, for local access
  • Admin (127.0.0.1, port 39125): share CRUD API used by the ferry client

State is stored in ~/.local/state/ferry/ with the HMAC secret in a 0600-mode file under a 0700-mode directory.

Requirements

Install

go install github.com/0xble/ferry/cmd/ferry@latest
go install github.com/0xble/ferry/cmd/ferryd@latest

Contributing

See CONTRIBUTING.md.

Security

See SECURITY.md. Report vulnerabilities privately through GitHub Security Advisories.

License

MIT

Directories

Path Synopsis
cmd
ferry command
ferryd command
internal
cli

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL