diff --git a/.gitignore b/.gitignore
index d1c571f..e94bc30 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
/build_test_run/
/coverage/
/dist/
+/gen/
/large_project/
/pkg/
/test/
diff --git a/rb/assets/user_guide.html.erb b/rb/assets/user_guide.html.erb
new file mode 100644
index 0000000..bc02028
--- /dev/null
+++ b/rb/assets/user_guide.html.erb
@@ -0,0 +1,13 @@
+
+
+ RScons User Guide - Version <%= version %>
+
+
+
+ <%= body %>
+
+
diff --git a/rb/gen_user_guide.rb b/rb/gen_user_guide.rb
new file mode 100644
index 0000000..806c3a3
--- /dev/null
+++ b/rb/gen_user_guide.rb
@@ -0,0 +1,33 @@
+#!/usr/bin/env ruby
+
+require "erb"
+require "fileutils"
+require "redcarpet"
+require "syntax"
+require "rscons/version"
+
+renderer = Redcarpet::Render::HTML.new
+markdown = Redcarpet::Markdown.new(renderer)
+
+def load_file(file_name)
+ contents = File.read(file_name)
+ contents.gsub(/\$\{include (.*?)\}/) do |match|
+ include_file_name = $1
+ File.read(include_file_name)
+ end
+end
+
+input = load_file("doc/user_guide.md")
+
+version = Rscons::VERSION
+body = markdown.render(input)
+template = File.read("rb/assets/user_guide.html.erb")
+
+erb = ERB.new(template, nil, "<>")
+html_result = erb.result
+
+FileUtils.rm_rf("gen/user_guide")
+FileUtils.mkdir_p("gen/user_guide")
+File.open("gen/user_guide/user_guide.html", "w") do |fh|
+ fh.write(html_result)
+end