Introduced the project rars, which develops a free implementation of tools for the RAR format, written in the Rust language and supporting not only unpacking, but also the creation of RAR archives. The toolkit supports both early RAR 1.3/1.4 formats with the “RE~^” signature, and the latest version of RAR 7. Advanced operations are available such as partitioning into volumes, password protection, header encryption, comment attachment, RARVM filters, indexes for quick opening and mechanisms for recovering damaged data. The code is distributed under the MIT and Apache-2.0 licenses. Based on the library PyO3, bindings for the Python language have been prepared that implement a rarfile-style API for viewing, testing and extracting archives, as well as a RarBuilder-style API for creating or repacking archives.
The peculiarity of the project is that it implements work with the RAR format without using utility code unrar, distributed under a non-free license, which prohibits the use of the unrar code to recreate the RAR compression algorithm or develop a RAR-compatible archiver. Because of this limitation, most free archivers were limited only to the functions of unpacking RAR files, and to create RAR archives it was necessary to use proprietary tools from RARLAB.
A repository was created separately rar-research which publishes specifications for the RAR 1.3/1.4, RAR 1.5-4.x and RAR 5.0/7.0 formats, as well as notes on the algorithms used, filters, methods for checking and restoring integrity, encryption, partitioning into volumes and protection mechanisms. Since there was no official full specification at the time of the creation of the rars project, the documentation was recreated using unpacker code, old implementations, test archives and analysis of binary versions of RAR for DOS and Windows.
The implementation was created using AI tools OpenAI Codex 5.5 and Claude Opus 4.7 in my spare time in about five weeks. At the first stage, the models were used to systematize information about the format and fill gaps in the description, after which code in the Rust language was generated using the restored specification. To clarify the specification and hone the implementation, testing of work on real archives and comparison with reference implementations was used.