Skip to content

Road to Nimble 1.0.0 #1449

@jmgomez

Description

@jmgomez

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 requires
  • 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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions