Pure JavaScript and less than 600 bytes. This will create an unordered list of recent posts from the blog of your choosing in a div that will replace the script tag.
Unminified (864 bytes):<script type="text/javascript">
(function(blog, limit) {
limit = +limit || 10;
var scriptTags = document.getElementsByTagName('script');
var scriptNode = scriptTags[scriptTags.length - 1];
var recent = document.createElement("div");
scriptNode.parentNode.appendChild(recent);
recent.setAttribute("class", "widget");
recent.setAttribute("id", "TumblrRecentPosts");
var script = document.createElement("script");
script.src = "http://" + blog + "/api/read/json";
script.onload = function(data) {
if(!tumblr_api_read) return;
var response = tumblr_api_read.posts;
var post;
var len = Math.min(response.length, limit);
var html = "<ul>";
for(var i = 0; i < len; ++i) {
post = response[i];
html += "<li><a href='" + (post['url-with-slug'] || post.url) + "'>" +
post['regular-title'] + "</a></li>";
}
recent.innerHTML = html;
};
document.body.appendChild(script);
})("louisstow.tumblr.com", 30); //enter your settings here
</script>
Minified (573 bytes):
<script type="text/javascript">
(function(d,e){var e=+e||10,
a=document.getElementsByTagName("script"),
a=a[a.length-1],b=document.createElement("div");
a.parentNode.appendChild(b);b.setAttribute("class","widget");
b.setAttribute("id","TumblrRecentPosts");a=document.createElement("script");
a.src="http://"+d+"/api/read/json";a.onload=function(){if(tumblr_api_read){
for(var a=tumblr_api_read.posts,c,d=Math.min(a.length,e),f="<ul>",g=0;
g<d;++g)c=a[g],f+="<li><a href='"+(c["url-with-slug"]||c.url)+"'>"+
c["regular-title"]+"</a></li>";b.innerHTML= f}};
document.body.appendChild(a)})
("louisstow.tumblr.com",30); //enter your settings here
</script>
Usage:
Place the script tag where you want the unordered list to be in your HTML document. Enter the blog URL in the arguments and specify a limit to the number of posts to list (default being 10). My blog is louisstow.tumblr.com or louisstowasser.com and I specified a limit of 30 posts.
It uses the old Tumblr API (accessed via http://{Tumblr URL}/api/read/json) and runs it as a script. The script sets a global variable called tumblr_api_read. This is a large object which includes public blog information and posts.
Replacing the script tag is done by grabbing all script tags through document.getElementsByTagName("script") where the last script will be the one currently executing (the one we want to replace). We can then append our created div to the parent of the script tag.