diff --git a/README.md b/README.md
new file mode 100644
index 0000000..4871cae
--- /dev/null
+++ b/README.md
@@ -0,0 +1,42 @@
+#Progress Trees
+
+This is a library to help implement advancement trees, such as talent trees
+or research trees.
+
+API
+===
+Functions
+---------
+```progress_tree.new_tree()``` - Creates an empty tree
+
+```progress_tree.new_player_data(tree[, learned])``` - Creates an instance of
+player advancement data in a particular progress tree. The optional argument
+is a set of node names to start off with.
+
+```progress_tree.deserialize_player_data(tree, learned_string)``` - Deserializes
+player data in relation to a particular tree.
+
+Progress Tree Methods
+---------------------
+```add(node_name, parents)``` - Adds a new node with the name node_name.
+```parents``` is a list of parent node names, which must already exist in
+the tree (or you will get an error).
+
+```new_player_data(learned)``` - Method version of progress_tree.new_player_data
+
+```deserialize_player_data(learned_string)``` - Method version of
+progress_tree.deserialize_player_data
+
+Player Data Methods
+-------------------
+```serialize()``` - Serializes the data to a string
+
+```knows(node_name)``` - Determines if the player has learned the node
+
+```can_learn(node_name)``` - Determines if the player has completed the prerequisites
+for the node
+
+```learn(node_name)``` - Adds the given node to the known nodes. It can fail and
+return false if the node doesn't exist in the tree, or if it has already been
+learned, but will return true if nothing goes wrong. It will not fail if not
+all prerequisites have been completed, though.
\ No newline at end of file