Skip to main content
#21

Hour Share

Share files & text across devices via QR code — no internet, no login. Features password protection, automatic 60-minute cleanup, TUI control menu, and OS auto-start daemon.

JavaScriptNode.jsPythonFlaskQR CodeLocal ShareUtilityOpen Source
<p align="center"> <img src="https://raw.githubusercontent.com/Curzyori/hour-share/main/images/desktop-preview.png" alt="Hour Share Desktop Dashboard" width="800"/> </p> <p align="center"> <img src="https://raw.githubusercontent.com/Curzyori/hour-share/main/images/logo.png" alt="Hour Share Logo" width="120"/> </p> <h1 align="center">Hour Share</h1> <p align="center"> <strong>Share Files & Text Across Devices via QR Code - No Internet, No Login</strong> </p> <p align="center"> <a href="https://hour-share.curzy.dev"><strong>🌐 Live Website</strong></a> </p> <div align="center">

Stars Forks Downloads License Platform

</div> <p align="center"> <a href="#why-hour-share">Why This</a> · <a href="#key-features">Features</a> · <a href="#architecture">Architecture</a> · <a href="#tech-stack">Tech Stack</a> · <a href="#quick-start">Quick Start</a> · <a href="#installation">Installation</a> · <a href="#cli-flags">CLI Flags</a> · <a href="#api-endpoints">API</a> · <a href="#preview">Preview</a> · <a href="#support">Support</a> · <a href="#license">License</a> </p> <p align="center">🌐 In 4 languages - <a href="README.md"><b>🇺🇸 EN</b></a> · <a href="README_ID.md">🇮🇩 ID</a> · <a href="README_CN.md">🇨🇳 CN</a> · <a href="README_JP.md">🇯🇵 JP</a> </p>

Why Hour Share?

Transferring files between devices on the same local network is unnecessarily difficult:

  • Finding IP addresses and typing them manually on a phone is error-prone.
  • Cloud storage or WhatsApp requires internet and an account.
  • USB cables are overkill for quick, one-time file transfers.

Hour Share solves this: launch the CLI, scan the QR code, and share files or text instantly - password-protected and auto-expiring after 60 minutes.

Instant ConnectScan QR, opens directly on your phone. No more typing IP addresses.
🔒 Password ProtectedEvery bundle is secured with bcrypt password hashing.
📱 No Internet RequiredWorks entirely over local Wi-Fi. Zero data leaves your network.
Auto-ExpireFiles and text delete automatically after 60 minutes.

✨ Key Features

FeatureStatusDescription
QR ConnectScan from phone, opens directly in browser
File UploadDrag & drop or select files. 100 MB limit per file
File DownloadOne-click download, password-gated
Text SharePaste text, code snippets, or links
Password Protectionbcrypt per bundle and per group
Auto-ExpireBackground sweeper removes expired items every 60 minutes
Check UpdateCLI checks npm registry for newer version
Group ChatReal-time file and text sharing within a group
i18n (EN/ID/CN/JP)4 languages toggle in the header
Dark/Light ModeTheme toggle in header, persistent preference
Auto StartOS-level auto-start (systemd / LaunchAgent / schtasks)

🛠️ Tech Stack

LayerTechnology
CLINode.js (vanilla, zero dependencies)
BackendPython 3.10+, Flask 3, bcrypt, qrcode[pil], Pillow
FrontendVanilla HTML/CSS/JS (no build step), inline SVG icons
StorageFile-based JSON (no database)
Distributionnpm global package + GitHub repository
LicenseMIT

🏗️ Architecture

hour-share/
├── bin/hourshare.js        # CLI: TUI menu, daemon spawn, auto-start
├── server.py               # Flask backend (file/text share, QR, auth, sweeper)
├── requirements.txt        # Python dependencies
├── templates/index.html    # Web dashboard (2-col grid, tabs, i18n, theme)
├── static/                 # Static assets (CSS/JS)
├── shared/                 # File storage + metadata JSON
│   ├── bundles/            # Uploaded file bundles (auto-expired)
│   └── groups/             # Group chat data
└── Auto-Start/             # OS service configs (systemd / LaunchAgent / schtasks)

🚀 Quick Start

Install the CLI globally (recommended):

npm install -g hourshare
hourshare
  1. Run hourshare in your terminal.
  2. Select Start from the menu:
========================================
  Hour Share (v1.0.3)
  🚀 Server: http://localhost:10101
========================================
 ★ Start (Open in Browser)           ○ Stopped
 ☆ Auto Start (Disable)           
 ☆ Check Update (Internet Require)
 ☆ Stop                           
 ☆ Exit                           
  ↑↓ navigate · Enter select · Esc/Ctrl+C exit
  1. Open the displayed local URL (like http://localhost:10101 or your local IP) in your browser on the same device, or scan the QR code from your phone.
  2. Enter a password and share files or text. To receive, enter the same password.

Auto Start: Select Auto Start from the menu to launch the server at login.


📦 Installation

<a href="https://github.com/Curzyori/hour-share/releases">Download from GitHub Releases</a> or build from source:

git clone https://github.com/Curzyori/hour-share.git
cd hour-share
pip install flask bcrypt qrcode[pil] pillow

Requirements:

  • Node.js >= 18
  • Python 3.10+ (Linux, macOS, Windows)
  • pip packages: flask, bcrypt, qrcode[pil], pillow

🎮 CLI Flags

hourshare                     # Interactive menu
hourshare --port 8080          # Custom port
hourshare --daemon             # Headless mode (no menu)
hourshare --help               # Show help

📡 API Endpoints

MethodPathFunction
GET/Web dashboard
GET/api/qrQR Code PNG
POST/api/sendUpload bundle (files + text + password)
POST/api/receiveAccess bundle with password
POST/api/group/joinJoin or create a group
GET/api/group/{name}/infoGroup info
POST/api/group/{name}/sendSend to group
GET/download/bundle/{id}/{filename}Download file (requires auth session)

🖼️ Preview

<table align="center"> <tr> <td align="center"><img src="https://raw.githubusercontent.com/Curzyori/hour-share/main/images/desktop-preview.png" alt="Desktop Dashboard" width="250"/></td> <td align="center"><img src="https://raw.githubusercontent.com/Curzyori/hour-share/main/images/mobile-preview.jpg" alt="Mobile Dashboard" width="250"/></td> </tr> <tr> <td align="center"><em>Desktop: Send / Receive / Group tabs</em></td> <td align="center"><em>Mobile: QR scan + tabbed panel</em></td> </tr> </table>

☕ Support

If you find this project useful, please consider giving it a ⭐ Star or 🍴 Forking it to show support and keep me motivated to build more exciting open-source projects! Every single star and fork means a lot.

Your donations keep my projects free and open source. Every contribution matters, and your support helps me continue building exciting open-source projects in the future.

<a href="https://donate.curzy.dev/">Support this project by buying me a coffee! 💝</a>

<a href="https://donate.curzy.dev/"> <img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" width="200" /> </a>

⚖️ License

This project is released under the MIT license - see <a href="LICENSE">LICENSE</a> for full text.

<p align="center"><sub>Built with passion as the 21st Project of the 50 Projects Challenge by **@Curzyori**</sub></p>