EarlyARC app icon

Catch struggling
students early.

Early Academic Retention Check

EarlyARC reads your Canvas courses and tells you which students need attention — and says, in plain language, exactly why.

macOS 14 or later  ·  Free  ·  Read-only & private

The students who need you, first.

Pick a course and EarlyARC shows the roster worst-first — with the evidence beside every flag, not a mystery score.

Every flag says why

Missing work, a slipping grade, going quiet — each reason is spelled out in plain language. No black box to second-guess.

A class on one screen

One line per student, worst first. Select anyone and a details pane shows their full picture — every reason, every missing assignment, each a link into Canvas.

Which work went undone

The roster turned sideways: every assignment, most-missed first. Fifteen students missing the same lab is rarely fifteen struggling students — it is usually one assignment with a problem. Pick it and the roster selects exactly who missed it.

Missing work that counts

Weighted by its share of the final grade, so 18% of the grade reads differently from a missed practice quiz.

Judged against the class

Inactivity and time-in-course are measured against classmates, not the calendar — so a quiet holiday doesn't flag everyone.

Thresholds per course

Decide what passing means and how long quiet is normal — sensible defaults, overridable for any single course. A five-week summer course isn't a fifteen-week fall one.

Message in your words

Copy a ready-to-send note built from your own templates. EarlyARC fills in the specifics; the voice stays yours.

One click into Canvas

Every name, assignment, and score links straight to the right page in Canvas, because acting on it still happens there.

Read-only by design

EarlyARC can only ever read. There is no code path that changes a course, a grade, or a student.

Courses you can spot

Every course carries an icon in the sidebar, chosen from its name — code brackets for programming, a flask for a lab science. Right-click to pick your own, or give it a colour.

Widgets on your desktop

The current quarter's counts at a glance, in small, medium, and large — per course, tappable into the app. Counts only, never names, even on a shared screen.

Remembers who you told

Copy a message and EarlyARC notes that you did — the course and the date, never the words. So the quiet student who already heard from you is not chased again.

Updates itself

Signed, notarized updates arrive in-app, and every release's notes live in Help ▸ What's New.

Nobody slips, nobody gets chased twice.

EarlyARC is not classroom management software. It takes no attendance, tracks no behaviour, and changes nothing in Canvas. It answers one question, every week: who needs you, and why.

1

See who

The roster opens worst-first, one line per student. A whole class on one screen, not five rows at a time.

2

See why

Missing work weighted by what it is worth, a slipping score, going quiet — spelled out in plain language, never a mystery number.

3

Say something

Copy a note built from your own templates, in your own voice. Several students at once if that is the week you are having.

4

Remember you did

EarlyARC records that you wrote — the course and the date, nothing else. Next time you look, you can see who has already heard from you.

Connected in a minute.

No account to create. No server to trust. Just your Canvas and your Mac.

1

Connect to Canvas

Paste a personal access token you generate in Canvas. It is stored in your Mac's Keychain and only ever used to read.

2

Open a course

Your courses appear grouped by term. Click one to see its roster, or click a whole term to combine every flagged student.

3

See who needs a nudge

The students worth a look rise to the top, each with a plain reason. Reach out in a click, and EarlyARC remembers you did.

On the roadmap: institutional sign-in. A future version will support Canvas's standard OAuth2 authorization, enabled once by your Canvas administrator through a developer key — you'd sign in with your regular Canvas account, with read-only scoped access your institution can grant or revoke centrally, and no personal token to create.

See it for yourself.

Light and Dark Mode throughout — these pictures follow the mode you're reading in. None of the data shown is real: every student, course, grade, and date is invented by the app's built-in sample mode.

The EarlyARC roster for a sample course of twenty-six students, one line each, listed worst-first. The line under the course title reads “26 students · 9 flagged · updated 11:04 AM · Since last time: 2 slipped · 1 newly flagged · 2 improved”, and every student who moved carries an up or down arrow beside their risk level — or, for one student who has improved off the flagged list entirely, an arrow on its own. A details pane on the right shows the selected student in full: grade, missing count and time in course, each reason they were flagged, each missing assignment, and — because they were written to three days ago — the line “Wrote 3 days ago — improved to Concern since”.
The roster: worst-first, every flag explained, every name and assignment one click from Canvas.
A sheet titled Missing work by assignment, listing a sample course's fourteen assignments most-missed first, each with a bar showing the share of the class and a count beside it. Homework 5 is drawn in orange at 20 of 26 students; the rest are blue, from 8 of 26 down to 1 of 26. A Show Students button selects whoever missed the chosen assignment.
The same class read by assignment. Orange marks work so widely missed that EarlyARC stops counting it against anyone.
A whole term combined into one list: thirty-six students needing attention across six courses, all visible at once, each row naming its course beside the student. The details pane on the right shows the selected student's grade, reasons, and missing work.
Click a term instead of a course, and every flagged student across the quarter lands in one list.
Message settings with three editable templates — Email, Short Message, and Referral Summary — and the list of placeholders EarlyARC fills in per student, such as first name, course, score, and the missing assignments.
Your templates, your voice — EarlyARC fills in the specifics per student.
The Privacy pane of EarlyARC’s settings. It opens by saying names, grades, and submissions are never saved and that rosters are held in memory and gone when you quit, with two exceptions — who you have written to, and what EarlyARC itself said about a student — both holding ids, dates, and EarlyARC’s own verdict, never a name or a grade. Below that, “What is kept on this Mac” takes each item in turn: the access token in the Keychain, your settings, your message templates, the note of who you have written to, the note of what EarlyARC said about a student before, and the numbers the widgets show. Each note says it is forgotten after a year and can be switched off or deleted.
The privacy pane says exactly what is kept, and what never is.
The small desktop widget: a large red 36 over the words students need attention, with the term name and a colored At Risk, Concern, and Watch breakdown beneath.
The medium attention widget: the count of thirty-six students needing attention on the left, and on the right the term with per-level counts — five At Risk, eighteen Concern, thirteen Watch — and the time it was last updated.
The medium courses widget: four current-quarter courses, each on its own row with colored At Risk, Concern, and Watch counts beside it, and a line noting how many more are in the app.
The small courses widget: three course codes, each with the number of students flagged there, and a line noting three more courses are in the app.
The large courses widget: a full quarter of courses, each with its name on one line and its At Risk, Concern, and Watch counts beneath.
The large attention widget: the term, a very large count of students needing attention, and the At Risk, Concern, and Watch breakdown listed beneath it.

The desktop widgets: your quarter at a glance, in counts only — a widget never sees a student's name. Both come in all three sizes.
Upgrading from an earlier version? macOS records a widget's available sizes when you place it and does not revisit them when an app updates, so a widget added before 1.4 still offers only its old sizes. Remove it and add it again to get the full set.

Captured from EarlyARC's built-in sample data with no Canvas account connected — the students, courses, grades, and dates are fictional, and no real student record was involved in any way.

Readable by design.

Built from native macOS controls, tested with the assistive tech teachers actually use.

Scales to 200%

The whole window grows from 80% to 200% — a slider in Settings, or ⌘+ and ⌘− like everywhere else.

VoiceOver, properly

Every control names itself with its units, evidence reads as sentences, and every link in a row is individually reachable.

Never color alone

Risk levels are words, not just colors. Dark Mode, system contrast, and system fonts throughout.

Student data never leaves your Mac.

EarlyARC is built for people who take FERPA seriously. It reads from Canvas, draws the screen, and forgets — there is no cloud, no account, and no analytics.

  • Rosters are held in memory and gone when you quit — no cache, no file of student work. EarlyARC keeps two small notes so it can tell you what changed: who you have written to, and the risk level it gave a student. Ids, dates, and its own verdict — never a name, grade, or score. Both can be switched off and deleted.
  • Your access token lives in the macOS Keychain, never in a file or a log.
  • The only server it contacts is your own Canvas. No analytics, no telemetry.
  • Signed and notarized by Apple, and sandboxed.

EarlyARC displays identifiable student records, so your institution's rules govern how you use it. Keeping the data on your Mac is not the same as having permission to view it.

Try it with your own courses.

Free, notarized, and ready in a minute.

EarlyARC app icon
Download EarlyARC 1.7.1
macOS 14+ 1.6 MB · disk image Notarized by Apple

Questions, ideas, or something not working? Email Bruce — EarlyARC is built by one instructor, and hearing from another is the best part.

Every release, and what changed.

The same notes EarlyARC shows in Help ▸ What's New — written once, so they cannot drift.

1.7.1August 2026
  • Fixed: after writing to a student, their details pane said they were still where they were, however much had improved. It compared today against today rather than against the day you wrote — so the one line in 1.7 that tells you whether outreach helped was wrong nearly every time.
  • A student who improved off the list keeps their arrow and loses their risk label, so for that row the arrow was the only thing on screen saying anything. VoiceOver now reads the change in words.
1.7August 2026
  • EarlyARC now notices change. When something has moved since you last opened a course, the line under the title says so — "Since last time: 2 slipped · 1 newly flagged · 1 improved" — and the students who moved carry ↑ or ↓ beside their risk level. Nothing has moved on most days, and on those days it says nothing.
  • Write to a student and their details pane now tells you what happened next: "Wrote 9 days ago — improved to Watch since", or that they are still where they were. EarlyARC has recorded who you wrote to since 1.1 and never once read it back; now the loop closes. It says what changed, never that your message caused it.
  • To do this EarlyARC remembers what it said about a student before: the course, their Canvas id, the date, the risk level, and how many pieces of work were missing. No names, no grades, no scores — a risk level is EarlyARC's own verdict, not a Canvas grade. One entry per student per day, forgotten after a year, and Settings ▸ Privacy switches it off and deletes it.
  • A course you have not opened before shows no summary. Everyone would be new, which is true and tells you nothing — so the comparisons begin from your second visit, and get more useful every week after that.
  • New help topic: What Changed Since Last Time.
1.6.9August 2026
  • Opening EarlyARC now looks for an update unless it checked a few minutes ago. It used to wait an hour, so a version released shortly after the last check went unmentioned until the hour was up — even if you quit and opened the app again.
1.6.8August 2026
  • Explore with Sample Data, from the EarlyARC menu or the Welcome window: look around an invented college — made-up courses and students, scored exactly as real ones are — before connecting anything. Leave the same way. The sample data has been in the app all along; now there is a way in that isn't a Terminal command.
  • Fixed: the Missing column in Missing Work by Assignment clipped its last digit — every "of 26" read "of 2".
1.6.7August 2026
  • The update notice now stays until you act on it. It used to be shown once, in the moment EarlyARC found the update — so dismissing the update window, or simply not having EarlyARC in front of you, meant hearing nothing more for a day. It now reappears whenever you open or return to the app, until the update is installed.
  • EarlyARC also looks for an update when you come back to it, not only when you open it. A copy left running all day used to learn about a new version a day late.
1.6.6August 2026
  • Fixed: the student details pane was translucent, so your desktop wallpaper showed through it — most obviously when no student was selected, or while dragging the pane wider. It is now a plain surface, like the roster beside it.
1.6.5August 2026
  • The update notice at the foot of the sidebar now uses your accent colour, so it reads as something to act on rather than as part of the window.
1.6.4August 2026
  • Clicking a student now opens the details pane if you had closed it. Choosing somebody is a request to see them, and with the pane shut the click looked like it did nothing at all. ⌃⌘I still closes it, and it stays closed until the next student you pick.
1.6.3August 2026
  • Updates no longer interrupt. When EarlyARC finds a new version on its own, it says so quietly at the foot of the sidebar instead of opening a dialog over whatever you were reading. Click Update when it suits you and the usual update window appears; ignore it and nothing happens.
  • Clicking anywhere in a student's row now selects it. Clicks landing on the Why column's plain text — the widest column — used to be quietly swallowed. Links in it still open in Canvas.
  • Saving a new address or token in Settings now takes effect even when a refresh is already running. It used to look like the save had done nothing.
  • The desktop widgets are more honest about their numbers: the "as of" stamp names the day once a snapshot is no longer today's, a refresh that could not load every course keeps the previous complete numbers rather than publishing shrunken ones, and signing out can no longer be undone by a refresh already in flight.
  • A Keychain that cannot be read is no longer treated as signed out: EarlyARC says so and leaves your roster and widgets alone instead of clearing them.
  • A message-templates file that cannot be read is set aside for recovery instead of being replaced by the defaults on your next edit.
  • Fixed: View ▸ Compact Rows showed the wrong checkmark until its first use, and that first use appeared to do nothing. Hiding the Why column now shrinks the rows with it. VoiceOver no longer announces an unlabelled indicator between each assignment and its count in Missing Work by Assignment.
1.6.2August 2026
  • Fixed: switching courses left the student details pane showing whoever was selected in the previous course — including one from a different quarter. It now clears to "No student selected" the moment you leave a course.
1.6.1August 2026
  • Canvas responses are no longer written to the system's URL cache on disk, and anything earlier versions cached there is deleted on first launch. Rosters and submissions are student records; the promise that they are never kept on this Mac now holds all the way down.
  • A student enrolled in two sections of the same course is now counted once, not once per section — they appeared as duplicate rows and quietly skewed the class-wide figures everyone else is judged against.
  • Sorting the roster keeps the selection on the same students. It used to stay on the same row numbers, which meant different students — while the details pane kept showing the one who used to be there.
  • When Canvas is briefly limiting requests, EarlyARC now waits and retries instead of reporting a permissions problem and pointing you at your Canvas administrator.
  • Fixed: switching courses while one was still loading could briefly offer the previous course's Missing Work by Assignment under the new course's name.
1.6July 2026
  • View ▸ Missing Work by Assignment (⇧⌘M) turns the roster sideways: which work is going undone, most-missed first, rather than which students are behind. Fifteen students missing the same lab is rarely fifteen struggling students — it is usually one assignment with a problem, and a roster sorted by student cannot show you that.
  • Pick an assignment and the roster selects exactly the students missing it, ready to message.
  • Assignments most of the class missed are drawn in orange. Those are the ones EarlyARC deliberately does not count against anybody, and this is the first place that rule is visible rather than merely in effect.
1.5.1July 2026
  • EarlyARC now looks for an update when you open it, instead of waiting for its own daily check. It stays quiet unless there is one, does nothing if you have turned automatic checking off, and does not re-check if it looked within the hour.
  • Fixed: if your Keychain could not be opened, Settings ▸ Connection reported it as "No token saved yet" and invited you to paste a token you already had. It now says the Keychain would not answer, and points at Keychain Access.
  • The About panel and Help now spell the name out: Early Academic Retention Check.
1.5July 2026
  • The roster is compact: one line per student, showing the leading reason they are flagged. A whole class fits on screen where five students did. View ▸ Compact Rows (⌃⌘0) puts every reason back inline if you prefer it.
  • Selecting a student fills a details pane on the right — their numbers, every reason, and every missing assignment, including the ones the Why column hid behind "+N more". Arrow keys walk the roster and the pane keeps up. Hide it from the toolbar or with ⌃⌘I.
  • Select several students and the commands follow: one message each, all of them marked contacted, in a single step. Right-clicking a student outside the selection still acts on that one alone.
  • ⌘C now copies the selected rows as text, tab-separated and using the columns you have on screen, so a roster pastes into Numbers as columns. ⇧⌘C copies a written message as before.
  • The roster reads like a Mac table: numbers line up in columns, the headers can hide the ones you never use, typing jumps to a student by name, and Return opens whoever is selected in Canvas.
  • Fixed: a student with many reasons had the last one cut in half by the row below. Clicking the empty space beside a short name opened Canvas instead of selecting the row.
1.4July 2026
  • Courses now carry an icon in the sidebar, so a long list can be scanned by shape instead of by reading every title. EarlyARC picks one from the course name to begin with — code brackets for a programming course, a flask for a lab science — and anything it does not recognise gets a plain book.
  • Right-click a course to choose your own from a searchable picker of about 140 symbols, or give it a colour. View ▸ Course Icon (⇧⌘I) opens the same picker without a mouse, and the whole picker works from the keyboard.
  • The At Risk, Concern and Watch labels are readable in light mode. They were drawn in colours meant for filled shapes, which left Watch at barely a fifth of the contrast needed for text — the most urgent label was the least legible. Dark mode was never affected.
  • Both widgets now come in all three sizes. Students Needing Attention gained a large size, and Courses at a Glance gained a small one; large shows eight courses where medium showed four.
  • Fixed: refreshing, or searching the course list, left the roster on screen while the sidebar stopped showing which course it belonged to.
1.3.2July 2026
  • Settings ▸ Connection now says whether a token is saved. The field is always blank because a saved token is never shown, which made "no token yet" and "a token is saved" look identical.
1.3.1July 2026
  • A Test Connection button in Settings ▸ Connection: check your Canvas address and token before saving. It answers with the name on the account it reached, or with what went wrong and how to fix it.
1.3July 2026
  • Desktop widgets: a small one counting students who need attention across your current quarter, and a medium one listing each course's At Risk / Concern / Watch counts, tappable through to its roster. Widgets show counts only — never a student name, grade, or identifier — and Settings ▸ Privacy can hide course titles from them too.
  • Sample data for screenshots and demos: launch with "open -a EarlyARC --args -SampleData YES" and an invented roster renders through the real scoring pipeline — no Canvas connection, no keychain access, and no student records on screen.
1.2.4July 2026
  • The Refresh button now also refreshes the roster you are looking at, not just the course list.
  • Fixed the help window's search field touching the edges of the sidebar.
1.2.3July 2026
  • Release notes now live in the app: Help ▸ What's New in EarlyARC shows this history, searchable like every other help topic.
1.2.2July 2026
  • Fixed in-app updates: earlier versions showed "an error occurred while running the updater" when installing an update.
1.2.1July 2026
  • First attempt at the updater fix, completed in 1.2.2.
1.2July 2026
  • Every link in the Why column — assignments, grades, "+N more" — is individually reachable and pressable with VoiceOver.
  • New Help ▸ Accessibility topic describing text scaling, VoiceOver support, and known limits.
1.1July 2026
  • Message templates: write your own boilerplates in Settings ▸ Messages, with placeholders EarlyARC fills in per student.
  • A help book (Help ▸ EarlyARC Help) with searchable topics, including why students are — and are not — flagged.
  • The roster remembers who you have already written to, shown in a Contacted column. Off switch and delete button in Settings ▸ Privacy.
  • Clearer errors when Canvas can't be reached, with what to do next.
  • Automatic updates.
1.0July 2026

The first release: connect to Canvas, open a course, and see who needs attention — with every flag explaining itself.