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.
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.