# 4q

> the 4q archive format

Latest version **0.6.0** (published 2015-01-11) · 0 weekly downloads

## Install

```sh
npm install 4q
pnpm add 4q
yarn add 4q
bun add 4q
```

Provides the commands `qls`, `qpack`, `qunpack`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.6.0 |
| Published | 2015-01-11 |
| First published | 2014-12-01 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 10 |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | Robey Pointer |
| Maintainers | robey |
| Keywords | archive |

## Links

- npm: https://www.npmjs.com/package/4q
- Repository: https://github.com/robey/4q
- Issues: https://github.com/robey/4q/issues
- npm.io page: https://npm.io/package/4q

## Dependencies (10)

- [xz](https://npm.io/package/xz.md) ^1.0.1
- [antsy](https://npm.io/package/antsy.md) *
- [errno](https://npm.io/package/errno.md) *
- [posix](https://npm.io/package/posix.md) ^1.0.3
- [snappy](https://npm.io/package/snappy.md) *
- [sprintf](https://npm.io/package/sprintf.md) *
- [bluebird](https://npm.io/package/bluebird.md) *
- [minimist](https://npm.io/package/minimist.md) *
- [strftime](https://npm.io/package/strftime.md) *
- [stream-toolkit](https://npm.io/package/stream-toolkit.md) ^2.0.0

## Alternatives

- [lodash.startswith](https://npm.io/package/lodash.startswith.md) — 769.7K weekly downloads
- [@tarojs/service](https://npm.io/package/@tarojs/service.md) — 33.9K weekly downloads
- [io.extendreality.tilia.indicators.spatialtargets.unity](https://npm.io/package/io.extendreality.tilia.indicators.spatialtargets.unity.md) — 131 weekly downloads
- [@rtarojs/taro](https://npm.io/package/@rtarojs/taro.md) — 90 weekly downloads
- [node-branch-io](https://npm.io/package/node-branch-io.md) — 50 weekly downloads

## Recent versions

- 0.6.0 (latest) — 2015-01-11
- 0.5.0 — 2014-12-01

## README

# 4Q

4Q: the final archive format.

4Q is a data & file format for archiving collections of files & folders, like "tar", "zip", and "winrar". Its primary differentiating features are:

- All important unix/posix attributes are preserved (owner, group, permissions, create/modify timestamps).
- The format is streamable: Files may be unpacked as an archive is read, and an archive may be written with minimal buffering.
- Compression may occur per-file or over the whole archive, using snappy (very fast) or LZMA2 (very compact).
- Modern crypto is used: SHA-512 for verification, and AES-256 for encryption. Encryption uses the keybase.io registry (and library).

## Status

As of today (January 2015), I'm pretty satisfied with the data format, so it's unlikely to change, but I reserve the right to make some last-minute adjustments over the next few months if I feel they're necessary. When I bump the version to 1.0, I'll promise not to change the underlying data format anymore, which should ensure all archive files are supported from then on.

There are some missing features that I'd like (listed in the TODO section below). Most are small things, but being able to (cryptographically) sign an archive is one feature I'd like to finish before declaring 1.0 victory. If you have any pet features (or bugs) that you consider a hard requirement, let me know, so I can take that into consideration.

## Usage

All of the command-line tools respond to `--help`.

To create an archive of the folder `myfiles`, called `myfiles.4q`:

    $ qpack myfiles

To encrypt a folder of source code for keybase user robey, into an archive named `secret.4q`:

    $ qpack -e robey -o secret.4q src/main/wibble/

To list the files in an archive called `myfiles.4q`:

    $ qls myfiles.4q

To unpack the archive `secret.4q` into a new temporary folder:

    $ qunpack secret.4q -o temp

## TODO

- signed bottles
- support symbolic links
- force-overwrite mode for qunpack
- qunpack should preserve ownership by default when running as root
- qunpack should have an option to ignore ownership, and one to ignore permissions
- sparse files

---
_Source: https://npm.io/package/4q · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
