What the API feels like
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
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>
Examples and companion crates
Start with scheduling, extend into UI and routing
Learn the solver through a complete employee scheduling example, embed scheduling views with solverforge-ui, or add travel-time and route modeling with solverforge-maps.
Employee Scheduling
A full walkthrough covering employees, shifts, hard rules, soft preferences, and a live application loop.
Open the quickstartsolverforge-ui
Scheduling views, frontend primitives, and integration helpers for operational applications built on SolverForge.
Browse the UI docssolverforge-maps
Road-network loading, travel-time matrices, and route geometry utilities for routing and dispatch workflows.
Read the maps docsField signal
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
Open source foundation
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.