Skip to the first install button
Technology Consigliere Canvas tools for admins

Canvas admin bookmarklets

Small browser tools that run inside a Canvas tab you are already signed in to. No tokens, no third parties, no remote code.

Teaching a course? The tools for your own courses are at Canvas teacher bookmarklets.

Cross-list sections

  1. Show your bookmarks bar. Press Ctrl + Shift + B, or Cmd + Shift + B on a Mac.
  2. Drag the blue button below up onto that bar.
Cross-list sections

Clicking it here will not do anything useful.

Can't drag it? Install it another way

Right-click your bookmarks bar, choose Add page in Chrome or Add Bookmark in Firefox, name it, and paste the contents of dist/crosslist.bookmarklet.txt into the URL field.

Version
2.1.1
Runs on
any page of your Canvas instance
Needs
a role that can cross-list sections
Last tested
18 September 2026, Chrome and Firefox

Moves sections out of one or more secondary courses and into a primary course, in one pass. Find the primary course, add up to nine secondary courses, check the sections you want, and read the summary before you commit to anything.

Sections start unchecked, so every move is deliberate. The panel tells you how many sections and how many student enrollments are about to move, and where they will land. Click the bookmark once to open the panel and again to close it.

Undo and the audit record

After a run, an undo button returns those sections to their home courses. That button only exists in the browser tab you ran it in. Close or reload the tab and it is gone.

Every completed run also prints a copyable audit record: a timestamp, the destination course, and one line per section naming its ID, SIS ID, and the home course it came from. That record is both your change-management artifact and your manual recovery path, since returning a section by hand means opening the primary course, going to Settings > Sections, and de-cross-listing it back to the course named in the record. Paste it into your ticket before you close the tab.

Add or remove one enrollment

  1. Read the warning below this button first.
  2. Drag the blue button up onto your bookmarks bar.
Add or remove enrollment

Clicking it here will not do anything useful.

Can't drag it? Install it another way

Right-click your bookmarks bar, choose Add page in Chrome or Add Bookmark in Firefox, name it, and paste the contents of dist/enroll.bookmarklet.txt into the URL field.

Version
1.1.1
Runs on
any page of your Canvas instance
Needs
the Import SIS Data permission on your admin role
Last tested
18 September 2026, Chrome and Firefox

Puts one person on one section in one role, or takes them off it. Search for the user, search for the course, pick the section, choose the role and whether you are adding or removing, and read the two-line CSV the panel shows you before you send it.

This exists because the enrollments API refuses to touch a concluded course. Every fall, someone needs a designer added to last spring's section to copy content out of it, and the supported answer is to unconclude the course, add the person, and remember to conclude it again. This writes a two-row SIS import instead, which reaches concluded and past-term courses without changing the course state.

After the import finishes, the panel polls for the result, re-reads the section roster to confirm the enrollment actually landed, and prints a one-line audit record with the import ID, the SIS IDs, the role, and the timestamp. Copy that into your ticket. A SIS import that reports success while the roster disagrees is exactly the case the verification step is there to catch.

Permissions and privacy

Running a stranger's JavaScript inside an authenticated admin session deserves suspicion. Here is what this does, so you can check rather than trust.

  • No tokens. Authentication is the session cookie and _csrf_token cookie Canvas already set in your browser.
  • No third parties. Every request goes to the Canvas origin in your address bar, read at runtime from location.origin. Nothing leaves it.
  • No remote code. No eval, no injected <script>, nothing fetched at runtime. The admin panels on this page are built entirely with DOM calls, which is also why they work under Content Security Policy.
  • Your permissions still apply. It calls the same API your account already has. If your role cannot cross-list, neither can this.
  • It stores nothing. Nothing is written to browser storage. The audit records exist only on screen until you copy them.

The readable sources live in src/. The encoded builds in dist/ are the same code, URL-encoded so it fits in a bookmark.

When it breaks

Instructure ships to production every few weeks. This calls the REST API rather than scraping the page, which makes it more durable than most bookmarklets, but API behavior still changes. If it stops working, open an issue with your browser and whatever the panel said when it failed.

I maintain this as time allows, and I read every issue. Treat it as a tool one admin wrote and shared rather than a supported product, and test it against your own instance before you rely on it during a term.

Page look out of date? GitHub can keep showing an older copy for a few minutes after an update. Hard-refresh with Ctrl + Shift + R, or Cmd + Shift + R on a Mac.

Already installed? Your bookmark keeps the version you dragged. To update, drag the new button to your bar and delete the old one.

Cross-list sections 2.1.1, Add or remove enrollment 1.1.1. What changed.

License: MIT. Free to use, change, and share, with credit. Full license.