If you dont want a plugin there is a very simple solution
$("textarea").keyup(function(e) {
while($(this).outerHeight() < this.scrollHeight + parseFloat($(this).css("borderTopWidth")) + parseFloat($(this).css("borderBottomWidth"))) {
$(this).height($(this).height()+1);
};
});
See it working in a jsFiddle I used to answer another textarea question here.
To answer the question of doing it in reverse or making it smaller as text is removed: jsFiddle
And if you do want a plugin