Get Started
Stop guessing. Find out exactly where your architecture is leaking.
In the AI era, agents write code faster than any human — but speed without guardrails is how architecture silently rots. Let's run a quick structural audit on your codebase to see what your current tools are missing.
Add Deslop to your project as a dev dependency. It's built in Haskell, lightning-fast, and completely free for local use.
npm install --save-dev @ivy-apps/deslopOr try instantly without installing:
npx @ivy-apps/deslop check .Create deslop/rules/arch.yaml and paste these two baseline rules. They catch the most critical multi-hop architectural leaks that slip past manual PR reviews and standard linters.
id: arch
name: Core Architecture Quality Gates
description: Universal structural guardrails.
rules:
- id: feature-isolation
description: No feature may import another feature transitively.
target: "@/features/**"
forbids:
- import: "@/features/**"
transitive: true # Catches indirect leaks that ESLint misses
allows:
- import: "{{TARGET_DIR}}/**"
fix: Extract shared logic to a @/lib or @/components module.
- id: no-tests-in-prod
description: Production code must never import test utilities, even transitively.
target: "**/*"
exclude:
- "**/*.spec"
- "**/*.test"
- "**/*.stories"
- "@test/**"
- "**/vitest.*"
forbids:
- import: "@test/**/*"
transitive: true
- import: "**/*.spec"
transitive: true
fix: Remove the import. If needed in production, extract to a non-test utility.Run the check in your project root. Deslop will traverse your full dependency graph and surface every transitive violation your current linters are missing.
npx @ivy-apps/deslop check .Prepare to be surprised. Most teams find 3–15 critical multi-hop dependency leaks on their very first run. Once you see the graph violations Deslop uncovers, head to the docs to automate this check in your CI pipeline.
id: arch
name: Core Architecture Quality Gates
description: Universal structural guardrails.
rules:
- id: feature-isolation
description: No feature may import another feature transitively.
target: "@/features/**"
forbids:
- import: "@/features/**"
transitive: true # Catches indirect leaks that ESLint misses
allows:
- import: "{{TARGET_DIR}}/**"
fix: Extract shared logic to a @/lib or @/components module.
- id: no-tests-in-prod
description: Production code must never import test utilities, even transitively.
target: "**/*"
exclude:
- "**/*.spec"
- "**/*.test"
- "**/*.stories"
- "@test/**"
- "**/vitest.*"
forbids:
- import: "@test/**/*"
transitive: true
- import: "**/*.spec"
transitive: true
fix: Remove the import. If needed in production, extract to a non-test utility.