Medplum Monthly Update - March 2026
March was yet another busy month for Medplum. Three patch releases — v5.1.2, v5.1.3, and v5.1.4 — arrived alongside over 100 commits from 20+ contributors, and the work underneath the surface was just as significant as the new features. Spaces gained richer AI tooling. The communications documentation received a full suite of guides covering everything from the data model to automations. Worker infrastructure got a substantial rethink, and WebSocket subscriptions were hardened across the board. All of it continues to advance our 2026 roadmap priorities.
Features
Provider App: Spaces and AI
Spaces continues to advance our AI roadmap initiative and the Provider Application roadmap goal:
- System prompts on
Communicationresources — Spaces stores system prompts asCommunicationresources for clearer modeling and reuse - Component preview, code, and FHIR resources — Previews and visibility into generated UI, code, and underlying resources in the Spaces chat experience
- Translator tool looping — The translator can iterate until the user's request is satisfied for more reliable multi-step workflows
- Updated default language model — Newer model defaults for improved quality and consistency
- Spaces demo bots — Demo bots for Spaces are easier to discover in development environments
- Tab navigation — Standardized tabs across high-traffic screens (Kevin Wadeshaw)
Provider App: Messaging, Scheduling, and Billing
The Provider app gained messaging, calendar, and billing improvements:
- Communications payload and eFax — A dedicated payload tab on Communications, eFax integration, and ThreadChat updates (subject on communications, clearer file metadata for uploads and search)
- Calendar scheduling — Switch practitioner schedules from the calendar; more robust Find pane when service types omit a system; visit setup right after
$book; schedule pickers resolve actors viaSchedule:actor - Candid billing — Claim status in the Provider app and use of external identifiers when a Candid encounter id is absent
- SMART App Launch —
fhirContextsupport and respect for an existingloginquery parameter on launch - Project-scoped Provider access — Project membership aligns with who can open the Provider experience (Cody Ebberson)
- Domain rules for external apps —
DomainConfigurationcan target apps hosted outside the core deployment (Cody Ebberson) - Charting and sample data — Controlled-substance documentation updates (Maddy Li) and CPT handling fixes on sample data
Scheduling Operations
Server-side scheduling advances the Scheduling roadmap initiative:
$findservice type matching — More accurate matching when resolving available slots- Wildcard availability removed — Clearer availability semantics and fewer ambiguous slot definitions
- FooMedical scheduling demo — Updated patient-facing scheduling showcase
- Demo schedules — Refreshed demo schedule content and calendar examples (Reshma Khilnani)
Platform and Infrastructure
This work advances Enterprise Scale & Infrastructure:
- Workers — Dispatch worker path, configurable background workers, CDK support for worker-only services, and conditional worker deployment
auth/meproject features — Clients read enabled project features from the authenticated session- Marketplace definitions — Foundation resources for marketplace packages (package resource)
- Bot
$initoperation — Initializes Bot content for repeatable deployments (Bots overview) - Auth UI extraction — Shared React components for sign-in and session flows
- Presigned Binary uploads — Secure, efficient client-side uploads without routing through the server
- Rate-limit caching — In-memory tracking of heavily rate-limited IPs for faster enforcement
- Database tuning — PostgreSQL transaction idle timeouts and faster login flow
- Observability — Broader FHIR interaction metrics from the system repository; transaction consistency fixes in database reads
- WebSocket subscription hardening — Subscription token lifecycle, stale subscription detection against user limits, and FHIRcast topic key refresh
- HL7 client resilience — Clients now warn instead of error on unknown message control IDs
Developer Experience
ThreadInbox/ ThreadChat — OptionalallowPatientSelectionfor patient-facing apps; prop type exports; QuestionnaireForm fixes for repeated multiple-choice items; questionnaire signature stories (David Yanez, Noah Silas)useSearchtyping — Results useWithId<T>for safer access to server-assigned ids (Noah Silas)- SMART launch — Opens in a new tab by default; respects an existing
loginquery parameter on launch (Maddy Li) - Reference display fallback — UUID fallback when a reference has no display string (Maddy Li)
ValueSetAutocomplete— Configurable count behavior (Aditya Suri)- MedplumClient retry options — Configurable maximum retry time and default
maxRetries(Cody Ebberson, Aditya Suri) - CLI healthcheck validation — Custom base URLs are validated against the server healthcheck when configuring profiles (Medplum CLI, Rahul Agarwal)
- SMART on FHIR demo app — New example app for SMART launch and patient context (Alex Lin)
- Why Open Source — New page on Medplum's open-source philosophy
Documentation
March's documentation push emphasizes communications, clinical and scheduling workflows, and platform operations — supporting builders who ship workflow-heavy provider experiences.
Communications and messaging
- Thread lifecycle, participants, and access control — How threads behave over time, who can see them, and how access policies apply
- Messaging data model — Updated mental model for how conversations are represented and evolve
- Task-based message response tracking and routing — Patterns for tying tasks to message workflows
- Searching and querying threads — Practical search patterns for threaded communications
- Sending messages and attachments — Attachment flows for secure messaging
- Read receipts and message status — Delivery and read state for auditing and UX
- Messaging automations with Bots — Automations that react to messaging events
- Example code — New messaging snippets aligned with the guides
- Sidebar reorganization — Clearer navigation for communications and related topics
Additional communications documentation pages are in the works beyond what shipped in March, so expect the communications section to keep growing.
Clinical charting and scheduling
- SOAP notes — Structured SOAP documentation in clinical charting
- Time zones and timestamps — Scheduling with zones and instants in FHIR and the app (Cody Ebberson)
- Scheduling guides — Broader refresh of scheduling documentation (Finn Bergquist)
- Defining availability — Clarified alpha labeling (Aditya Suri)
Platform and operations
- External identity providers — Routing strategies for external IdP integrations (Rahul Agarwal)
- Multi-tenant access policies — Tenancy guidance in access documentation (Maddy Li)
- Server configuration: maxBatchSize — How
maxBatchSizeinteracts with async batches andmaxJsonSize(Rahul Agarwal) - Medplum Events Calendar — Updated upcoming events (Reshma Khilnani)
- Lab account onboarding — Revised instructions for requesting a lab account (Reshma Khilnani)
Bug Fixes
Server
- Return HTTP 400 when PostgreSQL rejects date/time values that overflow field bounds, instead of a generic database error (contributed by Léandre Chamberland-Dozois)
- Improved patch behavior when JSON patch operations implicitly create arrays
- Hardened
ProjectMembership.invitedBypopulation for consistent invite attribution - Additional edge cases for subscription token expiry and rebinding
- Fixed basic authentication handling for inactive project memberships
Clinical and UI
- Fixed
mapReferenceRangeso numeric reference ranges map cleanly into FHIRRangefor observations (contributed by Amanda McGivern)
Releases
Looking Ahead
March deepened the Provider app's Spaces, messaging, and scheduling story, while worker and subscription work strengthened the platform's operational backbone. Communications documentation now gives teams a clearer map from threads and tasks to automation — supporting the next wave of patient and clinician-facing workflows.
Join us on Discord to share feedback or follow along on GitHub.
