mongotar (huMONGOus TAR)
Files to prompt, and back.
A simple tool for serializing and deserializing files (with permissions and
.gitignore exclusion) into a human-readable text file.
Inspired by GNU tar, Go's
txtar, and
files-to-prompt. mongotar
bundles files into a single, human-readable text file. Unlike most "codebase
to prompt" tools, it can reliably turn that text file back into files.
To achieve that, and unlike other "plain-text archive" formats, it stores
basic user file permissions (rw/rwx) together with the file paths.
mongotar 101
$ mongotar src/ config.txt project.mongotar
Successfully serialized items to 'project.mongotar'
$ cat project.mongotar
--- config.txt --- rw
debug=true
--- src/main.py --- rw
print("hello")
$ mongotar -d -f project.mongotar .
Successfully deserialized 'project.mongotar' to '.'
Why mongotar?
mongotar is at the intersection of two different tool categories:
-
Dump a repo into one blob for sending to an LLM. This is the space of players such as: Repomix, gitingest, files-to-prompt, and code2prompt. Unlike the first two,
mongotaris less "full repo serialization", and has good UX for hand picking which files to serialize. None of them round-trips likemongotar, which can be useful for some LLM workflows (see later). -
Plain-text archive formats. This is the space of tools like
txtarandshar.mongotar's differentiator here is its simultaneous focus on round-tripping, human-readability, and.gitignoresupport.
mongotar follows UNIX-philosophy, and deliberately has no LLM-specific
features baked in. Those features are to be built on top of this small core
(700 LOC).
What motivated mongotar was agentic use cases. Say, a skill composes a
problem description and appends relevant files to it without loading them
into the agent's context, and sends them to another LLM. If the other LLM
hands back a complete set of modified files, it can be deserialized back
into the file system (rather than a diff that may not apply cleanly).
Indeed, diff formats are known to be fragile against LLM output, so whole-file output tends to be more reliable.
In short:
| Tool | Human readable | Round-trip | Selective files | Permissions | .gitignore |
|---|---|---|---|---|---|
tar |
❌ | ✅ | ✅ | ✅ | ✅ |
txtar |
✅ | ✅ | limited | ❌ | ❌ |
| repo-to-prompt tools | ✅ | generally ❌ | varies | ❌ | ✅ |
mongotar |
✅ | ✅ | ✅ | simplified ✅ | ✅ |
Some Features
- Library: Besides CLI,
mongotarcan be imported and used directly in Python projects. - Safe Deserialization: By default, does not overwrite existing files. Use
-f/--forceto enable overwriting. - VCS Exclusion: Version-control directories (
.git,.svn,.hg,CVS, ...) are always excluded. Optional-e/--exclude-vcsadditionally respects.gitignorefiles, with git precedence. - Pattern Exclusion:
--exclude=PATTERNskips paths matching a glob-style pattern, like GNU tar's--exclude.
The default file extension is .mongotar, but any extension can be used. You
can even pipe to stdout.
Format
Free text before the first file header is an optional comment section.
--- path/to/file.txt --- rw
This is the content of the first file.
It can span multiple lines.
--- path/to/another/script.sh --- rwx
#!/bin/bash
echo "Hello from the script!"
--- empty_file.txt --- rw
--- path/to/file2.txt --- rw
Content of the second file.
- Header format:
--- <filepath> --- <permission> - Separator: Two newlines (
\n\n) separates the content of one file from the header of the next.
Example
Suppose you have a directory structure like this:
my_project/
├── main.py
├── config.txt
└── scripts/
└── run.sh (executable)
Running mongotar my_project my_project.mongotar produces:
--- my_project/main.py --- rw
print("hello")
--- my_project/config.txt --- rw
debug=true
--- my_project/scripts/run.sh --- rwx
#!/bin/bash
echo "running"
Running mongotar -d -f my_project.mongotar . recreates the same tree, with
run.sh restored as executable.
Installation
Requires Python 3.14+.
pip install mongotar
After installation, the mongotar command will be available in your PATH.
Or from source:
git clone https://github.com/sebastiancarlos/mongotar
cd mongotar
uv tool install .
Usage (mongotar CLI)
mongotar path/to/file_or_directory [path/to/another ...] output.mongotar
-d/--deserialize: Deserialize an archive back into a directory.
mongotar -d my_project.mongotar output_dir/
-e/--exclude-vcs: makes .gitignore rules apply.
mongotar -e src/ my_project.mongotar
--exclude PATTERN:
mongotar --exclude '*.log' --exclude '*/build' src/ my_project.mongotar
Output to stdout: use - as the output path.
mongotar src/ config.txt - > my_project.mongotar
Limitations
- Permissions Model: Only user permissions are stored and restored (
rworrwx). Group/other permissions are ignored during serialization and not set during deserialization. - Binary Files: Not designed for binary files. Files with non-UTF-8 characters will be skipped.
- Cross-platform: Windows supported, but everything serializes as
rw(Windows has no concept of executable permissions). - No symlink support: Symlinks are not supported and will be ignored during serialization (with a warning).
- Header collision: The archive format has no escaping (matching
txtarbehavior). Serialization will skip any file whose content contains a line matching the header format (--- path/to/file --- rw), logging a warning (rare case anyway).
Why not just use Repomix/gitingest/etc?
Those tools tend to encompass the entire pipeline of generating a prompt.
mongotar's output is meant to be a component you embed inside a message, and
which you can turn back into real files.
If you just want to paste your entire repo into ChatGPT once, use Repomix or gitingest. They're better at that.
mongotar's closest relative is
files-to-prompt, which shares
the simple, "Unix CLI" philosophy. The notable difference is deserialization.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mongotar-0.1.2.tar.gz.
File metadata
- Download URL: mongotar-0.1.2.tar.gz
- Upload date:
- Size: 68.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0355a23fc4cd8b9e676234057fe8390efc660eb703a7f7de3f6c1633410bb5cd
|
|
| MD5 |
a8a6a9cd0f5e5491d228b9b384c35f53
|
|
| BLAKE2b-256 |
a7d34ad6c022615db3e115035271f91430cc53df164eb194341772a6d03b00c7
|
File details
Details for the file mongotar-0.1.2-py3-none-any.whl.
File metadata
- Download URL: mongotar-0.1.2-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ab3d193cdf570e10ae10690147fd6f0548755aa32c352a7503b2d73379ac694
|
|
| MD5 |
7aa8512135cbb7f84a388a3f461aec75
|
|
| BLAKE2b-256 |
2136074da720ed33d77ab3fcd180713b2d211013b6e3d5bf917aacf4bbd76c0f
|