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

♻ A simple and efficient Gemini-to-HTTP proxy written in Rust.

September A simple and efficient Gemini-to-HTTP proxy written in Rust. Usage Docker $ docker run -d [ -e ROOT="gemini://fuwn.me" ] [ -e PORT="8080"] [

A tcp over http2 + tls proxy

mtunnel A tcp over http2 + tls proxy. Usage 1. get certificates, by following steps. 2. make your config client config: { "local_addr": "127.0.0.1

🤖 brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers

brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers (plain text data). That is, although it can be accessed from a browser, brwrs will not correctly interpret the browser's GET request.

A small utility to wake computers up or put them to sleep over the local network

WKSL - a wake and sleep utility An experiment in writing a small CLI utility in Rust. The program lets you wake a machine on your local network up fro

MQTT over QUIC
MQTT over QUIC

MQuicTT 🚧 This is a pre-alpha project, tread carefully 🚧 A rustlang utility/library for MQTT over QUIC. QUIC allows us to send data over multiple co

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

null 1.8k Jan 6, 2023
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.

Aram Peres 629 Jan 4, 2023
⏱ 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

Alisue 12 Dec 16, 2022
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.

RustDesk 35.4k Jan 4, 2023