# pp
[](https://github.com/JoshCap20/pp/actions/workflows/test.yml)
[](https://github.com/JoshCap20/pp/actions/workflows/publish.yml)
A declarative, language-agnostic build system and utility manager.
`pp` provides a unified interface for building, testing, and running applications across different programming languages and environments. By defining configurations in a declarative `pp.yaml` file, you eliminate the need to remember language-specific toolchains and command variations. The system works equally well for managing complex build processes, running simple utility scripts, and orchestrating development workflows.
Whether you're working on a Python web application, a Rust CLI tool, or a Node.js frontend, `pp` abstracts away the underlying toolchain complexity while providing powerful parameterization and environment management capabilities.
## Install
Install directly from PyPI:
```bash
pip install ppbuild
```
Then run:
```bash
pp --help
```
### Development Installation
1. Clone the repository
```bash
git clone https://github.com/JoshCap20/pp.git
cd pp
```
2. Install in development mode
```bash
pip install -e .
```
3. Install development dependencies
```bash
pip install pytest pytest-cov black isort flake8 mypy
```
4. Run tests
```bash
pytest
```
The setup.py file creates a console script entry point, so after installation you can run `pp` from anywhere in your terminal.
## Configuration
Create a `pp.yaml` configuration file that defines the commands for your applications. The beauty is that you can have:
- A global config at `~/.pp/pp.yaml` for system-wide tools
- Project-specific configs that override the global one
- Environment-specific settings via `.env` files
See [TEMPLATE.md](TEMPLATE.md) for examples of creating your definition file.
## Usage
```bash
pp <application name> <action> [command]
```
**Examples:**
```bash
pp myapp build # Build your application
pp myapp test # Run tests
pp myapp run dev # Start development server
pp backend deploy # Deploy backend services
```
**Advanced Examples with Parameters:**
```bash
pp ollama run --model deepseek-r1 --temperature 0.8 # Run AI model with specific settings
pp web_server run --port 3000 --debug # Start server on custom port with debug
pp database backup --output prod-backup.sql --compress # Create compressed database backup
pp docker scale --service web --replicas 3 # Scale web service to 3 instances
```
The configuration is overridden by the current directory, so you can drop a `pp.yaml` in any project and immediately have access to all your build, test, run, lint, docker, and deployment commands through the same simple interface.
## Features
- **Simple Commands**: Define basic commands that just work (`pp myapp build`)
- **Parameterized Commands**: Add typed parameters with validation, defaults, and help text
- **Environment Management**: Automatic virtual environment activation (for python only) and environment variable injection
- **Directory Context**: Commands run in the right directory with the right environment
- **Type Safety**: Parameters are validated (strings, integers, floats, booleans) with constraints
- **Flexible Configuration**: Global configs, project-specific overrides, and environment-specific settings
## How it Works
1. `pp` looks for a `pp.yaml` in your current directory, then falls back to `~/.pp/pp.yaml`
2. It loads your application definitions and creates CLI subcommands automatically
3. When you run a command, it executes the underlying tool (npm, cargo, docker, etc.) with the right arguments
4. Parameters are validated and interpolated into your commands with proper escaping
5. You get consistent logging and error handling across all your projects
This means you can finally stop context-switching between different build tools and just focus on building cool stuff.
## Todo
- [ ] Download github repos and setup commands automatically
- [ ] Chain existing commands
- [ ] Easy MCP setup integration
Raw data
{
"_id": null,
"home_page": "https://github.com/JoshCap20/pp",
"name": "ppbuild",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "build-system, developer-tools, automation, cli, yaml, cross-platform",
"author": "Josh Caponigro",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/9b/3e/cf8e473bbeff515c94eb4591fa7117896c5160f8ef37e254fa50288af645/ppbuild-1.0.0.tar.gz",
"platform": null,
"description": "# pp\n[](https://github.com/JoshCap20/pp/actions/workflows/test.yml)\n[](https://github.com/JoshCap20/pp/actions/workflows/publish.yml)\n\nA declarative, language-agnostic build system and utility manager.\n\n`pp` provides a unified interface for building, testing, and running applications across different programming languages and environments. By defining configurations in a declarative `pp.yaml` file, you eliminate the need to remember language-specific toolchains and command variations. The system works equally well for managing complex build processes, running simple utility scripts, and orchestrating development workflows.\n\nWhether you're working on a Python web application, a Rust CLI tool, or a Node.js frontend, `pp` abstracts away the underlying toolchain complexity while providing powerful parameterization and environment management capabilities.\n\n## Install\n\nInstall directly from PyPI:\n\n```bash\npip install ppbuild\n```\n\nThen run:\n```bash\npp --help\n```\n\n### Development Installation\n\n1. Clone the repository\n```bash\ngit clone https://github.com/JoshCap20/pp.git\ncd pp\n```\n\n2. Install in development mode\n```bash\npip install -e .\n```\n\n3. Install development dependencies\n```bash\npip install pytest pytest-cov black isort flake8 mypy\n```\n\n4. Run tests\n```bash\npytest\n```\n\nThe setup.py file creates a console script entry point, so after installation you can run `pp` from anywhere in your terminal.\n\n## Configuration\n\nCreate a `pp.yaml` configuration file that defines the commands for your applications. The beauty is that you can have:\n\n- A global config at `~/.pp/pp.yaml` for system-wide tools\n- Project-specific configs that override the global one\n- Environment-specific settings via `.env` files\n\nSee [TEMPLATE.md](TEMPLATE.md) for examples of creating your definition file.\n\n## Usage\n\n```bash\npp <application name> <action> [command]\n```\n\n**Examples:**\n```bash\npp myapp build # Build your application\npp myapp test # Run tests\npp myapp run dev # Start development server\npp backend deploy # Deploy backend services\n```\n\n**Advanced Examples with Parameters:**\n```bash\npp ollama run --model deepseek-r1 --temperature 0.8 # Run AI model with specific settings\npp web_server run --port 3000 --debug # Start server on custom port with debug\npp database backup --output prod-backup.sql --compress # Create compressed database backup\npp docker scale --service web --replicas 3 # Scale web service to 3 instances\n```\n\nThe configuration is overridden by the current directory, so you can drop a `pp.yaml` in any project and immediately have access to all your build, test, run, lint, docker, and deployment commands through the same simple interface.\n\n## Features\n\n- **Simple Commands**: Define basic commands that just work (`pp myapp build`)\n- **Parameterized Commands**: Add typed parameters with validation, defaults, and help text\n- **Environment Management**: Automatic virtual environment activation (for python only) and environment variable injection\n- **Directory Context**: Commands run in the right directory with the right environment\n- **Type Safety**: Parameters are validated (strings, integers, floats, booleans) with constraints\n- **Flexible Configuration**: Global configs, project-specific overrides, and environment-specific settings\n\n## How it Works\n\n1. `pp` looks for a `pp.yaml` in your current directory, then falls back to `~/.pp/pp.yaml`\n2. It loads your application definitions and creates CLI subcommands automatically\n3. When you run a command, it executes the underlying tool (npm, cargo, docker, etc.) with the right arguments\n4. Parameters are validated and interpolated into your commands with proper escaping\n5. You get consistent logging and error handling across all your projects\n\nThis means you can finally stop context-switching between different build tools and just focus on building cool stuff.\n\n## Todo\n\n- [ ] Download github repos and setup commands automatically\n- [ ] Chain existing commands\n- [ ] Easy MCP setup integration\n",
"bugtrack_url": null,
"license": null,
"summary": "A declarative, language-agnostic build system and utility manager",
"version": "1.0.0",
"project_urls": {
"Bug Tracker": "https://github.com/JoshCap20/pp/issues",
"Documentation": "https://github.com/JoshCap20/pp/blob/main/TEMPLATE.md",
"Homepage": "https://github.com/JoshCap20/pp",
"Source Code": "https://github.com/JoshCap20/pp"
},
"split_keywords": [
"build-system",
" developer-tools",
" automation",
" cli",
" yaml",
" cross-platform"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "7f19d50305c3a56e402f79b92de4fd27c1fe8e30a68d4fc26265094ba09d5d92",
"md5": "5fb7398d6ce5cc4151df5ed5cb9bc216",
"sha256": "80e690cf6ee948966dcb854174ce3f286c4864bf85e4dd43abf2edf29e561740"
},
"downloads": -1,
"filename": "ppbuild-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5fb7398d6ce5cc4151df5ed5cb9bc216",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 40652,
"upload_time": "2025-07-30T05:16:12",
"upload_time_iso_8601": "2025-07-30T05:16:12.310363Z",
"url": "https://files.pythonhosted.org/packages/7f/19/d50305c3a56e402f79b92de4fd27c1fe8e30a68d4fc26265094ba09d5d92/ppbuild-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9b3ecf8e473bbeff515c94eb4591fa7117896c5160f8ef37e254fa50288af645",
"md5": "851d5f6d803b9d3737dcff25a1a05d60",
"sha256": "563ab96177e7899ca026e19ae46d4b11305d04d573de34a842947f59acbe80af"
},
"downloads": -1,
"filename": "ppbuild-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "851d5f6d803b9d3737dcff25a1a05d60",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 30060,
"upload_time": "2025-07-30T05:16:13",
"upload_time_iso_8601": "2025-07-30T05:16:13.339851Z",
"url": "https://files.pythonhosted.org/packages/9b/3e/cf8e473bbeff515c94eb4591fa7117896c5160f8ef37e254fa50288af645/ppbuild-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-30 05:16:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "JoshCap20",
"github_project": "pp",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "ppbuild"
}