Skip to content

✨ feat: add uv workspace composability and project discovery#91

Merged
renardeinside merged 1 commit intomainfrom
feat/as-member
Feb 18, 2026
Merged

✨ feat: add uv workspace composability and project discovery#91
renardeinside merged 1 commit intomainfrom
feat/as-member

Conversation

@renardeinside
Copy link
Copy Markdown
Collaborator

@renardeinside renardeinside commented Feb 18, 2026

Summary

Implements #90 — make apx composable via uv workspaces.

  • Add apx init --as-member [MEMBER_PATH] flag (defaults to packages/app) to scaffold an app as a uv workspace member
  • Auto-detect member mode when apx init runs in a directory with an existing pyproject.toml without [tool.apx]
  • Add find_app_dir with automatic project discovery (scans subdirectories up to 5 levels deep) so all commands (dev start, build, check, etc.) work from the workspace root
  • Add shared modify_pyproject helper to eliminate TOML read/parse/write duplication between ensure_apx_uv_config and ensure_workspace_config
  • 25 unit tests covering discovery, workspace config, depth limits, idempotency

Changes

File What
crates/cli/src/common.rs find_app_dir, discover_apx_project, has_apx_config, modify_pyproject + 12 tests
crates/cli/src/init.rs --as-member flag, auto-detection, ensure_workspace_config, refactored ensure_apx_uv_config + 5 tests
11 command files Switch from resolve_app_dir to find_app_dir (one-line change each)

Zero changes to crates/core — all new logic is self-contained in CLI.

Closes #90

Test plan

  • cargo test -p apx-cli — 25 tests pass
  • cargo clippy -p apx-cli — clean
  • just check — all checks pass (ruff, prettier, cargo check, clippy, fmt, ty)
  • cargo test --workspace --exclude apx-studio — full suite passes
  • Manual: apx init --as-member in empty dir creates workspace layout
  • Manual: apx init in dir with existing pyproject.toml auto-detects member mode
  • Manual: apx dev check from workspace root discovers nested app

Made with Cursor

@renardeinside renardeinside merged commit a818c82 into main Feb 18, 2026
3 checks passed
@renardeinside renardeinside deleted the feat/as-member branch February 18, 2026 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🌲 [FEAT] Make app composable via uv workspaces approach

1 participant