docassemble is a free, open-source expert system for guided
interviews and document assembly. It provides a web site that
conducts interviews with users. Based on the information gathered,
the interviews can present users with documents in PDF, RTF, or
DOCX format, which users can download or e-mail.
docassemble was created by a lawyer/computer programmer for
purposes of automating the practice of law, but it is a
general-purpose platform that can find applications in a variety of
Though the name emphasizes the document assembly feature,
docassemble interviews do not need to assemble a document; they
might submit an application, direct the user to other resources on the
internet, store user input, or simply provide the user with
Interviews are authored as YAML files. Within the YAML files, the
text of the interview questions and documents is formatted with
Markdown, and the logic of the interview flow is expressed with
if/then/else statements in Python.
YAML, Markdown, and Python? Sounds scary!
YAML is a text format for expressing information in a way that is
both human-readable and machine readable.
Markdown is a text format for expressing typographical formatting.
For example, if you write this Markdown text:
Python is a language designed to be readable and easy to learn.
Authors do not need to have any prior experience with Python or
computer programming in order to create docassemble interviews.
The only Python statements authors may need to write are if/then/else
statements that are very close to plain English. For example:
Interview authors do not have to design the “flow” of the interview;
docassemble will automatically determine what questions to ask,
and the order in which to ask them, based on what information is
necessary to gather. The system will refrain from asking unnecessary
questions. For example, if the interview contains a conditional
statement such as:
then the user will be asked if he is disabled, and will only be asked
for his age if he says he is not disabled. Authors need to provide a
question for every variable (e.g., there need to be questions that
determine user.is_disabled and user.age) but docassemble will
automatically figure out when and whether to ask those questions.
This allows authors to concentrate on the end result rather than
worrying about how to construct the interview process. Authors who
are lawyers can “practice at the top of their license” by spending
their time thinking about the law (a lawyer function) rather than
thinking about the interview process (a non-lawyer function).