SolverForge

Native Rust constraint solving for planning and optimization

Model shifts, routes, visits, and assignments with ordinary Rust types, then optimize them with Constraint Streams, incremental scoring, and solver events that fit application code.

Constraint Streams and incremental scoring Employee scheduling quickstart UI and routing companion crates

Readable constraints, explicit business rules

SolverForge keeps the model close to the domain. You work with shifts, employees, routes, and scores instead of translating everything into a separate optimization language.

  • Constraint Streams for composable rules and score analysis
  • Typed Rust models that stay recognizable as application code
  • Optimization infrastructure that can power real product workflows
constraints.rs
let no_overlap = factory
    .shifts()
    .join(equal(|shift: &Shift| shift.employee))
    .filter(|a: &Shift, b: &Shift| {
        a.employee.is_some() && a.start < b.end && b.start < a.end
    })
    .penalize_hard()
    .named("No overlap");
</div>
I have incorporated SolverForge in my new Rust application for staff scheduling and it's working like a charm, A+

Fawaz Halwani, Pathologist, The Ottawa Hospital

Inspect, test, and extend the solver

Constraint models, score calculations, and solving behavior stay visible in code, which makes it easier to debug planners, write targeted tests, and evolve domain rules over time.

Start with the project overview or dive straight into the APIs and examples.