ArchLinterNet.Unity
0.1.0
See the version list below for details.
dotnet add package ArchLinterNet.Unity --version 0.1.0
NuGet\Install-Package ArchLinterNet.Unity -Version 0.1.0
<PackageReference Include="ArchLinterNet.Unity" Version="0.1.0" />
<PackageVersion Include="ArchLinterNet.Unity" Version="0.1.0" />
<PackageReference Include="ArchLinterNet.Unity" />
paket add ArchLinterNet.Unity --version 0.1.0
#r "nuget: ArchLinterNet.Unity, 0.1.0"
#:package ArchLinterNet.Unity@0.1.0
#addin nuget:?package=ArchLinterNet.Unity&version=0.1.0
#tool nuget:?package=ArchLinterNet.Unity&version=0.1.0
ArchLinterNet
Declarative architecture contracts and dependency linting for .NET repositories.
ArchLinterNet helps teams keep architecture boundaries executable: define a YAML policy, run it locally or in CI, and catch dependency drift before it becomes hidden design debt.
Status: early preview. The YAML policy surface is being stabilized for the first public
0.xNuGet and .NET tool releases.
Why ArchLinterNet?
Many .NET projects enforce architecture with handwritten test helpers or tribal knowledge. That works, but policy quickly becomes hard to discover, hard to reuse across repositories, and hard for humans or AI agents to review.
ArchLinterNet uses a repository-owned policy file as the source of truth:
architecture/dependencies.arch.yml
↓
ArchLinterNet CLI / test adapter
↓
strict or audit architecture validation
↓
human diagnostics + CI artifacts
Use it when you want architecture rules to be declarative, reviewable, CI-friendly, and independent from one-off test code.
Quick start
Create architecture/dependencies.arch.yml:
version: 1
name: Example Architecture Contract
layers:
application:
namespace: MyApp.Application
domain:
namespace: MyApp.Domain
infrastructure:
namespace: MyApp.Infrastructure
analysis:
target_assemblies:
- MyApp.Application
- MyApp.Domain
- MyApp.Infrastructure
contracts:
strict:
- id: application-not-infrastructure
name: application-must-not-depend-on-infrastructure
source: application
forbidden: [infrastructure]
reason: Application code must depend on abstractions, not concrete infrastructure.
strict_layers:
- id: clean-architecture-layering
name: clean-architecture-layering
layers: [infrastructure, application, domain]
reason: Dependencies must point inward toward the domain.
Run from this repository during development:
dotnet run --project src/ArchLinterNet.Cli -- --policy architecture/dependencies.arch.yml --mode strict
After installing the .NET tool from NuGet.org:
arch-linter-net --policy architecture/dependencies.arch.yml --mode strict
Main capabilities
ArchLinterNet focuses on static architecture guardrails:
- YAML policy loading and schema-backed contract authoring.
- Namespace/layer dependency contracts.
- Ordered layer contracts.
- Allow-only contracts.
- Dependency cycle and acyclic sibling checks.
- Independence contracts between layers/modules.
- Protected surface contracts.
- External dependency groups for vendor/framework leakage.
- Method-body forbidden API checks.
- Unity
.asmdefdependency validation. - Strict gates, audit diagnostics, JSON output, and migration baselines.
ArchLinterNet does not validate runtime dependency injection behavior, authorization/security correctness, code ownership, semantic data flow, or arbitrary custom YAML fields outside the documented schema.
Documentation
Public product documentation is published through MkDocs and GitHub Pages:
- Documentation home
- Getting started
- Installation
- CLI usage
- Policy format
- Contract families
- CI integration
- AI policy authoring
- Supported capabilities and non-goals
Internal project documentation remains in repository Markdown files such as docs/internal/, openspec/, .github/, and root governance files. It is not part of the published product site.
Local documentation workflow
make venv # create Python virtual environment
make docs-serve # preview MkDocs locally
make docs-build # build the static documentation site
make lint-docs # strict documentation validation
Generated site/ output is a build artifact and should not be committed.
NuGet and repository links
NuGet packages should expose only public user-facing links:
- project/documentation URL: the GitHub Pages MkDocs site;
- repository URL: this GitHub repository;
- package README: this concise product README;
- license: repository license expression.
NuGet metadata must not point users to internal backlog governance, OpenSpec archives, or maintenance-agent instructions as product documentation.
License
MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- ArchLinterNet.Core (>= 0.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.4.2 | 128 | 7/10/2026 |
| 0.4.1 | 112 | 7/10/2026 |
| 0.4.0 | 113 | 7/8/2026 |
| 0.3.1 | 118 | 7/3/2026 |
| 0.3.0 | 109 | 6/29/2026 |
| 0.2.0 | 115 | 6/27/2026 |
| 0.1.0 | 127 | 6/21/2026 |
| 0.1.0-preview.4 | 70 | 6/19/2026 |
| 0.1.0-preview.3 | 80 | 6/18/2026 |
| 0.1.0-preview.2 | 66 | 6/18/2026 |
| 0.1.0-preview.1 | 1,036 | 6/18/2026 |
<!-- Release notes generated using configuration in .github/release.yml at 272753b5ad50b6c49afd3d2669a8c9563473b19b -->
## What's Changed
### Other Changes
* [TASK][AI] Tooling: Document release publication workflow (#29) by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/39
* feat: add exhaustive container coverage checks for layer templates by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/40
* [TASK][AI] Tooling: Add direct and transitive dependency modes (#14) by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/41
* [TASK][AI] Tooling: Add external dependency contracts (#15) by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/42
* [TASK][AI] Tooling: Add ignored-violation unmatched alerting (#16) by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/43
* [TASK][AI] Tooling: Add recursive acyclic sibling contracts by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/48
* [TASK][AI] Tooling: Add conditional compilation analysis modes by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/49
* [TASK][AI] Tooling: Add validation timing baseline harness (#50) by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/52
* [TASK][AI] Tooling: Add automatic baseline generation (#44) by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/53
* [TASK][AI] Tooling: Add namespace glob patterns by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/54
* [TASK][DOCS] Documentation: Rework README and MkDocs information architecture by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/68
* [TASK][AI] Tooling: Add method body scanning to external dependency contracts by @eugenemalaschuk-source in https://github.com/eugenemalaschuk-source/arch-linter-net/pull/78
**Full Changelog**: https://github.com/eugenemalaschuk-source/arch-linter-net/compare/v0.1.0-preview.4...v0.1.0