Command Line

To execute Wyam you need to run either wyam (if you installed it as a global tool) or dotnet /path/to/wyam/Wyam.dll (if you downloaded the ZIP archive) followed by any Wyam arguments. If you don't specify any arguments, the root folder will be set to the current folder and if a file named config.wyam is found, it will be used as the configuration file. You can also specify a root folder that's different than the current folder after the wyam command. For example:

wyam

Or:

wyam C:\MySite

There are several different available commands (use --help or -? to see them):

>wyam --help            

usage:  <command> [<args>]                                                
                                                                          
    build      Runs the build process (this is the default command).      
    new        Scaffolds the given recipe into a specified path.          
    preview    Runs the preview server without generating anything.       
    help       Displays various help messages.                            

Each command has its own set of options. The main command that gets executed by default is build which builds the site given the options you specify:

>wyam build --help

usage:  build [-v] [--attach] [-w] [-p [arg]] [--force-ext]                     
        [--virtual-dir <arg>] [--preview-root <arg>] [-i <arg>...]              
        [-o <arg>] [-c <arg>] [-u] [--use-local-packages]                       
        [--use-global-sources] [--packages-path <arg>] [--output-script]        
        [--verify-config] [--noclean] [--nocache] [-l [arg]]                    
        [-g <arg>...] [--initial <arg>...] [--ns <arg>...] [-r <arg>]           
        [-a <arg>...] [-t <arg>] [-n <arg>...] [--] <root>                      
                                                                                
    -v, --verbose                    Turns on verbose output showing            
                                     additional trace message useful for        
                                     debugging.                                 
    --attach                         Pause execution at the start of the        
                                     program until a debugger is                
                                     attached.                                  
    -w, --watch                      Watches the input folder for any           
                                     changes.                                   
    -p, --preview [arg]              Start the preview web server on the        
                                     specified port (default is 5080).          
    --force-ext                      Force the use of extensions in the         
                                     preview web server (by default,            
                                     extensionless URLs may be used).           
    --virtual-dir <arg>              Serve files in the preview web             
                                     server under the specified virtual         
                                     directory.                                 
    --preview-root <arg>             The path to the root of the preview        
                                     server, if not the output folder.          
    -i, --input <arg>...             The path(s) of input files, can be         
                                     absolute or relative to the current        
                                     folder.                                    
    -o, --output <arg>               The path to output files, can be           
                                     absolute or relative to the current        
                                     folder.                                    
    -c, --config <arg>               Configuration file (by default,            
                                     config.wyam is used).                      
    -u, --update-packages            Check the NuGet server for more            
                                     recent versions of each package and        
                                     update them if applicable.                 
    --use-local-packages             Toggles the use of a local NuGet           
                                     packages folder.                           
    --use-global-sources             Toggles the use of the global NuGet        
                                     sources (default is false).                
    --packages-path <arg>            The packages path to use (only if          
                                     use-local is true).                        
    --output-script                  Outputs the config script after            
                                     it's been processed for further            
                                     debugging.                                 
    --verify-config                  Compile the configuration but do           
                                     not execute.                               
    --noclean                        Prevents cleaning of the output            
                                     path on each execution.                    
    --nocache                        Prevents caching information during        
                                     execution (less memory usage but           
                                     slower execution).                         
    -l, --log [arg]                  Log all trace messages to the              
                                     specified log file (by default,            
                                     wyam-[datetime].txt).                      
    -g, --global <arg>...            Specifies global metadata as a             
                                     sequence of key=value pairs. Use           
                                     the syntax [x,y] to specify array          
                                     values.                                    
    --initial <arg>...               Specifies initial document metadata        
                                     as a sequence of key=value pairs.          
                                     Use the syntax [x,y] to specify            
                                     array values.                              
    --ns, --nuget-source <arg>...    Specifies an additional package            
                                     source to use.                             
    -r, --recipe <arg>               Specifies a recipe to use. See             
                                     below for syntax details.                  
    -a, --assembly <arg>...          Adds an assembly reference by name,        
                                     file name, or globbing pattern.            
    -t, --theme <arg>                Specifies a theme to use. See below        
                                     for syntax details.                        
    -n, --nuget <arg>...             Adds a NuGet package (downloading          
                                     and installing it if needed). See          
                                     below for syntax details.                  
    <root>                           The folder (or config file) to use.        
                                                                                
--recipe usage:                                                                 
                                                                                
    -i, --ignore-known-packages    Ignores (does not add) packages for          
                                   known recipes.                               
    <recipe>                       The recipe to use.                           
                                                                                
--theme usage:                                                                  
                                                                                
    -i, --ignore-known-packages    Ignores (does not add) packages for          
                                   known themes.                                
    <theme>                        The theme to use.                            
                                                                                
--nuget usage:                                                                  
                                                                                
    -p, --prerelease         Specifies that prerelease packages are             
                             allowed.                                           
    -u, --unlisted           Specifies that unlisted packages are               
                             allowed.                                           
    -v, --version <arg>      Specifies the version range of the package         
                             to use.                                            
    -l, --latest             Specifies that the latest available version        
                             of the package should be used (this will           
                             always trigger a request to the sources).          
    -s, --source <arg>...    Specifies the package source(s) to get the         
                             package from.                                      
    -e, --exclusive          Indicates that only the specified package          
                             source(s) should be used to find the               
                             package.                                           
    <package>                The package to install.                              

You can scaffold a new wyam project, using new:

>wyam new -r Blog -help

usage:  new [-v] [--attach] [-u] [--use-local-packages]
        [--use-global-sources] [--ignore-default-sources]
        [--packages-path <arg>] [-i <arg>] [-c <arg>] [--ns <arg>...]
        [-n <arg>...] [-r <arg>] [-a <arg>...] [--] <root>

    -v, --verbose                    Turns on verbose output showing
                                     additional trace message useful for
                                     debugging.
    --attach                         Pause execution at the start of the
                                     program until a debugger is
                                     attached.
    -u, --update-packages            Check the NuGet server for more
                                     recent versions of each package and
                                     update them if applicable.
    --use-local-packages             Toggles the use of a local NuGet
                                     packages folder.
    --use-global-sources             Toggles the use of the global NuGet
                                     sources (default is false).
    --ignore-default-sources         Ignores default NuGet sources like
                                     the NuGet Gallery (default is
                                     false).
    --packages-path <arg>            The packages path to use (only if
                                     use-local is true).
    -i, --input <arg>                The path of input files, can be
                                     absolute or relative to the current
                                     folder.
    -c, --config <arg>               Configuration file (by default,
                                     config.wyam is used).
    --ns, --nuget-source <arg>...    Specifies an additional package
                                     source to use.
    -n, --nuget <arg>...             Adds a NuGet package (downloading
                                     and installing it if needed). See
                                     below for syntax details.
    -r, --recipe <arg>               Specifies a recipe to use. See
                                     below for syntax details.
    -a, --assembly <arg>...          Adds an assembly reference by name,
                                     file name, or globbing pattern.
    <root>                           The folder (or config file) to use.

--nuget usage:

    -p, --prerelease         Specifies that prerelease packages are
                             allowed.
    -u, --unlisted           Specifies that unlisted packages are
                             allowed.
    -v, --version <arg>      Specifies the version range of the package
                             to use.
    -l, --latest             Specifies that the latest available version
                             of the package should be used (this will
                             always trigger a request to the sources).
    -s, --source <arg>...    Specifies the package source(s) to get the
                             package from.
    -e, --exclusive          Indicates that only the specified package
                             source(s) should be used to find the
                             package.
    <package>                The package to install.

--recipe usage:

    -i, --ignore-known-packages    Ignores (does not add) packages for
                                   known recipes.
    <recipe>                       The recipe to use.

Nested Arguments

Note that some of the arguments such as --nuget are "nested" and must be contained in quotes if they contain options of their own (and any inner quotes must be escaped). For example, the following command will load a Nuget package named Foo.Bar:

wyam --nuget Foo.Bar 

However, if you want to specify any additional options for the --nuget option such as to accept pre-release packages, you need to surround the whole value in quotes:

wyam --nuget "Foo.Bar -p" 

Embedded Web server

Wyam includes an embedded web server you can use to test your site locally. It includes support for ignoring file extensions and implicitly delivering a index.html page if one exists. This is similar to the convention a lot of static site hosts such as GitHub Pages uses.

To activate the preview server, use the -p or --preview argument. This will make the site available on a URL like http://localhost:5080. If you prefer a different port, add that after the preview argument. This will cause the Wyam process to remain open in your console until you hit a key to exit.

You can change where the preview server pulls files from with the --preview-root argument.

You can serve files under a virtual directory with the --virtual-dir option. This will make all of files on disk appear as if they were under the specified path on the web server. Requesting any resources or pages outside of this virtual directory will result in 404 Not Found errors.

File Watching

You can turn on file watching with the -w or --watch argument. When file watching is enabled, the generation will be re-run any time a file in one of the input folders changes. Some modules can cache information from one generation to the next, so re-generations after a watched file changes should be somewhat faster. Note that because Wyam makes no assumptions about dependencies between files, modules, and pipelines, it is not possible to only regenerate the effects of the file that changed. We don't know what modules that file may have impacted indirectly and therefore need to regenerate everything (it's possible that in the future this could get smarter, but it's a very hard problem). Also note that some modules like Less may not reflect changes to their underlying files due to the mechanics of the module.

LiveReload

Requires Wyam 0.17.0 or greater.

Wyam comes with LiveReload support built-in and it is automatically enabled when the preview server is used while file watching. LiveReload works by injecting JavaScript into HTML pages when served using the embedded preview server, no changes to your content need to be made. When any input files are re-generated, Wyam will refresh all connected browsers automagically.

The LiveReload server listens on port 35729 by default. When using LiveReload in conjunction with the preview server, ensure that any relevant HTML files have a closing <body/> tag as this is required for <script> injection.

Paths

The paths that Wyam uses can be specified on the command line. This includes the input path(s) specified by --input where Wyam will look for files, the output path specified by --output where Wyam will place the output of modules like WriteFiles, the config file path specified by --config where Wyam will look for a configuration file, and the root path specified as the final argument that Wyam considers the base path for all other relative paths. By default, the root path is set to the path from where Wyam is executed. You may want to specify a different base path (for example, if running from a build script or as part of a larger process). In this case, just supply an alternate absolute path at the end of the command line. This new root path will be the base for all other relative paths including input and output paths. This is a good way to ensure consistency regardless of which path Wyam is run from.

Note that these paths can also be specified from within your configuration script. From there you can set FileSystem.OutputPath, FileSystem.RootPath, or call FileSystem.InputPaths.Add().

GitHub