Skip to content
Merged

Docs #21

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @jasenc7
44 changes: 44 additions & 0 deletions .github/ISSUE_TEMPLATE/issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
## name: Issue Report

about: Report an issue in pyr.\
title: "[ISSUE] "\
labels: issue

### **Describe the issue**

A clear and concise description of what the issue is.

---

### **To Reproduce**

Steps to reproduce the behavior:

1. Run `pyr ...`
2. See error

**Expected behavior:**\
What should happen?

**Actual behavior:**\
What happens instead?

---

### **Environment**

- OS: [e.g., macOS 13.4, Windows 11 ARM64, Ubuntu 22.04]
- `pyr --version`: [e.g., 0.1.0]
- Python version: [e.g., CPython 3.11.6]
- Deno version (if relevant): [e.g., 2.7.0]

---

### **Additional Context**

Add any other context about the problem here (e.g., logs, screenshots).

---

**Note:** If this is a **feature request**, open a
[Discussion](https://github.com/jasenc7/pyr/discussions) instead.
80 changes: 80 additions & 0 deletions .github/ISSUE_TEMPLATE/question.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
## name: Question

about: Ask a question or request support - we'll see how we can help! title: "[Q] "\
labels: question

### **Question**

Describe what you’re trying to do and what’s happening.

**What are you trying to do?**\
_(e.g., "I’m trying to use pyr on Windows ARM64...")_

**What’s happening?**\
_(e.g., "I get an error when running `pyr init`...")_

**What have you tried?**\
_(e.g., "I checked the docs and ran `pyr --version`...")_

---

**Example:**

> _"I’m trying to use pyr on Windows ARM64. When I run `pyr init`, I see [error]. I expected
> [result] but got [result]. I’ve tried [steps]."_

---

### **Environment**

- OS: [e.g., macOS 13.4, Windows 11 ARM64, Ubuntu 22.04]
- `pyr --version`: [e.g., 0.1.0]
- Python version: [e.g., CPython 3.11.6]
- Deno version (if relevant): [e.g., 2.7.0]

---

### **Additional Context**

Add any other context about the problem here (e.g., logs, screenshots).

---

**Note:** For issues, open an [Issue](https://github.com/jasenc7/pyr/issues). For feature requests,
use [Discussions](https://github.com/jasenc7/pyr/discussions).

## name: Question or Support

about: Ask a question or request help with pyr.\
title: "[Q] "\
labels: question

### **Your Question**

Describe what you’re trying to do and what’s happening.

**Example:**

> _"I’m trying to use pyr on Windows ARM64. When I run `pyr init`, I see [error]. I expected
> [result] but got [result]. I’ve tried [steps]."_

---

### **Environment (if relevant)**

- OS: [e.g., Windows 11 ARM64, macOS 13.4]
- `pyr --version`: [e.g., 0.1.0]
- Python version: [e.g., CPython 3.14.4]

---

### **What to Expect**

- **Bugs:** If this is a bug, we’ll convert it to an issue.
- **Features:** If this is a feature request, we’ll move it to
[Discussions](https://github.com/jasenc7/pyr/discussions).
- **Questions:** We’ll answer here or redirect to Discussions for broader conversation.

---

**Tip:** For bugs or feature requests, use the dedicated templates instead.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## v0.1.0 (2026-04-14)

- Initial release
154 changes: 154 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# Contributing to pyr

Thanks for your interest! pyr is a minimal tool, and contributions should focus on reducing ceremony
for Python projects.

---

## **Reporting Bugs**

Open an [issue](https://github.com/jasenc7/pyr/issues) with:

- Steps to reproduce.
- Expected/actual behavior.
- OS, Python version, and `pyr --version`.

---

## **Suggesting Features**

Open a [Discussion](https://github.com/jasenc7/pyr/discussions) first. pyr’s scope is intentionally
narrow:

- Does it reduce ceremony for Python projects?
- Would it make sense for `pip` or `venv` to do this?\
If not, it’s likely out of scope.

---

## **Pull Requests**

1. Fork the repo and create a branch.
2. Run checks:

```sh
deno fmt
deno lint
deno check
deno run test
```

3. Open a PR with:

- A clear description.
- Reference to any related issues.

---

## **Code Style**

- **TypeScript:** Use `deno fmt`.
- **Shell scripts:** Use `shellcheck`.

---

## **Development Setup**

```sh
git clone https://github.com/jasenc7/pyr.git
cd pyr
deno fmt
deno lint
deno check
deno run test
```

### **Cross-Compile Locally**

```sh
# Apple Silicon
deno compile --target aarch64-apple-darwin main.ts
# Windows x86
deno compile --target x86_64-pc-windows-msvc main.ts
# Linux x86
deno compile --target x86_64-unknown-linux-gnu main.ts
# Linux ARM
deno compile --target aarch64-unknown-linux-gnu main.ts
# Apple Intel x86
deno compile --target x86_64-apple-darwin main.ts
```

### **Site Development**

```sh
cd site
deno run dev
```

The site runs in Vite with HMR.

---

## **Git Hooks (Optional)**

To automate local checks, add these scripts to `.git/hooks/` and make them executable:

### **1. Pre-Commit Hook**

Save as `.git/hooks/pre-commit`:

```sh
#!/bin/sh
set -eu
echo "🔍 Running pre-commit checks..."
deno fmt --check
deno lint
deno check
deno run test
```

### **2. Pre-Push Hook**

Save as `.git/hooks/pre-push`:

```sh
#!/bin/sh
set -eu
echo "🔍 Running pre-push checks..."
deno compile --target aarch64-apple-darwin main.ts
deno compile --target x86_64-pc-windows-msvc main.ts
deno compile --target x86_64-unknown-linux-gnu main.ts
deno compile --target aarch64-unknown-linux-gnu main.ts
deno compile --target x86_64-apple-darwin main.ts
```

### **3. Commit Message Hook**

Save as `.git/hooks/commit-msg`:

```sh
#!/bin/sh
set -eu
if ! grep -qE '^(feat|fix|docs|style|refactor|perf|test|chore|revert)!:? .{1,72}' "$1"; then
echo "❌ Commit message does not follow conventional format."
echo " Use: type(scope): description (e.g., 'feat: add Windows ARM64 support')"
exit 1
fi
```

**Make hooks executable:**

```sh
chmod +x .git/hooks/pre-commit .git/hooks/pre-push .git/hooks/commit-msg
```

**Skip hooks if needed:**

```sh
git commit --no-verify
git push --no-verify
```

---

**Note:** pyr is not an app—it’s a tool. Keep changes minimal and focused.
28 changes: 16 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# [pyrun.dev](http://pyrun.dev)
# [pyr](http://pyrun.dev)

**Python without the ceremony.**
A project manager that bootstraps its own runtime, manages your venv, and gets out of the way.
**Python without the ceremony.**\
A project manager that bootstraps its own runtime, manages your venv, and gets out of the way.\
Six commands. One honest lockfile.

[Website](https://pyrun.dev)
[Docs](https://pyrun.dev/docs)
[App Convention](https://pyrun.dev/app-convention)
[Blog: Why pyr?](https://jasencarroll.com/python-project-manager.html)
[Website](https://pyrun.dev)\
[Docs](https://pyrun.dev/docs)\
[App Convention](https://pyrun.dev/app-convention)\
[Blog: Why pyr?](https://jasencarroll.com/python-project-manager.html)\
[Blog: How pyr Works](https://jasencarroll.com/how-pyr-works.html)

---
Expand Down Expand Up @@ -47,11 +47,13 @@ pyr upgrade --python # Update the managed CPython

---

## **Why pyrun?**
## **Why pyr?**

- **Zero system deps:** Bootstraps its own CPython. No brew, no apt, no pyenv.
- **Six commands:** `init`, `run`, `add`, `remove`, `sync`, `upgrade`. No `activate`, no `pip freeze`.
- **Honest lockfile:** `pyproject.toml` is the source of truth. `requirements.txt` is a generated, fully-pinned lock.
- **Six commands:** `init`, `run`, `add`, `remove`, `sync`, `upgrade`. No `activate`, no
`pip freeze`.
- **Honest lockfile:** `pyproject.toml` is the source of truth. `requirements.txt` is a generated,
fully-pinned lock.
- **Self-updating:** `pyr upgrade` updates the tool. `pyr upgrade --python` updates the runtime.
- **Not written in Python:** The tool that manages Python shouldn’t need Python to install.

Expand All @@ -78,7 +80,8 @@ myapp/
## **How It Works**

- **Bootstrapping:** Downloads a standalone CPython into `~/.pyr/python` on first use.
- **Venv Management:** Creates a project-local `.venv` from the managed Python. Rebuilds automatically if the Python version changes.
- **Venv Management:** Creates a project-local `.venv` from the managed Python. Rebuilds
automatically if the Python version changes.
- **Dependency Resolution:** Delegates to `pip`. `requirements.txt` is a generated lockfile.
- **TOML Surgery:** Edits `pyproject.toml` without destroying comments or formatting.
- **Self-Upgrades:** Replaces the running binary with the latest release.
Expand All @@ -94,7 +97,8 @@ For a deep dive, see:

> The thing that manages Python shouldn’t be Python.

`pyr` is a single compiled binary. It drives `pip` and the standalone CPython runtime; it doesn’t depend on them to install itself.
`pyr` is a single compiled binary. It drives `pip` and the standalone CPython runtime; it doesn’t
depend on them to install itself.

---

Expand Down
37 changes: 37 additions & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# pyr roadmap

This roadmap outlines goals for pyr. Priorities are driven by user feedback, maintainability, and
the Python ecosystem’s needs.

---

### **1. Stability & Polish**

- **Checksum Verification:** Enforce checksum verification in install scripts.

### **2. Platform Support**

- **Windows ARM64:** Track [Deno’s ARM64 support](https://deno.com/blog/v2.7) and add native Windows
ARM64 binaries once `deno compile` supports it.
- _Status:_ Blocked on Deno. Workaround: Document x86_64 emulation.
- Open to expiremental build with Bun.

---

## **Non-Goals**

- **Package Management / Packaging:** pyr is not a package manager. It's a project / app manager.
See `pip`.
- **Plugins** pyr is not a runtime. it will not have plugins for lint, test, deploy, etc.

---

## **How to Influence the Roadmap**

- **Open an issue** for feature requests or bugs.
- **Vote on discussions** to show interest in a specific feature.
- **Contribute code** (see [CONTRIBUTING.md](CONTRIBUTING.md)).

---

**Last Updated:** April 2026
4 changes: 4 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Security Policy

Report vulnerabilities by [emailing me](jasen@jasencarroll.com) or opening a **private**
[GitHub Security Advisory](https://github.com/jasenc7/pyr/security/advisories/new).
Loading