-
Notifications
You must be signed in to change notification settings - Fork 196
Open
Description
Nimble 1.0.0 Overview
The new Nimble 1.0.0 introduces a SAT-based design with a brand-new greenfield code path, reducing complexity and improving maintainability.
local
dependency resolution will be the new default.
Key Changes
- No Nim required initially – Resolves the Nim version from
compilation.nim
; no VM fallback for Nim itself. - Centralized, upfront resolution – Solves dependencies globally at the start, replacing the legacy greedy approach.
- Single-pass by default – Uses a declarative parser for most cases; falls back to the VM parser (with the resolved Nim) only for tricky packages or
require
statements inside control flow. - Local dependencies by default – Ensures predictable behavior and avoids global pollution.
- Ensure compatibility with fallback – Guarantees backward compatibility with existing projects.
- Lay the groundwork for a new choosenim alternative – Provides the foundation for future Nim version management improvements.
- Improve speed – Declarative parser is faster than the VM parser, along with faster Nim selection and other optimizations.
- Introduce “prefer” for Nim – Uses the system Nim version if possible, selecting older dependency versions when needed.
Example: If system Nim is 2.0 but the latest package B requires 2.2, Nimble will choose an earlier package B that works with 2.0. - Normalize dependencies – Resolves package URLs to names before solving so different URLs for the same package aren’t treated as separate dependencies.
Milestones
- Implement upfront SATPass (main goal; required major refactor)
- Remove requirement for Nim at startup
- Make local dependencies the default
- Improve speed
- Add benchmarks
- Optimize code paths
- Enable parallel downloads
- Expand cache
- Ensure full backward compatibility with
legacy
flag (preserves old behavior) - Implement dependency normalization
- Add
prefer
system Nim feature - Support file paths for local
require
s - Improve
nimble develop
workflow - Add Nim version management (e.g.
nimble install [email protected]
) - Complete miscellaneous tasks:
- Update `nimble dump
- nimble update nimble
- Battle test Nim selection
- Triage issue tracker
Postponed to next version (1.2.x)
- Complete declarative parser (missing platform selection for
when
) PR already done: Adds support somewhen
expressions in the declarative parser. #1457 (likely will require changes though) - Lazy Tagged Versions Mechanism (Lazy Tagged Versions Mechanism #1478)
arnetheduck, pouriyajamshidi, Araq, Abathargh, lucidrains and 7 more
Metadata
Metadata
Assignees
Labels
No labels