A simple cross-platform remote file management tool to upload and download files over HTTP/S

Overview

Downcat

A simple cross-platform remote file management tool to upload and download files over HTTP/S

πŸ“œ License ✨ Features πŸŽ‰ Install 🎁 Releases

Built with Rust Built with Vue Built with Typescript Built with TailwindCSS

✨ Features

⚑ Fast - Quick startup, performant API

✨ Easy to install - No dependancies, just one file

πŸ—‚ Upload and download files easily - Using HTTP/S with a sexy web UI

🌈 Cross platform - Windows, MacOS and Linux support

πŸŽ‰ Install

Automated install (Linux only)

⚠ You should not run scripts off the internet without checking them first. You can view the install script here.

You can run an automated install of downcat using the command below. It is highly recommended you run it as root to avoid any permissions-related problems.

curl -sSL https://raw.githubusercontent.com/sexnine/downcat/main/install/downcat_linux.sh | sudo bash

Manual install

  1. Download the latest binary from the releases tab
  2. Place it into your path
  3. Make it executable
  4. Run with downcat

πŸ€” Usage

Run downcat to serve your current directory and then open the link in your browser

~$ downcat
🐈 Starting downcat...

βœ… Downcat v0.2.0 running!
✨ Listening on http://192.168.0.23:3030/

See extra options by viewing the help with downcat -h or downcat --help

Downcat is not meant to be used as a web server. It is meant to be used as a quick and easy file management utility for when you quickly need to up/download a file from a server.

πŸ›  Development

πŸ“œ Prerequisites
NodeJS & NPM
Rust & Cargo
  • Clone the repo git clone https://github.com/sexnine/downcat.git
  • Go into the project's directory cd downcat/

βš™ Installing Dependancies

  • Go into the frontend directory cd frontend/
  • Install NPM dependancies with npm i
  • Rust dependencies will automatically install when building or running the project with cargo build & cargo run respectively.

β–Ά Running

Frontend

  • Go into the frontend directory cd frontend/
  • Run the dev server with npm run dev. The dev server supports hot reloading.
  • Modify the API endpoint in .env.development if you need to.

Note: While developing, the frontend and backend should be run seperately. When building a release version, the frontend's files will be embedded into the rust binary.

Backend

  • Simply run with cargo run in the project root.

πŸ— Building

  1. Build the frontend
    1. Go into the frontend directory cd frontend/
    2. Install dependancies if you haven't already with npm i
    3. Build the frontend with npm run build
  2. Build using cargo build --release

πŸ›£ Roadmap

  • Retrieve Files and Folders v0.1.0
    • Get metadata v0.1.0
    • Sort file list v0.1.0
    • Search file list
    • Enhanced File Icons
    • Download multiple files
    • Directory History v0.1.0
  • Uploading Files
    • Uploading Folders
  • Managing Files/Folders
    • Renaming
    • Deleting
    • Moving
    • Copying
  • SSL v0.2.0
    • Optionally enable SSL using --ssl flag
  • Password Authentication v0.1.0
  • Updater v0.2.0
    • Checks for updates v0.2.0
    • downcat update to perform a self-update v0.2.0
  • Cross Platform support
    • Windows
    • Linux untested
    • MacOS untested
  • Allow downcat to access any directory
    • With the --any flag, downcat will be able to access any directory or files it has permissions to

❀ Acknowledgements

  • @sc0tfree for the original inspiration for this project (updog)
  • @jethr0-1 (jethro#1547 on Discord) for making a Linux install script for downcat

Made with πŸ’– by sexnine

You might also like...
Stream & Download Cartoons & Animes

eren Stream & Download Cartoons & Animes Install Linux/Mac First of all install rust then git clone 'https://github.com/Based-Programmer/eren' && \ cd

Cross-platform, low level networking using the Rust programming language.

libpnet Linux βˆͺ OS X Build Status: Windows Build Status: Discussion and support: #libpnet on freenode / #rust-networking on irc.mozilla.org / #rust on

A cross-platform, user-space WireGuard port-forwarder that requires no system network configurations.

Cross-platform, user-space WireGuard port-forwarder that requires no system network configurations.

⏱ Cross-platform Prometheus style process metrics collector of metrics crate

⏱ metrics-process This crate provides Prometheus style process metrics collector of metrics crate for Linux, macOS, and Windows. Collector code is man

The best open source remote desktop software
The best open source remote desktop software

The best open-source remote desktop software, written in Rust. Works out of the box, no configuration required. Great alternative to TeamViewer and AnyDesk! You have full control of your data, with no concerns about security. You can use our rendezvous/relay server, set up your own, or write your own rendezvous/relay server.

Expose local age identities to remote machines via SSH

age-plugin-remote TBD Design Notes Proxy identities act as bearer tokens. A proxy identity is only "active" if the authority provides it when starting

Drpc-Correct, high performance, robust, easy use Remote invocation framework
Drpc-Correct, high performance, robust, easy use Remote invocation framework

Drpc - Correct, high performance, robust, easy use Remote invocation framework

Sanzu is a graphical remote desktop solution

Sanzu Sanzu is a graphical remote desktop solution. It is composed of: a server running on Unix or Windows which can stream a X11 or a Windows GUI env

Library + CLI-Tool to measure the TTFB (time to first byte) of HTTP requests. Additionally, this crate measures the times of DNS lookup, TCP connect and TLS handshake.

TTFB: CLI + Lib to Measure the TTFB of HTTP/1.1 Requests Similar to the network tab in Google Chrome or Mozilla Firefox, this crate helps you find the

Comments
  • Add build option to disable self-update entirely

    Add build option to disable self-update entirely

    A build option that will fully disable self-update and references to self-updating. This is necessary to make a docker build (#1) as self-updating won't be available in the docker build.

    enhancement help wanted 
    opened by sexnine 0
  • Loads whole file into memory while uploading to backend

    Loads whole file into memory while uploading to backend

    Especially when uploading large files on memory-limited systems, the backend will try allocating a lot of memory for the file and can panic if there is not enough memory, causing the upload to be incomplete and downcat to crash.

    For some reason, the file's data is not being freed from memory until the whole file has been written to disk.

    Possible solutions for this issue:

    • Freeing memory while parts of the file is written
    • Limiting the request so only a certain amount can be in memory at one time.

    Unfortunately, I've tried to implement these solutions but I'm too dumb to solve them :)

    bug help wanted 
    opened by sexnine 0
  • Unable to download more than 6 files at once.

    Unable to download more than 6 files at once.

    Unable to download more than 6 files at once, most likely due to not being enough threads, makes all other requests unresponsive which makes the app feel very slow and sometimes unable to navigate directories while downloading many files at once.

    Possible solutions might include:

    • Adding a download queue on the frontend.
    • Leaving at least 1 thread free from uploading and downloading so the backend is still responsive
    • Creating new threads for more downloads/uploads
    bug 
    opened by sexnine 0
Releases(v0.3.2)
Owner
sexnine
I don't know how to code.
sexnine
Download a file using multiple threads in parallel for faster download speeds.

multidl Download a file using multiple threads in parallel for faster download speeds. Uses 0 external dependencies. Usage Usage: multidl [--help] ADD

Divyanshu Agrawal 2 Sep 12, 2021
A simple web server(and library) to display server stats over HTTP and Websockets/SSE or stream it to other systems.

x-server-stats A simple web server(and library) to display server stats over HTTP and Websockets/SSE or stream it to other systems. x-server(in x-serv

Pratyaksh 11 Oct 17, 2022
A remote shell, TCP tunnel and HTTP proxy for Replit.

Autobahn A remote shell, TCP tunnel and HTTP proxy for Replit. Hybrid SSH/HTTP server for Replit. Based on leon332157/replish. Autobahn runs a WebSock

Patrick Winters 12 Sep 24, 2022
Send files over TCP. Quick and simple. Made in Rust.

SFT Multithreaded utility to send files over TCP. The sender writes a header containing the filename, and then the contents of the file, buffered, to

Orel 0 Dec 24, 2021
Bevy asset loader that transparently supports loading over http(s)

Bevy Web Asset This is a tiny crate that that wraps the standard bevy asset loader, and adds the ability to load assets from http and https urls. Supp

Johan Klokkhammer Helsing 28 Jan 2, 2023
GeoIP lookup server over HTTP.

geoip-http | geoip-http is a fast GeoIP lookup service in Rust, using the Axum web framework. It provides one possible server for tzupdate. Features F

Chris Down 4 Jun 3, 2023
πŸ“‘Proxy HTTP/1.1 requests over a sensitive point-to-point link

ptproxy Motivation What's this? Why do I need this? What's a sensitive network link? What's wrong with a VPN? What's wrong with HTTP[S]? What's wrong

Alba Mendez 5 Jul 26, 2023
A modern, simple TCP tunnel in Rust that exposes local ports to a remote server, bypassing standard NAT connection firewalls

bore A modern, simple TCP tunnel in Rust that exposes local ports to a remote server, bypassing standard NAT connection firewalls. That's all it does:

Eric Zhang 6.2k Dec 31, 2022
A high-performance, lightweight, and cross-platform QUIC library

TQUIC English | δΈ­ζ–‡ TQUIC is a high-performance, lightweight, and cross-platform library for the IETF QUIC protocol. Advantages High performance: TQUIC

Tencent 11 Oct 27, 2023
An end-to-end encrypted, anonymous IP-hiding, decentralized, audio/video/file sharing/offline messaging multi-device platform built for both communications and application security and performance.

An end-to-end encrypted, anonymous IP-hiding, decentralized, audio/video/file sharing/offline messaging multi-device platform built for both communications and application security and performance.

null 2 Apr 27, 2022