Skip to main content

Flavor Pack packaging system implementing Progressive Secure Package Format (PSPF/2025)

Project description

🌶️📦 Flavor Pack: Your Yummy Progressive Secure Polyglot Packaging Toolchain

Python 3.11+ Go 1.21+ Rust 1.75+ CI Pipeline

Flavor Pack (flavorpack) is a cross-language packaging system that creates self-contained, portable executables using the Progressive Secure Package Format (PSPF) 2025 Edition. It enables you to ship Python applications as single binaries that "just work" - no installation, no dependencies, no configuration required.

🎯 Key Features

  • Single-File Distribution: Package entire applications into one executable file
  • Cross-Language Support: Python orchestrator with Go and Rust launchers
  • Secure by Default: Ed25519 signature verification ensures package integrity
  • Progressive Extraction: Extract only what's needed, when it's needed
  • Smart Caching: Persistent work environment with intelligent validation
  • Zero Dependencies: End users need nothing pre-installed

🚀 Quick Start

Prerequisites

  • Python 3.11 or higher
  • UV package manager (curl -LsSf https://astral.sh/uv/install.sh | sh)
  • Go 1.21+ and Rust 1.75+ (for building ingredients)

Installation

# Clone the repository
git clone https://github.com/provide-io/flavor.git
cd flavor

# Set up environment and install dependencies
source env.sh

# Build the Go and Rust ingredients
./build.sh

Creating Your First Package

# Package a Python application
flavor pack --manifest pyproject.toml --output myapp.psp

# Run the packaged application
./myapp.psp

# Verify package integrity
flavor verify myapp.psp

📦 PSPF Format

The Progressive Secure Package Format is a polyglot file format that works as both an OS executable and a structured package:

[Native Launcher] → Go or Rust executable
[8192-byte Index] → Format metadata and offsets
[Metadata] → Gzipped JSON manifest
[Slot Table] → Slot descriptors
[Slots 0..N] → Application code, runtime, dependencies
[📦🪄] → 8-byte emoji magic footer

📚 Documentation

🏗️ Architecture

Flavor Pack consists of three main components:

  1. Python Orchestrator (src/flavor/)

    • Manages the build process and dependency resolution
    • Creates manifests and handles Python packaging
    • Provides CLI interface for package operations
  2. Native Launchers (src/flavor-go/, src/flavor-rs/)

    • Extract and execute packages at runtime
    • Perform Ed25519 signature verification
    • Manage workenv caching and lifecycle
  3. Native Builders (src/flavor-go/, src/flavor-rs/)

    • Assemble PSPF packages from manifests
    • Implement the PSPF/2025 binary format
    • Handle slot packing and metadata encoding

🔒 Security

Every PSPF package includes cryptographic integrity verification:

  • Ed25519 signatures ensure packages haven't been tampered with
  • Public keys are embedded in the package index
  • Signature verification happens automatically on every launch
  • Optional deterministic builds with --key-seed for reproducibility

🧪 Testing

# Run the test suite
make test

# Run with coverage
make test-cov

# Test cross-language compatibility
make validate-pspf

# Run specific test categories
pytest -m unit        # Fast unit tests
pytest -m integration # Integration tests
pytest -m security    # Security tests

# Test ingredients with Pretaster
cd tests/pretaster
make test

🙏 Acknowledgments

Flavor Pack is built on the shoulders of giants:

  • UV for fast Python package management
  • The Python, Go, and Rust communities for excellent tooling

Built with ❤️ by the provide.io team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

flavorpack-0.0.1000.post2-py3-none-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

flavorpack-0.0.1000.post2-py3-none-macosx_10_9_x86_64.whl (7.4 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file flavorpack-0.0.1000.post2-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for flavorpack-0.0.1000.post2-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df9ca4f8525e8718fb4d1de6c02e460e09c1d35b7262ed73bf0c3c0d3335a5a1
MD5 8b22e58456be18d59dac1660911f8b16
BLAKE2b-256 32669d9f9048d1e89374daf09f182bf9d721adde7602b43ff38072b7bb069305

See more details on using hashes here.

File details

Details for the file flavorpack-0.0.1000.post2-py3-none-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for flavorpack-0.0.1000.post2-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5bec8bf4cc85ec294885e2d189e49238cae111a67efa21c8cdcec39acf62e2cc
MD5 cc5d9d9e87bdbe5c37528e4c9b6fbe9d
BLAKE2b-256 dad8f81b46afba0eafb642511de79ef1d64e3f3e37f2900fc304c04537fbf59f

See more details on using hashes here.

File details

Details for the file flavorpack-0.0.1000.post2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for flavorpack-0.0.1000.post2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a2d28a3ce6fc1d5df1e2c8589dbca2b987c3cfa0c333b71d2c0946772c051880
MD5 5d8c14ce2e018ad14b3b987486737742
BLAKE2b-256 7168b8ea597e570a7a397eeb34164583cd0d3e8e40369b8603e5ffa959343a19

See more details on using hashes here.

File details

Details for the file flavorpack-0.0.1000.post2-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for flavorpack-0.0.1000.post2-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fa7e59e60dc36df6014e2d26b99f62e508ba1acb913f88a606b8c1556dc33a38
MD5 4c3b56789015ca1d591c3b167c4a48fe
BLAKE2b-256 0d861eb476cab577b4c347cb760631cff096bc7c57ba6d8055c8cdb2507c8e59

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page