pkg

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 31, 2026 License: Apache-2.0 Imports: 0 Imported by: 0

Documentation

Overview

Package pkg provides the core libraries for Stacktower dependency visualization.

Overview

Stacktower transforms dependency trees into visual tower diagrams where packages rest on what they depend on—inspired by XKCD #2347 ("Dependency"). The pkg directory is organized into four main areas:

  1. core - Domain logic (dependency resolution, graph structures, rendering)
  2. infra - Infrastructure (caching, storage, queues, sessions)
  3. integrations - External API clients (PyPI, npm, GitHub, etc.)
  4. pipeline - Orchestration (parse → layout → render)
  5. graph - Serialization types for graphs and layouts

Architecture

The typical data flow through Stacktower:

Package Registry/Manifest
         ↓
    [core/deps] package (resolve dependencies)
         ↓
    [core/dag] package (graph structure + transformations)
         ↓
    [core/render] package (layout + visualization)
         ↓
    SVG/PDF/PNG/JSON output

Quick Start

Resolve dependencies and render a tower visualization:

import (
    "context"
    "github.com/matzehuels/stacktower/pkg/core/deps/python"
    "github.com/matzehuels/stacktower/pkg/core/dag/transform"
    "github.com/matzehuels/stacktower/pkg/core/render/tower/layout"
    "github.com/matzehuels/stacktower/pkg/core/render/tower/sink"
)

// 1. Resolve dependencies
resolver, _ := python.Language.Resolver()
g, _ := resolver.Resolve(context.Background(), "fastapi", deps.Options{
    MaxDepth: 10,
    MaxNodes: 1000,
})

// 2. Transform the graph
g = transform.Normalize(g, nil)

// 3. Compute layout
l := layout.Build(g, 1200, 800)

// 4. Render to SVG
svg := sink.RenderSVG(l, g)

Main Packages

## Core Domain Logic

core/deps - Dependency resolution supporting 7 languages (Python, Rust, JavaScript, Go, Ruby, PHP, Java). Each language has its own subpackage with manifest parsers and registry resolvers.

core/dag - Directed acyclic graph optimized for row-based layered layouts. Nodes are organized into horizontal rows with edges connecting consecutive rows only. Supports regular, subdivider, and auxiliary node types.

core/render - Visualization rendering with two output formats: tower (stacked blocks) and nodelink (traditional directed graphs).

## Infrastructure

infra/storage - Unified storage backends for caching and persistence. FileBackend for CLI (filesystem), DistributedBackend for API/Worker (Redis + MongoDB), MemoryBackend for testing.

## External Integrations

integrations - HTTP clients for package registries (PyPI, npm, crates.io, RubyGems, Packagist, Maven, Go proxy) and code hosts (GitHub, GitLab).

dag/transform - Graph transformations: transitive reduction, layering, edge subdivision, and span overlap resolution. [transform.Normalize] runs the complete pipeline.

dag/perm - Permutation algorithms including PQ-trees for efficiently generating valid orderings with partial ordering constraints.

## Visualization

render/tower - Stacktower's signature tower visualization. The rendering pipeline: ordering → layout → transform → sink.

render/nodelink - Traditional directed graph diagrams using Graphviz.

render - Top-level utilities for format conversion (SVG to PDF/PNG).

## Serialization

graph - Serialization types for graphs and layouts (JSON node-link format).

## Infrastructure

pipeline - Complete visualization pipeline (parse → layout → render) used by CLI, API, and worker. Ensures consistent behavior across all entry points.

storage - Unified storage backends implementing a two-tier caching strategy:

  • Tier 1 (Index): Fast TTL-based lookup via Redis (hash(inputs) → document_id)
  • Tier 2 (DocumentStore): Durable storage via MongoDB (documents + GridFS)

Three implementations: FileBackend (CLI), DistributedBackend (API/Worker), MemoryBackend (testing).

queue - Job queue interface with memory and Redis implementations. Supports job lifecycle (pending, running, completed, failed, cancelled).

session - Session management for authenticated users. Provides memory, Redis, and file-based backends for sessions and OAuth state tokens.

common - Shared configuration, constants (TTLs), errors, and hash utilities.

Common Workflows

Parse a manifest file:

parser := python.PoetryLock{}
result, _ := parser.Parse("poetry.lock", deps.Options{})
g := result.Graph.(*dag.DAG)

Enrich with GitHub metadata:

provider, _ := metadata.NewGitHub(token, 24*time.Hour)
opts := deps.Options{MetadataProviders: []deps.MetadataProvider{provider}}
g, _ := resolver.Resolve(ctx, "fastapi", opts)

Render with custom style:

l := layout.Build(g, 1200, 800)
style := handdrawn.New(42)
svg := sink.RenderSVG(l, g, sink.WithStyle(style))

Analyze maintainer risk:

rankings := feature.RankNebraska(g, 10)
for _, n := range g.Nodes() {
    if feature.IsBrittle(n) {
        fmt.Printf("Warning: %s may be unmaintained\n", n.ID)
    }
}

Testing

Run tests:

go test ./pkg/...                    # All tests
go test ./pkg/core/dag/...           # Specific package
go test -run Example                 # Examples only
go test -tags integration ./pkg/...  # Include integration tests

Directories

Path Synopsis
Package buildinfo provides build-time version information.
Package buildinfo provides build-time version information.
Package cache provides a minimal caching interface for the pipeline.
Package cache provides a minimal caching interface for the pipeline.
core
dag
Package dag provides a directed acyclic graph (DAG) optimized for row-based layered layouts used in tower visualizations.
Package dag provides a directed acyclic graph (DAG) optimized for row-based layered layouts used in tower visualizations.
dag/perm
Package perm provides permutation generation algorithms and the PQ-tree data structure for constrained ordering problems.
Package perm provides permutation generation algorithms and the PQ-tree data structure for constrained ordering problems.
dag/transform
Package transform provides graph transformations that prepare a DAG for tower rendering.
Package transform provides graph transformations that prepare a DAG for tower rendering.
deps
Package deps provides dependency resolution from package registries and manifest files.
Package deps provides dependency resolution from package registries and manifest files.
deps/golang
Package golang provides dependency resolution for Go modules.
Package golang provides dependency resolution for Go modules.
deps/java
Package java provides dependency resolution for Maven/Java packages.
Package java provides dependency resolution for Maven/Java packages.
deps/javascript
Package javascript provides dependency resolution for npm packages.
Package javascript provides dependency resolution for npm packages.
deps/languages
Package languages provides the complete list of supported language ecosystems.
Package languages provides the complete list of supported language ecosystems.
deps/metadata
Package metadata provides metadata enrichment from external sources.
Package metadata provides metadata enrichment from external sources.
deps/php
Package php provides dependency resolution for PHP Composer packages.
Package php provides dependency resolution for PHP Composer packages.
deps/python
Package python provides dependency resolution for Python packages.
Package python provides dependency resolution for Python packages.
deps/ruby
Package ruby provides dependency resolution for Ruby gems.
Package ruby provides dependency resolution for Ruby gems.
deps/rust
Package rust provides dependency resolution for Rust crates.
Package rust provides dependency resolution for Rust crates.
render
Package render provides visualization rendering for dependency graphs.
Package render provides visualization rendering for dependency graphs.
render/nodelink
Package nodelink provides node-and-edge graph visualization using Graphviz.
Package nodelink provides node-and-edge graph visualization using Graphviz.
render/tower
Package tower provides the physical tower visualization engine.
Package tower provides the physical tower visualization engine.
render/tower/feature
Package feature provides analysis features for tower visualizations.
Package feature provides analysis features for tower visualizations.
render/tower/layout
Package layout computes block positions for tower visualizations.
Package layout computes block positions for tower visualizations.
render/tower/ordering
Package ordering provides algorithms for determining the left-to-right arrangement of nodes within each row of a layered graph.
Package ordering provides algorithms for determining the left-to-right arrangement of nodes within each row of a layered graph.
render/tower/sink
Package sink provides output format renderers for tower visualizations.
Package sink provides output format renderers for tower visualizations.
render/tower/styles
Package styles defines visual styles for tower rendering.
Package styles defines visual styles for tower rendering.
render/tower/styles/handdrawn
Package handdrawn provides an XKCD-inspired hand-drawn visual style.
Package handdrawn provides an XKCD-inspired hand-drawn visual style.
render/tower/transform
Package transform provides post-layout transformations for tower rendering.
Package transform provides post-layout transformations for tower rendering.
Package errors provides structured error types for the Stacktower application.
Package errors provides structured error types for the Stacktower application.
Package graph provides serialization types for dependency graphs and layouts.
Package graph provides serialization types for dependency graphs and layouts.
Package integrations provides HTTP clients for package registry APIs.
Package integrations provides HTTP clients for package registry APIs.
crates
Package crates provides an HTTP client for the crates.io API.
Package crates provides an HTTP client for the crates.io API.
github
Package github provides an HTTP client for the GitHub API.
Package github provides an HTTP client for the GitHub API.
gitlab
Package gitlab provides an HTTP client for the GitLab API.
Package gitlab provides an HTTP client for the GitLab API.
goproxy
Package goproxy provides an HTTP client for the Go Module Proxy.
Package goproxy provides an HTTP client for the Go Module Proxy.
maven
Package maven provides an HTTP client for Maven Central.
Package maven provides an HTTP client for Maven Central.
npm
Package npm provides an HTTP client for the npm registry API.
Package npm provides an HTTP client for the npm registry API.
packagist
Package packagist provides an HTTP client for the Packagist API.
Package packagist provides an HTTP client for the Packagist API.
pypi
Package pypi provides an HTTP client for the Python Package Index API.
Package pypi provides an HTTP client for the Python Package Index API.
rubygems
Package rubygems provides an HTTP client for the RubyGems.org API.
Package rubygems provides an HTTP client for the RubyGems.org API.
Package observability provides hooks for metrics, tracing, and logging.
Package observability provides hooks for metrics, tracing, and logging.
Package pipeline provides the core visualization pipeline for Stacktower.
Package pipeline provides the core visualization pipeline for Stacktower.
Package session provides session management for authenticated users.
Package session provides session management for authenticated users.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL