Why Canvas does not remind you before a due date

Canvas does not, out of the box, remind you before something is due. Its notification named "Due Date" is about dates being set or changed: it fires when graded work is created or a due date moves, and by default it arrives in a weekly summary, sent once a week on Saturday, Eastern time. A due date that moved on Monday can reach you that Saturday. Canvas's code does contain a warning before a due date, called Smart alerts, but it is a hidden feature that only a Canvas site administrator can unhide. The calendar feed sets no alarms either. What can warn you ahead of time is the Canvas app on your phone, which lets you set a reminder on each assignment, or an alert you set yourself in your own calendar.

What you see

A deadline passes, and nothing from Canvas told you it was coming. In your notification settings there is a row called Due Date, and it is already on. Or an email from Canvas says a due date changed, days after it changed.

Why it happens

"Due Date" means a date was set or changed. Canvas describes the Due Date notification as "Assignment due date change." Instructure's list of notifications names what sets it off: a new graded assignment, quiz or discussion, an assignment changed from ungraded to graded, and a change to an assignment or quiz due date. None of these happens because a due date is getting close. Canvas sends the change notice only for a published assignment in a course that is in session, and only when the new date differs from the old one.

The default is a weekly summary. Each kind of notification starts at a default until you change it, and Due Date starts at weekly. In Canvas's code, weekly summaries go out on Saturday, Eastern time, at a point in the day that depends on your school and your account. So with the default, you learn about a moved date up to a week after it moved. Announcements, by contrast, start at Notify immediately.

Canvas has a warning before due dates, but it is hidden. Canvas's code contains an "Upcoming Assignment Alert", an email with the subject "Upcoming Due Date" that says your assignment is due and links to it. It belongs to a feature called Smart alerts, which the source lists as hidden. In Canvas's code, only a site administrator, a level above a school's own account admins, can unhide a hidden feature. Where it is on, Canvas checks every hour, and about 36 hours before a due date (an admin can choose 12, 24, 36 or 48) it alerts students who have not submitted and have not opened the assignment in Canvas in the past three days. A student who looked at the assignment two days ago gets no alert.

The calendar feed has no alarms. When you subscribe to your Canvas calendar feed in another calendar app, each item carries its time, title and link, and no alarm. Any alert has to come from your calendar app's own settings, if it offers one for subscribed calendars.

The Canvas app can remind you, one assignment at a time. In the Canvas app for iOS and Android, an assignment or quiz page lets you add a reminder, sent as a push notification to that device: five, fifteen or thirty minutes before, an hour, a day or a week before, or a time you choose. On Android, Instructure's guide says you can also set one for an assignment with no due date.

What you can check

What an instructor or admin can do

Evidence

canvas-lms, app/models/notification.rb:467-468 (master at 1c9f0bb, retrieved 2026-11-11), the Due Date notification's description:

when "Due Date"
  t(:due_date_description_legend, "Assignment due date change")

app/models/notification.rb:350-353, its default:

when "Due Date",
     "Grading Policies",
     "TestWeekly"
  FREQ_WEEKLY

Announcements are in the FREQ_IMMEDIATELY group (:334-349). Instructure's "Canvas Notifications" resource (Instructure Community article 387041, retrieved 2026-11-11) lists the Due Date triggers as New Graded Assignment Created, New Graded Quiz or Survey Created, New Graded Discussion Created, Assignment Changed from Non-Graded to Graded, and Change in Assignment or Quiz Due Date, and the defaults as "Due Date: Weekly summary." The change notice's conditions (published, course active now, date actually different) are at app/models/broadcast_policies/assignment_policy.rb:30-39.

app/models/user.rb:3679, weekly summaries are timed in Eastern time:

time_zone = ActiveSupport::TimeZone.us_zones.find { |zone| zone.name == "Eastern Time (US & Canada)" }

:3682, starting from midnight at the start of the Saturday before next Monday:

target = time_zone.now.next_week - 2.days

To that it adds an offset of under 24 hours chosen by account and user (:3655-3666, :3684, :3691; app/models/delayed_message.rb:199-201). Weekly messages use this time (app/models/delayed_message.rb:210-211). Instructure's guide "How do I manage my Canvas notification settings?" (article 662894, retrieved 2026-11-11): immediate notifications "may be delayed by up to one hour in case an instructor makes additional changes."

app/messages/upcoming_assignment_alert.email.erb:6, the hidden alert's subject:

<%= I18n.t("Upcoming Due Date - %{assignment_name}, %{course_name}", :assignment_name => asset.title, :course_name => asset.context.name) %>

config/feature_flags/vice_release_flags.yml:80-85:

smart_alerts:
  state: hidden
  display_name: Smart alerts
  description: |-
    Notify students in time of assignments that require their attention.
  applies_to: RootAccount

Setting a hidden feature that has no flag yet requires site admin rights (app/controllers/feature_flags_controller.rb:297-298), and a hidden feature is not passed down to other accounts (lib/feature_flags.rb:148). The hourly check, config/initializers/periodic_jobs.rb:365:

Delayed::Periodic.cron "ScheduledSmartAlert.queue_current_jobs", "5 * * * *" do

app/models/scheduled_smart_alert.rb:24-27, the 36-hour default and the feature check:

offset = account.settings["smart_alerts_threshold"] || 36

ScheduledSmartAlert.runnable(offset, root_account_id).order(:due_at).find_each do |record|
  AssignmentUtil.delay.process_due_date_reminder(record.context_type, record.context_id) if account.feature_enabled?(:smart_alerts)

The account setting offers 12, 24, 36 or 48 hours (app/views/accounts/settings.html.erb:1168-1195). Who gets the alert, lib/assignment_util.rb:126 and :134:

unless seen_assignment_recently?(submission.student)
def seen_assignment_recently?(student, since: 3.days.ago)

drawn from submissions still unsubmitted (:144). Alerts are scheduled only for published assignments in active courses with a future due date (app/models/abstract_assignment.rb:862, 3848-3865).

The calendar feed (app/controllers/calendar_events_api_controller.rb:1220) builds each item with IcalEvent#to_ics (app/models/calendar_event.rb:774-884), which sets the class, start and end, title, description, location, timestamp, link, ID and sequence, and no alarm.

Instructure's guides "How do I create a reminder for an assignment or quiz in the Canvas app on my iOS device?" (article 661670, retrieved 2026-11-11) and on an Android device (article 661742, retrieved 2026-11-11): "You can set reminders through your assignment details or quiz details page." "Reminders are sent as push notifications to your device." The choices are "five, fifteen, or thirty minutes before, one hour before, one day before, or one week before," or a custom time. The Android guide adds: "You can also set reminders for assignments that don't have due dates."