Browse files


  • Loading branch information...
1 parent 35ff8ab commit 3171a1f303dcc600e51f7fd4b7a7f31e7eed0ab5 @vii committed May 24, 2009
Showing with 53 additions and 2 deletions.
  1. +6 −0 LICENCE
  2. +41 −0 README
  3. +5 −1 src/blog/blog.lisp
  4. +1 −1 src/blog/feed.lisp
@@ -0,0 +1,6 @@
+Lisp LGPL
+Don't be selfish, share the source to your application!
+See addons/* for the licences of those libraries.
@@ -0,0 +1,41 @@
+teepeedee2 is a webapplication framework for dynamic webpages. I made
+it to see whether it was possible to write a high performance
+application in Lisp. There were many obstacles in the way.
+This webserver is not finished and I wrote it to learn and experiment
+with Common Lisp. There is a lot to be tidied up, now I know the
+language better. If you have any interest in using it, please get in
+touch with me, John Fremlin <>, or
+It is faster than all(?) other web application frameworks for serving
+small dynamic webpages. Please let me know if you have a case where
+another framework is faster!
+You can see benchmarks comparing it to other web application platforms
+like PHP and Rails in this presentation
+You can see an example of it running a blog on
+It is designed so that small fragments of JavaScript can be delivered
+at low overhead to many clients.
+However, it also includes general support libraries for quickly
+generating XML/HTML (tpd2.ml2), for doing fast networking in a
+continuation passing style, i.e. fast event driven userspace
+threading (
+For an example application, loaded by default, see the src/game directory.
+The addons/ directory contains a few of the other projects (but not
+all) that teepeedee2 depends on. They are released under their own
+The licence for most of tpd2 is the Lisp LGPL. However, I take no profit
+from making this, and request that if you make an application with it,
+please release the source so others can learn from it. Don't be
+It runs on SBCL and ClozureCL. It shouldn't be hard to port to other
+modern Common Lisps.
6 src/blog/blog.lisp
@@ -86,7 +86,11 @@
(webapp ((my name) :head-contents
(<link :rel "alternate" :type "application/atom+xml" :href (my atom-feed-url))
- (<link :rel "alternate" :type "application/rss+xml" :href (my rss-feed-url))))
+; disable the RSS feed as RSS wants to have absolute URLs
+; (<link :rel "alternate" :type "application/rss+xml" :href (my rss-feed-url)))
+ )
(let ((n (byte-vector-parse-integer n)))
(let ((entries (my ready-entries :start n)) (count 10))
(<div :class "blog"
2 src/blog/feed.lisp
@@ -42,4 +42,4 @@
(<link (entry-url-path entry))
( (entry-story-ml entry))))))))
- (byte-vector-cat "Content-Type: application/rss+xml"
+ (byte-vector-cat "Content-Type: application/rss+xml"

0 comments on commit 3171a1f

Please sign in to comment.