FIleWire.io

FIleWire.io

FileWire.io is a peer-to-peer file-sharing tool I built using WebRTR. FireWire is intended to replace traditional tools used for sharing files like email, dropbox, USB flash drives, Google Drive, and other temporary file-sharing tools.

Features

FileWire can download and view simple files, it also can stream mp4 files by performing on-the-fly video fragmentation. FileWire can be run as a standalone file node js server or from entirely within the browser. The entire codebase has been specifically written to be isomorphic JavaScript.

Extra Features

  • Share Files of Any Size
  • Temporary
  • Accessible via the Internet
  • No Network Configuration Required
  • Simple Web Interface
  • Built-in File Viewer
  • Shareable Links
  • High-throughput (Upto 25.4MB/s in testing)

FileWire.io’s Communications Protocols

The three primary technologies underpinning FileWire are HTTP, WebSocket and WebRTC.

Diagram

Description automatically generated

HTTPS - Used to provide source files when using FileWire in a web browser.

WebSocket - Used for WebRTC signaling, allow communication between clients via the Signalling Server.

WebRTC - Web-based peer-to-peer communication protocol, responsible for moving data between clients.


FileWire.io's Development Environment

Language - FileWire was written in TypeScript and JavaScript and supports running both in node and in the browser.

Project Structure - The project is structured as a monorepo and is managed by Lerna using Git for version control and uses npm for the package manager.

Web Client - The FileWire web client was built using React and Material UI and uses icons from Font Awesome.

Build Tools - Most of the project building is done by the TypeScript compiler and Webpack but Babel and Browserify were used a lot during the development for quickly testing things out.

Libraries

  • Express – HTTP server
  • MP4Box.Js – MP4 fragmentation library
  • ws – A Node.js WebSocket library
  • node-webrtc – Node.js native WebRTC
  • StreamSaver.js – Stream download/write files
  • ts-node-dev – Automatically rebuild and start on file change

Limitations of FileWire.io

Transfer Speed – WebRTC, real-time communication, was not designed with transfer speed in mind. It was primarily designed for low-latency applications such as video and audio streaming.

Performance Overhead - WebRTC has a much greater performance overhead when compared to traditional HTTP downloads.

Media Playback - Playing back some types of media, especially videos require specific formats and codecs, unfortunately in some situations, it’s currently impossible to view some types of media.


Screenshots

Viewing PDFs
Streaming Video
File Browsing