Skip to content

Releases: eularixs/archview

v0.6.0

22 Jun 06:24

Choose a tag to compare

gorilla/mux and WebSocket.

  • gorilla/mux: r.HandleFunc("/path", h).Methods("GET") is detected, with the method from the chained .Methods(...) (ANY otherwise) — gorilla doesn't use the r.GET(...) shape the generic router extractor covers.
  • WebSocket: a route handler that performs a WebSocket upgrade (gorilla/websocket Upgrade, coder/nhooyr Accept) is labeled WS instead of GET. Per-message routing after the upgrade is dynamic and stays out of scope.
  • New examples/gorilla-ws (real gorilla/mux + gorilla/websocket).
go get github.com/eularixs/archview@v0.6.0

v0.5.0

22 Jun 06:11

Choose a tag to compare

Architecture linting.

Options.LintLayers flags arch smells on call edges:

  • reverse dependency — a call backward toward the entry (e.g. repository -> service),
  • skip-layer — a controller reaching a repository directly, bypassing the service,
  • cross-module — a call into another module's internals.

Flagged edges render red with a ⚠ N issues count in the header. Off by default.

archview.New(archview.Options{ Root: ".", LintLayers: true })

go get github.com/eularixs/archview@v0.5.0

v0.4.1

22 Jun 05:55

Choose a tag to compare

Generated source is now skipped. Functions in files marked // Code generated ... DO NOT EDIT. (protoc .pb.go, sqlc, mockgen, ent, …) are excluded, so generated boilerplate — proto getters, Unimplemented* stubs, Register*Server, _*_Handler wrappers — no longer clutters the graph. Route extraction is unaffected. go get github.com/eularixs/archview@v0.4.1

v0.4.0

22 Jun 05:49

Choose a tag to compare

Works with (almost) any Go web framework.

The per-framework gin and echo extractors are replaced by one generic router extractor that matches the shape nearly every Go router shares — router.GET/Get/POST/...("/path", handler) — by the verb name, a string path, and a function-typed handler, not by the router's concrete type. So gin, echo, fiber, chi, httprouter and most others work out of the box, with Group("/api") prefixes joined.

Combined with chain-based auto-layer (flow is read regardless of naming) and the gRPC / GraphQL / ConnectRPC extractors, archview now reads most Go API backends with no configuration.

  • New: framework-agnostic router extractor (+ examples/fiber).
  • Verified: gin, echo, fiber all detect routes with their group prefixes.
go get github.com/eularixs/archview@v0.4.0

v0.3.5

22 Jun 02:53

Choose a tag to compare

Lane boxes now wrap only the columns a module actually uses (both left and right), so modules that live in the right-hand columns — like an adapter with only repository nodes — get a compact box at their content instead of a full-width empty band. go get github.com/eularixs/archview@v0.3.5

v0.3.4

22 Jun 02:41

Choose a tag to compare

Lane width now fits the columns a module actually uses — sparse modules (e.g. just endpoint + controller) get a short lane instead of a full-width band. go get github.com/eularixs/archview@v0.3.4

v0.3.3

22 Jun 02:38

Choose a tag to compare

Fixes from a real echo + ConnectRPC + hexagonal project.

  • ConnectRPC support: detects New<Svc>Handler(impl) (connectrpc.com/connect) — each RPC method becomes an endpoint, alongside the existing gRPC and GraphQL extractors.
  • Self-route skipped: archview no longer shows its own /graph mount as an endpoint.
  • Adapter grouping: an adapter-only layout (adapter/postgresql) now groups under its container lane (adapter) instead of collapsing into root.
go get github.com/eularixs/archview@v0.3.3

v0.3.2

22 Jun 02:20

Choose a tag to compare

Layer-first layouts now group by feature.

A layout like core/<feature>, handlers/<feature>, repositories/<feature> (layer dir first, feature inside) now derives the module from the segment after the layer keyword, so each feature gets its own swimlane instead of collapsing into one. Feature-first layouts (user/service) are unchanged.

go get github.com/eularixs/archview@v0.3.2

v0.3.1

22 Jun 02:16

Choose a tag to compare

Auto-layer is now on by default.

archview reads the call chain to place each function in a layer, regardless of package naming — a service shows up because something flows through it, not because a folder is named service. This works across any layout, including microservices that each name things differently, with no keyword config.

  • Default behavior: chain-based layer inference is on.
  • Keyword classification still takes precedence where it applies, so well-named projects are unchanged.
  • Set DisableAutoLayer: true for the curated keyword-only view.
  • Bus detection runs first and auto-layer respects the bus barrier, so DetectBuses graphs are unaffected.
go get github.com/eularixs/archview@v0.3.1

v0.3.0

22 Jun 02:03

Choose a tag to compare

Works on any layout — no keyword config required.

New

  • Chain-based auto-layer (Options.AutoLayer, default off): archview walks the call graph from your endpoints, includes the functions actually reached, and infers each one's layer from its role in the chain — entry = controller, calls-onward = service, sink = repository. Naming-agnostic, so hexagonal/clean-arch layouts work without per-project keyword config. Keyword classification still wins where it applies.
  • Wider classification defaults: controller now matches interface/interfaces; service matches core; repository matches postgresql, supabase. Common hexagonal/clean-arch package names are recognized out of the box.

Why

A real echo + hexagonal project (core/, adapter/postgresql, interface/) showed only handlers — its service and repository packages didn't match the keyword set, so they were filtered out. The project was fine; archview was too rigid. This release fixes that.

Install

go get github.com/eularixs/archview@v0.3.0
archview.New(archview.Options{ Root: ".", ShowPorts: true, AutoLayer: true })

Known limitations

  • Layer-first layouts (core/<feature>) classify correctly but group into one lane; per-feature module grouping is on the roadmap.
  • AutoLayer is more inclusive (shows reachable functions); keep it off for the curated keyword-only view.