Skip to content

Supported Ecosystems

PHALUS currently supports four package ecosystems end-to-end: npm, PyPI, Cargo, and Go. Additional ecosystems are planned.


Supported Today

Ecosystem Manifest File Registry Registry API
npm (Node.js) package.json registry.npmjs.org https://registry.npmjs.org/{name}/{version}
PyPI (Python) requirements.txt, pyproject.toml pypi.org https://pypi.org/pypi/{name}/{version}/json
Cargo (Rust) Cargo.toml crates.io https://crates.io/api/v1/crates/{name}/{version}
Go go.mod proxy.golang.org https://proxy.golang.org/{module}/@v/{version}.info

Ecosystem Details

npm

Manifest parsing: Reads dependencies and devDependencies from package.json. Version constraints follow npm semver notation (^, ~, >=, exact).

Registry resolution: Fetches https://registry.npmjs.org/{name}/{version} and extracts: - dist.unpackedSize — package size estimate - repository.url — used to find the GitHub README - license — original license being replaced - description, homepage

Documentation fetching: - README from GitHub API (/repos/{owner}/{repo}/readme) - Documentation site at the homepage URL if present - TypeScript type definitions from DefinitelyTyped (@types/{name}) when available. For packages that ship their own .d.ts files, type definitions are extracted from the npm tarball.

run-one format: npm/{name}@{version} — e.g. npm/lodash@4.17.21


PyPI

Manifest parsing: Reads requirements.txt (one package per line, PEP 508 version specifiers) and [project.dependencies] / [tool.poetry.dependencies] from pyproject.toml.

Registry resolution: Fetches https://pypi.org/pypi/{name}/{version}/json and extracts: - info.description — long description (may include API docs in Markdown) - info.license - info.project_urls — links to documentation and repository - urls[].size — package size

Documentation fetching: - README from the GitHub repository if info.project_urls contains a repository link - Documentation site if a docs URL is present in project_urls

run-one format: pypi/{name}@{version} — e.g. pypi/requests@2.31.0


Cargo (Rust)

Manifest parsing: Reads [dependencies], [dev-dependencies], and [build-dependencies] from Cargo.toml. Handles both inline (serde = "1") and table (serde = { version = "1", features = [...] }) syntax.

Registry resolution: Fetches https://crates.io/api/v1/crates/{name}/{version} and extracts: - crate.description - crate.homepage, crate.documentation, crate.repository - version.license

Documentation fetching: - README from the GitHub repository - docs.rs documentation page (https://docs.rs/{name}/{version}/{name}/) if the crate publishes to docs.rs (nearly all do)

run-one format: crates/{name}@{version} — e.g. crates/serde@1.0.193


Go

Manifest parsing: Reads require directives from go.mod. Module paths follow Go module conventions (github.com/user/repo, golang.org/x/..., etc.).

Registry resolution: Fetches https://proxy.golang.org/{module}/@v/{version}.info for version confirmation and https://pkg.go.dev/{module}@{version} for metadata.

Documentation fetching: - README from the GitHub or other VCS repository - pkg.go.dev documentation page for the module

run-one format: go/{module}@{version} — e.g. go/github.com/gin-gonic/gin@v1.9.1


Metadata Fetched for All Ecosystems

Regardless of ecosystem, the registry resolution stage populates a PackageMetadata struct with the following fields, which are used throughout the pipeline:

Field Description
name Package name
version Resolved version string
description Short description
license Original SPDX license identifier
repository_url Link to source repository (used to fetch README)
homepage_url Link to documentation site (used to fetch docs)
ecosystem Ecosystem tag: npm, pypi, crates, go

Planned Ecosystems

The following ecosystems are on the roadmap but not yet implemented:

Ecosystem Manifest Registry Status
Java / Kotlin pom.xml, build.gradle Maven Central Planned
Ruby Gemfile rubygems.org Planned
PHP composer.json packagist.org Planned
.NET *.csproj, packages.config nuget.org Planned

Cross-Language Reimplementation

PHALUS can reimplement a package in a different target language regardless of the source ecosystem. The CSP specification produced by Agent A is language-neutral — it describes API surface and behaviour, not syntax.

# Reimplement a JavaScript npm package in Rust
phalus run-one npm/chalk@5.3.0 --target-lang rust --license mit

# Reimplement a Python package in Go
phalus run-one pypi/requests@2.31.0 --target-lang go

Supported target languages: rust, go, python, typescript. The default is to implement in the same language as the original package.

Cross-language reimplementation tends to produce lower similarity scores because the language change forces structural divergence independent of model behaviour.