Skip to content

Commit

Permalink
Restructured readme
Browse files Browse the repository at this point in the history
  • Loading branch information
ikatson committed Nov 22, 2023
1 parent 6a0e08a commit 01ee968
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 34 deletions.
56 changes: 30 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,11 @@
![crates.io](https://img.shields.io/crates/v/rqbit.svg)
![crates.io](https://img.shields.io/crates/v/librqbit.svg)
![docs.rs](https://img.shields.io/docsrs/rqbit.svg)

# rqbit - bittorrent client in Rust

**rqbit** is a bittorrent client written in Rust.

## Motivation

First of all, I love Rust. The project was created purely for the fun of the process of writing code in Rust.

I was not satisfied with my regular bittorrent client, and was wondering how much work would it be to create a new one from scratch.

Got it to the point where it downloads torrents reliably and pretty fast, and I was using for a few months myself. It works good enough for me, and at the moment of writing this I'm not planning to extend it further.

So in short, it's not "feature complete", but rather "good enough for my use-cases".

Open sourced it just in case anyone might find it useful and/or wants to contribute.

## Installation

There are pre-built binaries in [releases](https://github.com/ikatson/rqbit/releases).
Expand Down Expand Up @@ -71,6 +63,7 @@ Use a regex here to select files by their names.
- Selective downloading using a regular expression for filename
- DHT support. Allows magnet links to work, and makes more peers available.
- HTTP API
- Web UI

### Code features
- Serde-based bencode serializer/deserializer
Expand All @@ -80,23 +73,11 @@ Use a regex here to select files by their names.
- No unsafe

### Bugs, missing features and other caveats
Below points are all easily fixable, PRs welcome.
PRs are very welcome.

- Doesn't survive switching networks, i.e. doesn't reconnect to a peer once the TCP connection is closed.
- Only supports BitTorrent V1 over TCP
- As this was created for personal needs, and for educational purposes, documentation, commit message quality etc. leave a lot to be desired.

## Code organization
- crates/rqbit - main binary
- crates/librqbit - main library
- crates/librqbit-core - torrent utils
- crates/bencode - bencode serializing/deserializing
- crates/buffers - wrappers around binary buffers
- crates/clone_to_owned - a trait to make something owned
- crates/sha1w - wrappers around sha1 libraries
- crates/peer_binary_protocol - the protocol to talk to peers
- crates/dht - Distributed Hash Table implementation

## HTTP API

By default it listens on http://127.0.0.1:3030.
Expand All @@ -112,7 +93,8 @@ By default it listens on http://127.0.0.1:3030.
"GET /torrents/{index}": "Torrent details",
"GET /torrents/{index}/haves": "The bitfield of have pieces",
"GET /torrents/{index}/stats": "Torrent stats",
"POST /torrents/": "Add a torrent here. magnet: or http:// or a local file."
"POST /torrents/": "Add a torrent here. magnet: or http:// or a local file.",
"GET /web/": "Web UI"
}
}

Expand All @@ -133,3 +115,25 @@ Supported query parameters, all optional:
- only_files_regex - the regular expression string to match filenames
- output_folder - the folder to download to. If not specified, defaults to the one that rqbit server started with
- list_only=true|false - if you want to just list the files in the torrent instead of downloading

## Web UI
Access with http://localhost:3030/web/

<img width="1165" alt="Web UI" src="https://github.com/ikatson/rqbit/assets/221386/3854c1d6-94ee-4416-8af5-7ede6cd2047a">

## Code organization
- crates/rqbit - main binary
- crates/librqbit - main library
- crates/librqbit-core - torrent utils
- crates/bencode - bencode serializing/deserializing
- crates/buffers - wrappers around binary buffers
- crates/clone_to_owned - a trait to make something owned
- crates/sha1w - wrappers around sha1 libraries
- crates/peer_binary_protocol - the protocol to talk to peers
- crates/dht - Distributed Hash Table implementation

## Motivation

First of all, I love Rust. The project was created purely for the fun of the process of writing code in Rust.

I was not satisfied with my regular bittorrent client, and was wondering how much work would it be to create a new one from scratch, and it got where it is, starting from bencode protocol implemenation, then peer protocol, etc, etc.
8 changes: 0 additions & 8 deletions crates/librqbit/webui/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -394,14 +394,6 @@ const Buttons = () => {
);
};

const LastErrors = (props: { lastErrors: Array<ErrorType> }) => {
return <div>
{props.lastErrors.map((e: ErrorType) => (
<div className="alert alert-primary" role="alert"></div>
))}
</div>
}

const RootContent = (props: { closeableError: ErrorType, otherError: ErrorType, torrents: Array<TorrentId>, torrentsLoading: boolean }) => {
let ctx = useContext(AppContext);
return <>
Expand Down

0 comments on commit 01ee968

Please sign in to comment.