10.15.2026

Today’s release includes the following updates:

bugfix

  • Fixed an issue where every full page load could take several seconds after anyone signed in, on instances with many staff members. Pages load at their usual speed again after sign-in.
  • Fixed an issue where single-line text fields in commands kept accepting characters past their limit, so a note could fail to sign without saying why. These fields now stop accepting input at the limit.
  • Fixed an issue where letter and message cards in the patient timeline had no space between them and the cards above and below. They now have the same spacing as other notes.

ui

  • New Order DME command for ordering durable medical equipment, such as a wheelchair, walker, or CPAP machine, from the Plan section of a note. See Command | Order DME.
    • Choose an item from your practice’s DME formulary or type it in, then add the indications, quantity, length of need, and the supplier to send it to.
      • You manage the formulary yourself under DME Products in Settings: add items with their HCPCS or internal codes, deactivate ones you no longer offer, and import or export the list as a spreadsheet.
    • The ordering provider must be an active prescriber. The patient’s latest height and weight are saved with the order when it’s signed.
    • After signing, print the order or fax it to the supplier. The supplier’s fax number fills in when it’s on file.
  • Patient charts open faster, with the largest improvement for patients with many messages.

portal

  • The practice logo in the patient portal is centered in the menu on desktop and in the header on mobile. Logos wider than the space are scaled down to fit instead of running past the edge.

sdk

  • Plugins can add an Order DME command to a note with OrderDmeCommand, and can respond to its events, including searches for the item, indications, supplier, and ordering provider.
  • Plugins can record a patient’s consent decision with the new RecordPatientConsent effect.
    • It creates or updates the patient’s consent for a consent coding.
    • It sets the expiration date from that coding’s expiration rule.
    • It can store a rejection reason when the patient declines.
    • It can attach the signed document as proof.
  • The plugin sandbox allows more of standard Python, including the copy, io, zlib, statistics, and xml.etree.ElementTree modules, relative imports, str.format, and dictionary keys that start with an underscore. See Sandboxing and Allowed Imports for the full list.
    • Sandbox problems in a plugin’s helper modules are reported when the plugin loads, so they show up before any code runs. The error names each construct along with its module and line, and canvas validate shows the same list before you deploy. (requires Canvas CLI 0.250.0 or newer)
    • Reading an attribute that doesn’t exist still returns None, but now logs a deprecation warning. It will raise AttributeError in a future release.
    • canvas validate no longer flags setattr, delattr, or bytearray, and flags type only when it isn’t called with exactly one argument. (requires Canvas CLI 0.250.0 or newer)
  • The Canvas FHIR client exposes base_url and get_headers(), so plugins can send their own HTTP requests to the FHIR API with the Http util, using the client’s URL and authorization headers and reading the raw response.