Heat canola oil over medium heat in a large pot.
Add onion, garlic and shallot, and sweat until translucent. (I like a little browning, but for presentation, you may not want any color in your final product.)
Add butter to the pot, melt and heat until foamy and starting to brown. Add rice, and sauté in the butter until the rice becomes opaque and starts to smell slightly nutty.
Add juice and zest of 2 limes (reserving 1 for garnish), add stock to cover, stir to incorporate and bring to a boil.
Once at a boil, cover, and reduce heat to low/simmer for about 20 minutes. Add more stock if the rice seems dry. The rice should be shiny and tender but not mushy.
Fluff rice with a fork after it’s done, toss in with remaining lime juice and zest, salt to taste and top with cilantro. Sprinkle on fried garlic at the last minute.