fsrs_dart 0.1.0 copy "fsrs_dart: ^0.1.0" to clipboard
fsrs_dart: ^0.1.0 copied to clipboard

Free Spaced Repetition Scheduler (FSRS) in Dart.

fsrs_dart #

Free Spaced Repetition Scheduler (FSRS-6) for Dart.

Installation #

dependencies:
  fsrs_dart: ^0.1.0

Quick Start #

import 'package:fsrs_dart/fsrs_dart.dart';

void main() {
  final fsrs = Fsrs();
  final now = DateTime.now().toUtc();

  // Create a new card
  final card = fsrs.createEmptyCard(now: now);

  // Preview scheduled intervals for all ratings
  final preview = fsrs.repeat(card, now: now);
  for (final entry in preview.entries) {
    print('${entry.key.name}: due in ${entry.value.interval}');
  }

  // Apply user rating (Again, Hard, Good, Easy)
  final result = fsrs.next(card, FsrsRating.good, now: now);
  print('Next due: ${result.card.due}');
  print('Stability: ${result.card.stability}');
}

Usage #

Configuration #

final fsrs = Fsrs(
  desiredRetention: 0.9,
  maximumInterval: 36500,
  enableShortTerm: true,
  enableFuzz: true,
  learningSteps: [
    Duration(minutes: 1),
    Duration(minutes: 10),
  ],
  relearningSteps: [
    Duration(minutes: 10),
  ],
);

Review Log & Rollback #

// Apply a review step
final result = fsrs.next(card, FsrsRating.good, now: now);

// Revert last review
final revertedCard = fsrs.rollback(result.card, result.log);

// Reset card to unlearned state
final forgotten = fsrs.forget(result.card, resetCount: true);

Probability of Recall (getRetrievability) #

final r = fsrs.getRetrievability(card, now: DateTime.now().toUtc());
print('Retrievability: $r'); // 0.0 .. 1.0

Replay History (reschedule) #

Reconstructs card state by sequentially replaying historical reviews:

final history = [
  FsrsHistoryEntry(
    review: DateTime.utc(2026, 1, 1),
    rating: FsrsRating.good,
  ),
  FsrsHistoryEntry(
    review: DateTime.utc(2026, 1, 5),
    rating: FsrsRating.good,
  ),
];

final initialCard = fsrs.createEmptyCard();
final result = fsrs.reschedule(initialCard, history);

print('Reps: ${result.card.reps}');
print('Due: ${result.card.due}');

Parameter Optimization & Evaluation #

Train custom 21-parameter weights on review logs:

final trainSet = [
  FsrsItem(
    reviews: [
      FsrsReview(rating: FsrsRating.good, deltaT: 0),
      FsrsReview(rating: FsrsRating.good, deltaT: 3),
      FsrsReview(rating: FsrsRating.easy, deltaT: 10),
    ],
  ),
];

// Optimize parameters
final customParameters = fsrs.computeParameters(
  trainSet,
  enableShortTerm: true,
  numRelearningSteps: 1,
);

// Evaluate accuracy (Log Loss & RMSE)
final evaluation = fsrs.evaluate(trainSet);
print('Log Loss: ${evaluation.logLoss}');
print('RMSE: ${evaluation.rmseBins}');

// Initialize scheduler with trained parameters
final optimizedFsrs = Fsrs(parameters: customParameters);
0
likes
150
points
76
downloads

Documentation

API reference

Publisher

verified publisherpusk.software

Weekly Downloads

Free Spaced Repetition Scheduler (FSRS) in Dart.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

code_assets, convert, crypto, ffi, hooks, logging, meta, native_toolchain_rust

More

Packages that depend on fsrs_dart