# UI Extensions Squad

**URL:** <https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393>\
**Category:** Squads\
**Created:** [October 3, 2025, 9:39pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393 "2025-10-03T21:39:33Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![jkuester](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/jkuester/32/806_2.png) [@jkuester](https://forum.communityhealthtoolkit.org/u/jkuester)\
**Post date:** [October 3, 2025, 9:39pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/1 "2025-10-03T21:39:33Z")

</div>

As [Gareth noted years ago](https://forum.communityhealthtoolkit.org/t/plugins-add-ons-and-extensibility/2068) the CHT has some significant limitations to its customization/functionality. Without a plugin architecture, developers seeking to make deep customizations to the CHT can only fork the repo and modify the core source code. This works, but is a lot of effort for the partners to maintain.

A better approach would be to support a plugin architecture with clearly defined features/interfaces. This would reduce the effort for _creating_ custom experiences in the CHT and make it much easier/safer to maintain those experiences when upgrading to new versions of the CHT.

@Anro has recently re-started the conversation in a serious way both [in this GitHub issue](https://github.com/medic/cht-core/issues/10224) and by providing a working [Proof of Concept PR](https://github.com/medic/cht-core/pull/10232)! 🚀 Building on this momentum, I think the time has come to form a formal squad to pursue this feature! (See [the docs](https://docs.communityhealthtoolkit.org/community/squads/) for details about squads.)

The term “plugin” is very broad (see the examples in the link above). As a squad, we will have to narrow the scope down to a specific MVP that we can pursue first. This MVP should be as tightly scoped as possible, but should still address a real-world need. (Thanks again to @Anro for already providing some initial ideas/examples of both in his PR.)

Please reply here on this thread if you are interested in participating in the squad! 🙏

---

<div class="post-metadata">

**Author:** ![cliff](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/cliff/32/1638_2.png) [@cliff](https://forum.communityhealthtoolkit.org/u/cliff)\
**Post date:** [October 22, 2025, 9:07am UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/2 "2025-10-22T09:07:47Z")

</div>

thanks @jkuester 👍 …

is there a slack channel for the squad that one can join ?

---

<div class="post-metadata">

**Author:** ![antony](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/antony/32/69_2.png) [@antony](https://forum.communityhealthtoolkit.org/u/antony)\
**Post date:** [October 22, 2025, 9:53am UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/3 "2025-10-22T09:53:49Z")

</div>

Thanks @cliff for your interest. We will be creating the shared slack channel soon and share the link.

---

<div class="post-metadata">

**Author:** ![Edwin](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/edwin/32/3935_2.png) [@Edwin](https://forum.communityhealthtoolkit.org/u/Edwin)\
**Post date:** [October 22, 2025, 11:37am UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/4 "2025-10-22T11:37:59Z")

</div>

hi @jkuester I am interested

---

<div class="post-metadata">

**Author:** ![Kenyuri](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/kenyuri/32/3365_2.png) [@Kenyuri](https://forum.communityhealthtoolkit.org/u/Kenyuri)\
**Post date:** [October 22, 2025, 12:45pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/5 "2025-10-22T12:45:50Z")

</div>

@jkuester @antony I’m interested.

---

<div class="post-metadata">

**Author:** ![femi\_oni](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/femi_oni/32/3335_2.png) [@femi\_oni](https://forum.communityhealthtoolkit.org/u/femi_oni)\
**Post date:** [October 25, 2025, 5:31pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/6 "2025-10-25T17:31:35Z")

</div>

Interested @antony @jkuester

---

<div class="post-metadata">

**Author:** ![binod](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/binod/32/60_2.png) [@binod](https://forum.communityhealthtoolkit.org/u/binod)\
**Post date:** [October 28, 2025, 2:30am UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/7 "2025-10-28T02:30:54Z")

</div>

I’m interested to participate in the squad.

---

<div class="post-metadata">

**Author:** ![kanarelo](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/kanarelo/32/2430_2.png) [@kanarelo](https://forum.communityhealthtoolkit.org/u/kanarelo)\
**Post date:** [October 29, 2025, 7:29pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/8 "2025-10-29T19:29:05Z")

</div>

Apologies for late sign up. Interested.

---

<div class="post-metadata">

**Author:** ![jkuester](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/jkuester/32/806_2.png) [@jkuester](https://forum.communityhealthtoolkit.org/u/jkuester)\
**Post date:** [October 30, 2025, 2:12pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/9 "2025-10-30T14:12:22Z")

</div>

Awesome! Thank you to everyone for expressing interest! I am looking forward to some great collaboration here.

To get things moving, I am going to schedule a Kickoff Meeting. _Please indicate your availability for any/all of these times next week!_ I will send an invite for the slot that works for the most folks. (The Tues/Thurs time slots do overlap with existing community meetings, so if you can make Friday work that would be best! 😅 But, if Tues/Thrus is better for more folks, then I would rather go for the overlap…)

_Poll ([view on site](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/9))_

Additionally, I have started drafting a [Requirements and Design doc](https://docs.google.com/document/d/1RFiSS2hdYhLloNUcahlDVX6KN5ZNEQhUnnc5EVDR9Pc/edit?tab=t.0). If you have some specific problems that you think could be addressed via a CHT plugin, please add it [to this section](https://docs.google.com/document/d/1RFiSS2hdYhLloNUcahlDVX6KN5ZNEQhUnnc5EVDR9Pc/edit?tab=t.0#heading=h.vn9t6jpm1g8x). If you have any examples of plugins in other software frameworks that would be a useful reference, please add them [to this section](https://docs.google.com/document/d/1RFiSS2hdYhLloNUcahlDVX6KN5ZNEQhUnnc5EVDR9Pc/edit?tab=t.87hclgo86rim#heading=h.t82b8sh2ar86).

Thank you!

---

<div class="post-metadata">

**Author:** ![jkuester](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/jkuester/32/806_2.png) [@jkuester](https://forum.communityhealthtoolkit.org/u/jkuester)\
**Post date:** [November 5, 2025, 5:21pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/10 "2025-11-05T17:21:05Z")

</div>

Thanks for the responses to the poll! 👍 Lets lock in the kickoff meeting for _this Friday, November 7th at 13:00 UTC._

```auto
Google Meet joining info
Video call link: https://meet.google.com/xsz-wuns-qhh
Or dial: <U+202A>(US) +1 601-840-3051<U+202C> PIN: <U+202A>407 228 208<U+202C>#
More phone numbers: https://tel.meet/xsz-wuns-qhh?pin=1642201141004

```

I have added the meeting to the [CHT Community Calendar](https://forum.communityhealthtoolkit.org/t/cht-calendar-stay-connected-with-regular-community-events/4641) and sent email invites to everyone who responded to this thread ( @cliff @antony @Edwin @Kenyuri @femi_oni @binod @kanarelo @Anro ). Feel free to share the info with anyone else who might be interested in attending!

---

<div class="post-metadata">

**Author:** ![jkuester](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/jkuester/32/806_2.png) [@jkuester](https://forum.communityhealthtoolkit.org/u/jkuester)\
**Post date:** [November 10, 2025, 11:00pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/11 "2025-11-10T23:00:14Z")

</div>

Thank you everyone for an awesome kickoff on Friday! 🚀 Checkout some basic notes from the meeting [here](https://docs.google.com/document/d/1enoAwcboHinjzRf5-OoiaezkuGRbVojmCho4rM2TlcU/edit?tab=t.0) and also the design doc [here](https://docs.google.com/document/d/1RFiSS2hdYhLloNUcahlDVX6KN5ZNEQhUnnc5EVDR9Pc/edit?tab=t.0#heading=h.vn9t6jpm1g8x).

We decided to pursue a plugin solution that would allow for adding custom UI content to the CHT webapp. Exactly what that means is still TBD.

Now I would like to schedule a recurring (weekly) squad meeting to help keep things coordinated and moving forwards. Let me know which times would typically work for you. 🙏

_Poll ([view on site](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/11))_

---

<div class="post-metadata">

**Author:** ![Jude\_Zambarakji](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/jude_zambarakji/32/4166_2.png) [@Jude\_Zambarakji](https://forum.communityhealthtoolkit.org/u/Jude_Zambarakji)\
**Post date:** [November 13, 2025, 11:21am UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/12 "2025-11-13T11:21:01Z")

</div>

@jkuester Hey Josh, are we still having the CHT plugin meeting today at 12 pm UTC?

---

<div class="post-metadata">

**Author:** ![jkuester](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/jkuester/32/806_2.png) [@jkuester](https://forum.communityhealthtoolkit.org/u/jkuester)\
**Post date:** [November 18, 2025, 8:21pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/13 "2025-11-18T20:21:18Z")

</div>

Thank you everyone for your patience here as we get this all together! Based on the the responses to the poll, I have booked a recurring meeting for Thursdays at 14:00 UTC, _starting next Thrusday, Nov 27th._ Everyone on this thread should have gotten an email invite to the meeting (let me know if you did not). Also you can see the meeting on the [CHT Community Calendar](https://forum.communityhealthtoolkit.org/t/cht-calendar-stay-connected-with-regular-community-events/4641).

```auto
CHT Plugins Squad
Thursday, November 27 · 14:00 – 15:00 UTC
Google Meet joining info
Video call link: https://meet.google.com/bzu-okav-mjd
Or dial: <U+202A>(US) +1 530-395-0819<U+202C> PIN: <U+202A>970 874 731<U+202C>#
More phone numbers: https://tel.meet/bzu-okav-mjd?pin=6724029925222

```

Looking forward to diving in deep on our ideas for how to implement custom UI plugins!

---

<div class="post-metadata">

**Author:** ![Anro](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/anro/32/2145_2.png) [@Anro](https://forum.communityhealthtoolkit.org/u/Anro)\
**Post date:** [November 27, 2025, 4:44pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/14 "2025-11-27T16:44:50Z")

</div>

I wanted to document our current (very rough) approach to “embedding” an external Power Bi report into the app. Unfortunately, context switching did me no favours and I ended up conflating two semi-different ideas and hope to clear that up as well.

Thanks again @diana for raising the point about allowing the Power Bi endpoint in the `contentSecurityPolicy`. I neglected to mention we did update the `api/src/routing.js` file’s `helmet` my adding:

```auto
frameSrc: [
    `'self'`,
    "https://app.powerbi.com"
  ],

```

Furthermore, we added the [PowerBi embed token generation methods](https://github.com/microsoft/PowerBI-Developer-Samples/blob/master/NodeJS/Embed%20for%20your%20customers/AppOwnsData/public/js/index.js). Linked the example code to not unnecessarily lengthen this post.  
Then we exposed a new API route for use by our webapp:

```auto
/api/v1/powerbi/report/:reportId

```

What also escaped me in the call was the detail about eventually passing along the role info about the logged in user to PowerBi to determine access or [row-level detail visibility](https://learn.microsoft.com/en-us/fabric/security/service-admin-row-level-security). In addition to that, we also wanted to explore if it was possible to tap into the environment variables exposed in our Azure container app (containing our api & webapp). If this is possible, we can use that info to authenticate via service principle.

Over in the webapp, we created a lightweight wrapping component for the `powerbi-client` library. All it does is:

- define the placeholder inline template html
- create a reference to that placeholder div
- after view init, we try to reach out to our new endpoint with the id of the report we’re interested in. The returned “embed config” is then passed into the lib’s `powerbiService.embed` method, along with the placeholder reference

Using some of the code in the PR we introduced the wrapping component an additional tab that, when clicked, displays a full-page interactive report to the user.

Of course, this has not been “pluginized”. Not the same config driven “embed” I showcased in the PR, sorry again.

If memory serves, we hope to use this functionality to display a “coverage map” (among other things). Similar to what was discussed in the earlier meeting. The development of that report is outside of my purview, so I lack some of the details.

---

<div class="post-metadata">

**Author:** ![jkuester](https://communityhealthtoolkit.b-cdn.net/user_avatar/forum.communityhealthtoolkit.org/jkuester/32/806_2.png) [@jkuester](https://forum.communityhealthtoolkit.org/u/jkuester)\
**Post date:** [February 18, 2026, 2:18pm UTC](https://forum.communityhealthtoolkit.org/t/ui-extensions-squad/5393/15 "2026-02-18T14:18:25Z")

</div>

Unfortunately I had to cancel the squad meeting this week because it overlaps with an internal Medic town-hall. However, we will be back next week on Feb 26. 👍

By that time, we will be ready to go full-speed-ahead on actual development work and this feature can start taking shape! 🚀

(Also, at some point the calendar meeting dropped the invite list, so I have re-invited everyone. Shoot me a message if you want an invite, but did not get one!)
