diff --git a/docs/API.md b/docs/API.md
index a7bb3aa2..4411927b 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -3,7 +3,6 @@ layout: main
title: API
---
-[
](http://github.com/justinethier/cyclone)
# API Documentation
diff --git a/docs/api/primitives.md b/docs/api/primitives.md
index 118076f7..e4ff315f 100644
--- a/docs/api/primitives.md
+++ b/docs/api/primitives.md
@@ -96,228 +96,453 @@ Return the product of the arguments.
Return the sum of the arguments.
-#-
+# -
+
(- z)
+
(- z1 z2 ...)
+
With two or more arguments return their difference. With one argument return the additive inverse.
-#/
+
+# /
+
(/ z)
+
(/ z1 z2 ...)
+
With two or more arguments return the quotient of the arguments. With one argument return the multiplicative inverse.
-#<
+
+# <
+
(< x1 x2 ...)
+
Return `#t` if the arguments are monotonically increasing, or `#f` otherwise.
-#<=
+
+# <=
+
(<= x1 x2 ...)
+
Return `#t` if the arguments are monotonically non-decreasing, or `#f` otherwise.
-#=
+
+# =
+
(= x1 x2 ...)
+
Return `#t` if the arguments are equal, or `#f` otherwise.
-#>
+
+# >
+
(> x1 x2 ...)
+
Return `#t` if the arguments are monotonically decreasing, or `#f` otherwise.
-#>=
+
+# >=
+
(>= x1 x2 ...)
+
Return `#t` if the arguments are monotonically non-increasing, or `#f` otherwise.
-#apply
+
+# apply
+
(apply proc arg1 ... args)
+
The `apply` procedure calls `proc` with the elements of the list `(append (list arg1 ...) args)` as the actual arguments.
-#boolean?
+
+# boolean?
+
(boolean? obj)
+
Determine if `obj` is a boolean.
-#bytevector
+
+# bytevector
+
(bytevector byte ...)
+
Create a new bytevector consisting of the given bytes.
-#bytevector-append
+
+# bytevector-append
+
(bytevector-append bytevector ...)
+
Append give bytevectors to create a new bytevector.
-#bytevector-length
+
+# bytevector-length
+
(bytevector-length bytevector)
+
Return the length of the given bytevector.
-#bytevector-u8-ref
+
+# bytevector-u8-ref
+
(bytevector-u8-ref bytevector k)
+
Return the bytevector element at index `k`.
-#bytevector-u8-set!
+
+# bytevector-u8-set!
+
(bytevector-u8-set! bytevector k byte)
+
Change the value at index `k` of the bytevector to `byte`.
-#bytevector?
+
+# bytevector?
+
(bytevector? obj)
+
Determine if `obj` is a bytevector.
-#caar
+
+# caar
+
(caar pair)
+
Return `(car (car pair))`
-#cadr
+
+# cadr
+
(cadr pair)
+
Return `(car (cdr pair))`
-#car
+
+# car
+
(car pair)
+
Return the contents of the car field of `pair`.
-#cdar
+
+# cdar
+
(cdar pair)
+
Return `(cdr (car pair))`
-#cddr
+
+# cddr
+
(cddr pair)
+
Return `(cdr (cdr pair))`
-#cdr
+
+# cdr
+
(cdr pair)
+
Return the contents of the cdr field of `pair`.
-#char->integer
+
+# char->integer
+
(char->integer char)
+
Return the `char` as an integer value.
-#char?
+
+# char?
+
(char? obj)
+
Determine if `obj` is a character.
-#close-input-port
+
+# close-input-port
+
(close-input-port port)
+
Close the given input port.
-#close-output-port
+
+# close-output-port
+
(close-output-port port)
+
Close the given output port.
-#close-port
+
+# close-port
+
(close-port port)
+
Close the given port.
-#command-line-arguments
+
+# command-line-arguments
+
(command-line-arguments)
+
Return the command line arguments to the program as a list of strings.
-#cons
+
+# cons
+
(cons a b)
+
Create a new pair with its car field set to `a` and its cdr field set to `b`.
-#delete-file
+
+# delete-file
+
(delete-file string)
+
Delete a file with the given filename.
-#eof-object?
+
+# eof-object?
+
(eof-object? obj)
+
Determine if the given object is an EOF object.
-#eq?
+
+# eq?
+
(eq? a b)
+
Determine if `a` and `b` are equal by comparing their pointer values. This operation is guaranteed to be a single comparison no matter the type of each object passed to the function.
-#equal?
+
+# equal?
+
(equal? a b)
+
Determine if `a` and `b` are equal by doing a "deep" comparison. For lists and vectors this means each element in the data structures will be compared until either the end of the structure is reached or an inequality is found. `equal?` is guaranteed to work for circular lists.
-#eqv?
+
+# eqv?
+
(eqv? a b)
+
An alias of `eq?`.
-#error
+
+# error
+
(error message obj ...)
+
Raises an exception by calling `raise` with the given message and objects.
-#exit
+
+# exit
+
(exit)
+
(exit obj)
+
Exit the program.
-#file-exists?
+
+# file-exists?
+
(file-exists? string)
+
Determine if the file with filename `string` exists.
-#integer->char
+
+# integer->char
+
(integer->char x)
+
Return a character with the same value as the given integer.
-#integer?
+
+# integer?
+
(integer? obj)
+
Determine if the given object is an integer.
-#length
+
+# length
+
(length list)
+
Returns the length of `list`.
-#list->string
+
+# list->string
+
(list->string list)
+
Convert the given list of characters to a string.
-#list->vector
+
+# list->vector
+
(list->vector list)
+
Convert the given list to a vector.
-#make-bytevector
+
+# make-bytevector
+
(make-bytevector k)
+
(make-bytevector k byte)
+
Create a new bytevector of length `k`. If `byte` is provided, each element of the bytevector will be assigned this value.
-#make-vector
+
+# make-vector
+
(make-vector k)
+
(make-vector k obj)
+
Create a new vector of length `k`. If `obj` is provided, each element of the vector will be assigned this value.
-#null?
+
+# null?
+
(null? obj)
+
Determine if the given object is the empty list.
-#number->string
+
+# number->string
+
(number->string z)
+
(number->string z radix)
+
Return a string representation of the given number.
-#number?
+
+# number?
+
(number? obj)
+
Determine if the given object is a number.
-#open-input-file
+
+# open-input-file
+
(open-input-file string)
+
Return an input port that can deliver data from the file `string`.
-#open-output-file
+
+# open-output-file
+
(open-output-file string)
+
Return an output port that can deliver data from the file `string`.
-#pair?
+
+# pair?
+
(pair? obj)
+
Determine if `obj` is a pair.
-#peek-char
+
+# peek-char
+
(peek-char)
+
(peek-char port)
+
Returns the next character available from the input port. If no characters are available and end-of-file object is returned.
-#port?
+
+# port?
+
(port? obj)
+
Determine if `obj` is a port.
-#procedure?
+
+# procedure?
+
(procedure? obj)
+
Determine if `obj` is a function.
-#read-char
+
+# read-char
+
(read-char)
+
(read-char port)
+
Read a character from the input port.
-#real?
+
+# real?
+
(real? obj)
+
Determine if `obj` is a real number.
-#set-car!
+
+# set-car!
+
(set-car! pair obj)
+
Set the car field of `pair` to `obj`.
-#set-cdr!
+
+# set-cdr!
+
(set-cdr! pair obj)
+
Set the car field of `pair` to `obj`.
-#string->number
+
+# string->number
+
(string->number string)
+
(string->number string radix)
+
Return the number represented by the given string.
-#string->symbol
+
+# string->symbol
+
(string->symbol string)
+
Convert given string to a symbol.
-#string-append
+
+# string-append
+
(string-append string ...)
+
Returns a new string whose characters are the concatenation of the given strings.
-#string-cmp
+
+# string-cmp
+
(string-cmp string1 string2)
+
Compare both strings and return 0 if the strings are equal, a positive number if `string1` is "greater than" `string2`, and a negative number otherwise.
-#string-length
+
+# string-length
+
(string-length string)
+
Return the length of `string`.
-#string-ref
+
+# string-ref
+
(string-ref string k)
+
Return the character at position `k` of `string`.
-#string-set!
+
+# string-set!
+
(string-set! string k char)
+
Set the character of `string` at position `k` to `char`.
-#string?
+
+# string?
+
(string? obj)
+
Determine if `obj` is a string.
-#substring
+
+# substring
+
(substring string start end)
+
Return a newly-allocatd string consisting of the characters of `string` starting from position `start` and ending at `end`.
-#symbol->string
+
+# symbol->string
+
(symbol->string symbol)
+
Return a string based on the given symbol.
-#symbol?
+
+# symbol?
+
(symbol? obj)
+
Determine if `obj` is a symbol.
-#system
+
+# system
+
(system string)
+
Execute an OS command `string` and return the resulting status as a number.
-#vector-length
+
+# vector-length
+
(vector-length vector)
+
Return the length of `vector`.
-#vector-ref
+
+# vector-ref
+
(vector-ref vector k)
+
Return the element at position `k` of `vector`.
-#vector-set!
+
+# vector-set!
+
(vector-set! vector k obj)
+
Set the element of `vector` at position `k` to `obj`.
-#vector?
+
+# vector?
+
(vector? obj)
+
Determine if `obj` is a vector.
+
diff --git a/docs/api/scheme/cyclone/primitives.md b/docs/api/scheme/cyclone/primitives.md
index 1942c746..96ae1bd3 100644
--- a/docs/api/scheme/cyclone/primitives.md
+++ b/docs/api/scheme/cyclone/primitives.md
@@ -12,7 +12,7 @@ The `(scheme cyclone primitives)` library contains information about Cyclone's s
- [`*primitives-num-args*`](#primitives-num-args)
- [`prim-call?`](#prim-call)
- [`prim->c-func`](#prim-c-func)
-- [`prim/data-arg?`](#primdata-arg)
+- [`prim/data-arg?`](#prata-arg)
- [`prim/c-var-assign`](#primc-var-assign)
- [`prim/cvar?`](#primcvar)
- [`prim:check-arg-count`](#primcheck-arg-count)
diff --git a/docs/api/scheme/process-context.md b/docs/api/scheme/process-context.md
index 9757cf8d..0c8d83d5 100644
--- a/docs/api/scheme/process-context.md
+++ b/docs/api/scheme/process-context.md
@@ -14,25 +14,25 @@ For more information see the [R7RS Scheme Specification](../../r7rs.p
- [`get-environment-variable`](#get-environment-variable)
- [`get-environment-variables`](#get-environment-variables)
-# command-line
+#command-line
(command-line)
Returns the command line passed to the program as a list of strings.
-# emergency-exit
+#emergency-exit
(emergency-exit)
Terminates the program immediately. This is an alias of `exit`.
-# get-environment-variable
+#get-environment-variable
(get-environment-variable name)
Return the value of the given environment variable.
-# get-environment-variables
+#get-environment-variables
(get-environment-variables)