# Overview

Qcore input consists of three things:

• Commands: command(...)
• Options: option = <value>
• Result assignments: foo := command(...)

Commands can have subcommands and options, and commands at the top level are the executed tasks.

For example, we can optimize the geometry of the water molecule using B97-3c with the input

optimize(
structure(molecule = water)
dft(xc = 'b97-3c')
)


Here structure is a subcommand of the optimize command, and specifies the initial structure (see the documentation for more ways to specify structures). And dft is also a subcommand that in this case specifies details of the underlying method.

A few other useful miscellany:

• Strings are given with single quote: print(message = 'hello world')
• But the quotes are optional for single-word strings: print(message = hello)
• Comments are started using ! and run to the end of the line
• Spacing doesn't matter, but we like space around = and := and 2-space indent!

Complex input files can be built with any number of top-level commands, and with information flowing from one command to another through the result assignment mechanism.

Even more complex workflows can be built building on the features to import and export json results, and to return all assigned results by calling qcore -f json.

Additional ways to get started with Qcore can be found in the tutorial.