arkanaos package manager architecture

/notes/arkanaos-package-manager/
Created: 2026-07-29 00:00
Edited: 2026-07-30 03:41
Commit: simple edition:tm:

format & structure

an .ark package is literally just an lz4-compressed tar archive with the extension changed to .ark. decided to keep it simple instead of writing a custom binary format from scratch.

no config file. no remote repositories or pacman -Sy. just local install, remove, list, and search.

everything is plain text.
/etc/arkpkg/package.db
list of installed packages

/etc/arkpkg/packages/<package>.arkinfo
installed package information

<package>.tar.lz4
actual package archive

package contents

inside an .ark file (like bash-5.3.0-x86_64.ark):

bash-5.3.0-x86_64.ark
│
└── lz4 container
    │
    └── tar Archive
        │
        ├── ARKPKG          ← metadata
        └── package/        ← filesystem to install
             ├── usr/
             ├── etc/
             ├── var/
             └── ...

metadata

the ARKPKG file contains simple metadata. looks something like this:

Name: bash
Version: 5.3.0
Release: 1
Arch: x86_64
License: GPL-3.0-or-later
Homepage: https://www.gnu.org/software/bash/
Description: GNU Bourne Again SHell
Dependencies:
    glibc>=2.42
Provides:
    sh
Conflicts:
    busybox

installed info

after installing, /etc/arkpkg/packages/<package name>.arkinfo gets generated. contains all the standard info:

Name: bash
Version: 5.3.0
InstalledAt: 2026-07-30T15:42:19Z

Files:
/usr/bin/bash
/usr/bin/rbash
/etc/bash.bashrc

Checksums:
4fd0...  /usr/bin/bash
73ab...  /usr/bin/rbash
8cf2...  /etc/bash.bashrc

how to inspect

because it’s just lz4 + tar, you don’t even need the package manager to look inside:

lz4 -dc bash-5.3.0-x86_64.ark | tar -tvf -

no custom unpacker required. very easy to debug and maintain.

language

wrote it in rust. python is too slow, go binaries are too heavy (~40mb). rust is fast, safe, and i already know it.

arkpkg repo: https://github.com/arkana-team/arkpkg
arkana team: https://github.com/arkana-team