init commit

This commit is contained in:
MeexReay 2025-06-22 11:11:52 +03:00
commit b89c31ec48
14 changed files with 389 additions and 0 deletions

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
/Archive/** filter=lfs diff=lfs merge=lfs -text
* !text !filter !merge !diff

1
HOST_TEMPLATE.md Normal file
View File

@ -0,0 +1 @@
| {address} | {description} | {software} | {status} | {protocol} | {auth} |

13
LICENSE Normal file
View File

@ -0,0 +1,13 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

17
RACv1.99.md Normal file
View File

@ -0,0 +1,17 @@
# RACv1.99 Protocol
Message Retrieval
a. The client initiates a message retrieval session by sending the byte 0x00 to the server.
b. In response, the server transmits the size of the available messages as an ASCII-encoded string.
c. After receiving the size, the client must send one of the following bytes or close the connection:
i. Sending 0x01 instructs the server to transmit all messages in full.
ii. Sending 0x02 followed by the clients cached messages length (as an ASCII string, e.g., 0x02"1024") instructs the server to transmit only new messages added since the cached length. The server sends messages starting from the cached length offset, and the client updates its cached length to the total size received in step 1b after processing the new messages.
Message Transmission
a. To send a message, the client issues a request in the following format:
The client sends the byte 0x01 followed immediately by the message content. The server does not send a response.

19
RACv1.md Normal file
View File

@ -0,0 +1,19 @@
# RACv2.0 Protocol
## Message Retrieval
a. The client initiates a message retrieval session by sending the byte 0x00 to the server.
b. In response, the server transmits the size of the available messages as an ASCII-encoded string.
c. After receiving the size, the client must send one of the following bytes or close the connection:
i. Sending 0x01 instructs the server to transmit all messages in full.
ii. Sending 0x02 followed by the clients cached messages length (as an ASCII string, e.g., 0x02"1024") instructs the server to transmit only new messages added since the cached length. The server sends messages starting from the cached length offset, and the client updates its cached length to the total size received in step 1b after processing the new messages.
## Message Transmission
a. The client sends the byte 0x01 followed immediately by the message content. The server does not send a response.
Source: https://gitea.bedohswe.eu.org/pixtaded/crab#rac-protocol

45
RACv2.md Normal file
View File

@ -0,0 +1,45 @@
# RACv2.0 Protocol
## Message Retrieval
a. The client initiates a message retrieval session by sending the byte 0x00 to the server.
b. In response, the server transmits the size of the available messages as an ASCII-encoded string.
c. After receiving the size, the client must send one of the following bytes or close the connection:
i. Sending 0x01 instructs the server to transmit all messages in full.
ii. Sending 0x02 followed by the clients cached messages length (as an ASCII string, e.g., 0x02"1024") instructs the server to transmit only new messages added since the cached length. The server sends messages starting from the cached length offset, and the client updates its cached length to the total size received in step 1b after processing the new messages.
## Message Transmission
a. To send a message, the client issues a request in one of the following formats:
i. Unauthenticated Message: The client sends the byte 0x01 followed immediately by the message content. The server does not send a response.
ii. Authenticated Message: The client sends the byte 0x02 followed by the username, a newline character (\n), the password, a newline character and the message content. The server responds with a single byte:
0x01 indicates the user does not exist.
0x02 indicates the password is incorrect.
A successful authentication results in the server accepting the message without sending a response.
## User Registration
a. To register a new user, the client sends a request formatted as:
The byte 0x03.
The username, followed by a newline character (\n).
The password.
b. The server processes the request and responds with a single byte:
0x01 if the username already exists.
A successful registration is assumed if no error byte (0x01) is received. The client should close the connection after handling the response.
Source: https://gitea.bedohswe.eu.org/pixtaded/crab#rac-protocol

72
README.md Normal file
View File

@ -0,0 +1,72 @@
This repository provides an overview of software built around the RAC protocol — including clients, servers, and associated tools.
You're welcome to contribute by [sharing additional entries or information](https://github.com/MeexReay/RAC-Hub/pulls) to help expand this directory.
# Clients
| Title | Description | Author | Release | Status | Lang | RAC | WRAC |
| :---: | :---------: | :----: | :-----: | :----: | :--: | :-: | :--: |
| [bRAC](https://github.com/MeexReay/bRAC)[^1] | better RAC client (GUI) | MeexReay | [0.1.5+2.0](https://github.com/MeexReay/bRAC/releases/tag/0.1.5%2B2.0) | Active | Rust | v2.0 | v2.0 |
| [сRACk](https://github.com/pansangg/cRACk)[^5] | client for RAC kettles (TUI) | pansangg | [v2.0-beta](https://github.com/pansangg/cRACk/releases/tag/v2.0-beta) | Active | Python | v2.0 | ❌ |
| clRAC | The official RAC client | Mr. Sugoma | [2.0.1](https://wdfiles.ru/Ofx7) | Active | C | v2.0 | ❌ |
| [Mefedroniy](https://github.com/OctoBanon-Main/mefedroniy-client) | TUI client for RAC | OctoBanon | [v1.3.1+1.99.2](https://github.com/OctoBanon-Main/mefedroniy-client/releases/tag/v1.3.1%2B1.99.2) | Active | Rust | v1.99.2 | ❌ |
| [RAC.rs](https://github.com/kostya-zero/rac-rs) | Rust library for RAC client (used by [Tower](https://github.com/kostya-zero/tower)) | Kostya Zero | [0.1.0](https://crates.io/crates/rac_rs/0.1.0) | Active | Rust | v2.0 | v2.0 |
| [Tower](https://github.com/kostya-zero/tower) | GUI client for RAC developed using Tauri | Kostya Zero | ❌ | Active | Rust | v2.0 | v2.0 |
| [Snowdrop](https://github.com/Forbirdden/Snowdrop) | WRAC GUI client | Forbirdden | ❌ | Active | JavaScript | ❌ | v2.0 |
| [CRAB](https://gitea.bedohswe.eu.org/pixtaded/crab) | Bundle with both client and server | pixtaded | [2.0.0](https://gitea.bedohswe.eu.org/pixtaded/crab/releases/tag/2.0.0-snapshot-202502092015) | Frozen | Java | v1.99.2 | ❌ |
| [Dobroho Vechora](https://gitea.bedohswe.eu.org/bedohswe/dobroho_vechora) | The first open-source client | Bʰedoh₂ swé | [Source code](https://gitea.bedohswe.eu.org/bedohswe/dobroho_vechora/raw/branch/main/dobroho_vechora.bash) | Abandoned | Bash | v1.0[^2] | ❌ |
| lRAC | The first original RAC client using tkinter | Mr. Sugoma | [1.0.2](https://media.githubusercontent.com/media/MeexReay/RAC-Hub/refs/heads/main/Archive/lRAC/lrac_1.0.2.py) | Abandoned | Python | v1.0[^4] | ❌ |
<!-- | WebbyCRAB | Fork of CRAB that runs online using TeaVM | Forbirdden | ❌ | Abandoned | Java | v1.0, v1.99.2 | ❌ | -->
<!-- | WinRAC | GUI client for RAC developed using WinForms | cat8753 | | Abandoned | C# | v1.99.2 | ❌ | -->
[^1]: bRAC-0.1.3+2.0 requires GTK4 to be installed on Windows [(see more)](https://github.com/MeexReay/bRAC/releases/tag/0.1.3%2B2.0#user-content-window-gui-install)
[^2]: "_Я раньше хотел допилить его до v2, но мой bash код было трудно обновить_" - chunbyonga
[^5]: "_Не срал с утра или прошлого вечера, терпел ради cRACkа._" - pansangg
# Server software
| Title | Description | Author | Release | Status | Lang | RAC | WRAC |
| :---: | :---------: | :----: | :-----: | :----: | :--: | :-: | :--: |
| [sRAC](https://github.com/MeexReay/sRAC) | simple RAC server | MeexReay | [1.0.0](https://github.com/MeexReay/sRAC/releases) | Active | Rust | v2.0 | v2.0 |
| lRACd | The official RAC server | Mr. Sugoma | [2.0.9](https://wdfiles.ru/Obvt) | Active | C | v2.0 | ❌ |
| [CRAB](https://gitea.bedohswe.eu.org/pixtaded/crab) | Bundle with both client and server | pixtaded | [2.0.0](https://gitea.bedohswe.eu.org/pixtaded/crab/releases/tag/2.0.0-snapshot-202502092015) | Frozen | Java | v1.99.2 | ❌ |
| [AlmatyD](https://gitea.bedohswe.eu.org/bedohswe/almatyd) | Open source server | Bʰedoh₂ swé | [Source code](https://gitea.bedohswe.eu.org/bedohswe/almatyd) | Abandoned[^3] | TypeScript | v1.0 | ❌ |
<!-- | Gashishnik | WRAC server | OctoBanon | Soon... | In development | Rust | ❌ | v2.0 | -->
<!-- | WebbyCRAB | Fork of CRAB that runs online using TeaVM | Forbirdden | ❌ | Abandoned | Java | v1.99.2 | ❌ | -->
<!-- | Butter | Simple Node.js RAC server | Forbirdden | ❌ | Abandoned | JavaScript | v1.99.2, v2.0 | ❌ | -->
[^3]: "_Мне лень его допиливать. Если тебе зачем-то очень нужен RAC сервер, то ставь CRAB._" - chunbyonga
# Known servers
| Address | Description | Software | Status | Protocol | Auth |
| :------------------: | :-----------------------------------: | :--------------------------------------: | :----: | :-------: | :------: |
| 91.192.22.20:42666 | Official server by Mr. Sugoma | lRACd (2.0.9) | Active | RACv2.0 | Optional |
| meex.lol:11234 | WRACS tor proxy of 91.192.22.20:42666 | [sRAC](https://github.com/MeexReay/sRAC) | Active | WRACSv2.0 | Optional |
| meex.lol:42666 | RAC proxy of meex.lol:52667 | [sRAC](https://github.com/MeexReay/sRAC) | Active | RACv2.0 | Required |
| meex.lol:52667 | Official WRACS server | [sRAC](https://github.com/MeexReay/sRAC) | Active | WRACSv2.0 | Required |
# Protocol documentation
The following documents cover the structure, behavior, and expectations of RAC and WRAC protocols:
- [RACv1.0](RACv1.md)[^4]
- [RACv1.99.x](RACv1.99.md)
- [RACv2.0](RACv2.md)
- [WRACv2.0](WRAC.md)
- [Users additions](USERS_ADDITIONS.md)
[^4]: "_Про RAC 1 вообще забудь, это днище, его юзать нельзя._" - Mr. Sugoma
# See also
- [Project sources](https://github.com/MeexReay/RAC-Hub)
- [Historical archives](https://github.com/MeexReay/RAC-Hub-Archive)
<br>
[<img src="https://github.com/user-attachments/assets/f2be5caa-6246-4a6a-9bee-2b53086f9afb" height="50">]() [<img src="https://github.com/user-attachments/assets/4d35191d-1dbc-4391-a761-6ae7f76ba7af" height="50">]()
This project was inspired by the ideas from [The-Stratosphere-Solutions/RAC-Hub](https://github.com/The-Stratosphere-Solutions/RAC-Hub), but all text and documentation have been created independently.

48
README_TEMPLATE.md Normal file
View File

@ -0,0 +1,48 @@
Here you can find RAC clients, servers and more
You can help RAC Hub by [adding more information](https://github.com/MeexReay/RAC-Hub/pulls)
# Clients
| Title | Description | Author | Release | Status | Lang | RAC | WRAC |
| :---: | :---------: | :----: | :-----: | :----: | :--: | :-: | :--: |
{clients}
<!-- | WebbyCRAB | Fork of CRAB that runs online using TeaVM | Forbirdden | ❌ | Abandoned | Java | v1.0, v1.99.2 | ❌ | -->
<!-- | WinRAC | GUI client for RAC developed using WinForms | cat8753 | | Abandoned | C# | v1.99.2 | ❌ | -->
# Server software
| Title | Description | Author | Release | Status | Lang | RAC | WRAC |
| :---: | :---------: | :----: | :-----: | :----: | :--: | :-: | :--: |
{servers}
<!-- | Gashishnik | WRAC server | OctoBanon | Soon... | In development | Rust | ❌ | v2.0 | -->
<!-- | WebbyCRAB | Fork of CRAB that runs online using TeaVM | Forbirdden | ❌ | Abandoned | Java | v1.99.2 | ❌ | -->
<!-- | Butter | Simple Node.js RAC server | Forbirdden | ❌ | Abandoned | JavaScript | v1.99.2, v2.0 | ❌ | -->
# Known servers
| Address | Description | Software | Status | Protocol | Auth |
| :------------------: | :-----------------------------------: | :--------------------------------------: | :----: | :-------: | :------: |
{hosts}
# Protocol documentation
- [RACv1.0](RACv1.md)[^1]
- [RACv1.99.x](RACv1.99.md)
- [RACv2.0](RACv2.md)
- [WRACv2.0](WRAC.md)
- [Users additions](USERS_ADDITIONS.md)
# See also
- [Original RAC-Hub](https://github.com/The-Stratosphere-Solutions/RAC-Hub)
- [RAC-Hub github](https://github.com/MeexReay/RAC-Hub)
- [Archive](https://github.com/MeexReay/RAC-Hub/tree/main/Archive)
<br>
[<img src="https://github.com/user-attachments/assets/f2be5caa-6246-4a6a-9bee-2b53086f9afb" height="50">]() [<img src="https://github.com/user-attachments/assets/4d35191d-1dbc-4391-a761-6ae7f76ba7af" height="50">]()
{notes}

1
SOFTWARE_TEMPLATE.md Normal file
View File

@ -0,0 +1 @@
| {name} | {description} | {author} | {release} | {status} | {lang} | {rac_version} | {wrac_version} |

32
USERS_ADDITIONS.md Normal file
View File

@ -0,0 +1,32 @@
# Users additions
## Server info packet
Client sends:
- Byte `0x69`
Server sends:
- (nothing or closes socket if server doesn't support this feature)
- Protocol version:
- Byte `0x01` for RACv1
- Byte `0x02` for RACv1.99
- Byte `0x03` for RACv2
- Server name
## User agents
User agents in RAC is the way how to get know from what client the message was sent. It works by just checking the message text throught regex.
Here are listed the most common clients, and their common names colors in the chat.
| Client | Format | Regex | Color |
| :----: | :----: | :----: | :----: |
| [bRAC](https://github.com/MeexReay/bRAC) | 리㹰<{name}> {text} | `\uB9AC\u3E70<(.*?)> (.*)` | green
| [CRAB](https://gitea.bedohswe.eu.org/pixtaded/crab) | ═══<{name}> {text} | `\u2550\u2550\u2550<(.*?)> (.*)` | light red
| [Mefidroniy](https://github.com/OctoBanon-Main/mefedroniy-client) | °ʘ<{name}> {text} | `\u00B0\u0298<(.*?)> (.*)` | light magenta
| [cRACk](https://github.com/pansangg/cRACk) | ⁂<{name}> {text} | `\u2042<(.*?)> (.*)` | gold
| [Snowdrop](https://github.com/Forbirdden/Snowdrop) | ඞ<{name}> {text} | `\u0D9E<(.*?)> (.*)` | toxic green
| clRAC | <{name}> {text} | `<(.*?)> (.*)` | cyan

86
WRAC.md Normal file
View File

@ -0,0 +1,86 @@
# WRACv2.0 Protocol
Uses websocket for connections, and sends binary data only (works in packet-way manner)
Totally inherits all packets of RACv2, except of reading messages
## Sending messages
Client sends:
- Byte `0x01`
- Message text
## Sending authorized messages
Client sends:
- Byte `0x02`
- Username
- `\n`
- Password
- `\n`
- Message
Server sends:
- nothing if message was sent successfully
- `0x01` if the user does not exists
- `0x02` if the password is incorrect
## Registration users
Client sends:
- Byte `0x03`
- Username
- `\n`
- Password
Server sends:
- nothing if user was registered successfully
- `0x01` if the username is already taken
## Reading messages
### Getting message length
Client sends:
- Byte `0x00`
Server sends:
- Size of all messages in ASCII (data_size)
### Normal reading
This packet is independent from getting message length packet.
Client sends:
- Byte `0x00`
- Byte `0x01`
Server sends:
- All messages
### Chunked reading
This packet is independent from getting message length packet.
Client sends:
- Byte `0x00`
- Byte `0x02`
- Size of messages you have in ASCII (last_size)
Server sends:
- All new messages
*for example: if you want to read last N bytes, last_size = data_size - N*
Source: https://github.com/MeexReay/bRAC/blob/main/docs/wrac.md

View File

@ -0,0 +1 @@
<link rel="stylesheet" href="style.css">

28
mkreadme.py Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env python3
# from typing import Optional
# from enum import Enum
# class
# def read_template(name):
# return open(name.upper()+"_TEMPLATE.md", "r", encoding="utf8").read()
# SOFTWARE_TEMPLATE = read_template("software")
# HOST_TEMPLATE = read_template("host")
# README_TEMPLATE = read_template("readme")
# def software(
# name: str | (str, str),
# description: str,
# author: str,
# release: Optional[(str, str)],
# status: str,
# lang: str,
# rac_version: Optional[str],
# wrac_version: Optional[str],
# note: Optional[str]
# ):
# pass

24
style.css Normal file
View File

@ -0,0 +1,24 @@
@import "https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.6.1/github-markdown.min.css";
body {
margin: 0;
}
@media (prefers-color-scheme: light) {
body {
background-color: #ffffff;
}
}
@media (prefers-color-scheme: dark) {
body {
background-color: #0d1117;
}
}
.markdown-body {
box-sizing: border-box;
min-width: 200px;
max-width: 980px;
margin: 0 auto;
}