Awesome Open Source
Awesome Open Source

🌊⛴️ Boaty

A peer-2-peer cli boat - or client, will work with webtorrent and dat

Run

How to run it ? - Hope to release it packaged to brew soon

git clone https://github.com/thcolin/boaty.git && cd boaty
cp config.default.json config.json
npm run install
npm run webtorrent:daemon #[-- --quiet --port=9876]
# in an other terminal
npm run build
./bin/boaty #[...params]

Params

See below all available params:

boaty #[...params]
  --config=./config.json # path to config.json
  --webtorrent-host=localhost # webtorrent daemon host
  --webtorrent-port=9876 # webtorrent daemon port
  --webtorrent-sftp-user=me # webtorrent sftp user (for Files open)
  --webtorrent-sftp-port=22 # webtorrent sftp port (for Files open)

Panes

See below for available panes:

  • [x] WebTorrent (@boaty/webtorrent)
    • [x] List
    • [x] Details
    • [x] Files
    • [x] Release
    • [x] Pieces (blocks like FlashGet ❤️)
    • [x] Actions
      • [x] Pause/Resume
      • [x] Open
      • [x] Delete
      • [x] Erase
    • [x] Open-Push (magnet/.torrent to distant daemon)
    • [ ] Stream / Cast (see webtorrent/webtorrent-cli
      • AirPlay
      • Chromecast
      • Kodi (XBMC)
      • VLC
    • [ ] Speeds (cf. vtop diagram)
      • Use sparkline blessed-contrib type ?
    • [ ] Configuration (?)
  • [ ] Dat (@boaty/dat)
    • [ ] List
    • [ ] Details
    • [ ] Actions (pause-resume/open/delete/erase)
  • [ ] TMDB (or SensCritique) (@boaty/?)
  • [ ] Trackers (@boaty/?)
    • [ ] YGG
    • [ ] ABN

Configuration

You can customize your configuration in config.json file:

{
  // Prefixed configuration for package
  "@boaty/boat": {
    // Customize boat "workspace" with JSX components
    "workspace": [
      {
        "component": "@boaty/webtorrent", // use "component" key to import custom component
        "props": {
          "key": "pane-webtorrent" // don't forget "key" props to avoid warning !
        }
      }
      // {
      //   "type": "box", // use "type" key for default blessed component
      //   "props": {
      //     "top": 1,
      //     "key": "lol"
      //   },
      //   "children": "Hello World !"
      // }
    ]
  },
  "@boaty/webtorrent": {
    "pane": {
      "open-homedir": "/tmp/webtorrent/watch"
    },
    "daemon": {
      "download-dir": "/tmp/webtorrent/done",
      "watch-dir": "/tmp/webtorrent/watch",
      "watch-delete": true
    }
  }
}

Keys

  • Tab: Switch between tiles (use Shift key for opposite direction)
  • ↓↑: Move
  • o: Open import modal (push local .torrent file(s) to daemon)
  • Enter: Open (folders and files in Files tile, and path in Torrents)
  • Space: Pause / Resume (torrent in Torrents)
  • Backspace: Remove (torrent in Torrents)
  • Delete: Delete (torrent in Torrents)
  • Esc: Close modal
  • C-c|q: Quit

About

  • Footer:
    • ⛅ Online / ⛈️ Offline

Help

  • Rendering screenshot.svg from asciinema: svg-term --cast=CAST_ID --out screenshot.svg --term=iterm2 --profile=~/.itermcolors --window

Inspiration

Roadmap

  • Implement standardjs
  • Write tests
  • Improve config.json
    • @boaty/webtorrent
      • [x] download-dir
      • [ ] download-subfolder
        • should have torrent.name on webtorrent.add(uri, { path }) (complicated)
      • [ ] incomplete-dir
        • should listen for torrent.on('done') and edit all torrent.files.*.path (complicated)
      • [x] watch-dir
      • [x] watch-delete
      • [ ] speed-limit-download
        • not available in webtorrent currently (complicated)
      • [ ] speed-limit-upload
        • not available in webtorrent currently (complicated)
      • [ ] queue-size-download
        • should implement queue system watching for every torrent.on('done') (workable)
      • [ ] queue-size-seed
        • should implement queue system watching for every daemon.on('pause', torrent) (workable)
      • [ ] blocklist-url
      • [ ] chmod
        • should listen for torrent.on('done') and chmod torrent.path (workable)
      • [ ] ratio-limit
        • should listen for torrent.on('upload') until limit and then torrent.pause() (workable)
  • @boaty/webtorrent
    • Fix ducks.torrents.selected on actions.ENHANCE_TORRENTS
    • Use docker to daemonize daemon
    • Handle magnet daemon.import
    • Confirm modal on torrents.delete and torrents.remove
    • Investigate for stucked torrents on daemon.import
    • Improve redux & websocket integration with Redux WebSocket Integration
    • Look at Writing a BitTorrent Client
    • Files should be able to open distant (host !== 'localhost') files
    • Daemon should save torrents state (stoped) and load it on boot
    • Should send FILL_TORRENTS every 10s to force update
    • Keep Daemon:torrents index order on pause() and resume()

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Javascript (1,552,087) 
Reactjs (72,503) 
Cli (15,390) 
Downloader (1,805) 
P2p (1,484) 
Ncurses (431) 
Download Manager (230) 
Dat (152) 
Webtorrent (140) 
Related Projects
Advertising 📦 9
All Projects
Application Programming Interfaces 📦 120
Applications 📦 181
Artificial Intelligence 📦 72
Blockchain 📦 70
Build Tools 📦 111
Cloud Computing 📦 79
Code Quality 📦 28
Collaboration 📦 30
Command Line Interface 📦 48
Community 📦 81
Companies 📦 60
Compilers 📦 60
Computer Science 📦 74
Configuration Management 📦 39
Content Management 📦 167
Control Flow 📦 197
Data Formats 📦 77
Data Processing 📦 266
Data Storage 📦 132
Economics 📦 60
Frameworks 📦 198
Games 📦 122
Graphics 📦 103
Hardware 📦 148
Integrated Development Environments 📦 47
Learning Resources 📦 147
Legal 📦 28
Libraries 📦 119
Lists Of Projects 📦 21
Machine Learning 📦 336
Mapping 📦 61
Marketing 📦 15
Mathematics 📦 55
Media 📦 228
Messaging 📦 97
Networking 📦 304
Operating Systems 📦 84
Operations 📦 120
Package Managers 📦 52
Programming Languages 📦 229
Runtime Environments 📦 96
Science 📦 42
Security 📦 375
Social Media 📦 26
Software Architecture 📦 70
Software Development 📦 68
Software Performance 📦 57
Software Quality 📦 127
Text Editors 📦 45
Text Processing 📦 131
User Interface 📦 310
User Interface Components 📦 465
Version Control 📦 29
Virtualization 📦 68
Web Browsers 📦 38
Web Servers 📦 25
Web User Interface 📦 194