Programming Arduino by manually sending USB data?

Hi all,

I don't know if anyone knows how to do this, but I am thinking about making a local application which can natively program an Arduino (Arduino Uno) without the help of a command like avrdude. Is there anything (documentation, maybe) which I could look for to understand the USB programming process that avrdude does?

Any help would be appreciated.
Thanks!

It has references to the atmel stk500v1 protocol.