I've been building a software rasterizer in TypeScript over the past few months and thought I'd share it. My goal was to support custom vertex layouts, programmable vertex and fragment shaders, and enough flexibility to implement more complex rendering techniques, much like you would with a GPU graphics API.
The renderer is based on Nikolaus Rauch's excellent C++ software rasterizer (https://github.com/nikolausrauch/software-rasterizer), adapted for TypeScript and the browser.
The project is intended as an educational resource, with an emphasis on readability and experimentation over maximum performance.