Getting Custom Widgets to work

I have been struggling for a while with the custom widgets, and I think I almost got it to work but I hit a wall and would appreciate some help.

I am trying to have a minimal example of bokeh serve working with a pre-built widget using bokeh build. I followed the instructions from (bokeh init - · Issue #10055 · bokeh/bokeh · GitHub or equivalently Prebuilt Bokeh Extensions — Awesome Panel documentation) to get bokeh build to work (essentially you have to modify index.ts and package.json).

My little goal is to build the MultiChoice widget and then tinker with it. My directory structure is

> ├── app.py
> ├── bokeh.ext.json
> ├── index.ts
> ├── models
> │   ├── __init__.py
> │   ├── __pycache__
> │   ├── index.ts
> │   ├── multichoice.py
> │   └── multichoice.ts
> ├── package-lock.json
> ├── package.json
> └── tsconfig.json

app.py

from models.multichoice import MultiChoice

m = MultiChoice(options=['a','b','c'])

curdoc().add_root(m)

index.ts (I don’t know what I’m doing, I probably don’t need the export)

import * as Models from "./models"
export {Models}
import {register_models} from "@bokehjs/base"

register_models(Models as any)

models/index.ts

export {MultiChoice} from "./multichoice"

the multichoice.ts and multichoice.py are just extracted from from Bokeh 2.3.0 repo.

With this setup I can bokeh build with no errors. Also bokeh serve app.py launches as expected. However, when visiting localhost:5006 I get a blank page with the JS console error
image
It seems the register models is not working as expected. But I tried a bunch of variations of the index.ts to no success.

I would appreciate any help!

cc @mateusz