Place the whole scrubbed ube in a large pot and add enough water to cover it by about 2 inches (5 cm). Bring to a boil, then reduce to a steady simmer. Cook until the ube is very tender when pierced with a fork, about 35 to 45 minutes depending on its size.
Drain the ube and let it stand just until cool enough to handle. Peel away the skin, then mash the flesh very thoroughly with a potato masher or pass it through a ricer. You should have about 4 cups (about 900 g) mashed ube.
Return the empty pot to low heat. Add the mashed ube, evaporated milk, condensed milk, coconut milk, butter, salt, and optional ube extract. Stir until evenly combined.
Cook over medium-low heat, stirring and scraping the bottom and sides of the pot frequently with a heatproof spatula. As the mixture thickens, stir continuously to prevent scorching. Take care because the thick jam can bubble and splatter.
Continue cooking until the ube halaya is glossy, very thick, and leaves a clear trail across the bottom of the pot when you drag the spatula through it, about 30 to 35 minutes. For an especially smooth finish, mash any remaining lumps against the side of the pot.
Transfer the hot ube halaya to a clean heat-safe serving dish or jars. Smooth the top and cool before covering. Serve warm, at room temperature, or chilled.