# Producing instrumented source
The `nyc instrument` command can produce instrumented source files.
These files are suitable for client side deployment during end to end testing.
You can either pre-instrument your source, or write instrumented source to a stream.
Run `nyc instrument --help` to display a full list of available command options.
## Pre-instrumented source
You can create pre-instrumented source code by running:
```bash
nyc instrument [output]
```
`` can be any file or directory within the project root directory.
The `[output]` directory is optional and can be located anywhere, if not set the instrumented code will be sent to `stdout`.
For example, `nyc instrument . ./output` will produce instrumented versions of any source files it finds in `.` and store them in `./output`.
The `--delete` option will remove the existing output directory before instrumenting.
The `--in-place` option will allow you to run the instrument command.
The `--complete-copy` option will copy all remaining files from the `input` directory to the `output` directory.
When using `--complete-copy` nyc will not copy the contents of a `.git` folder to the output directory.
**Note:** `--complete-copy` will dereference any symlinks during the copy process, this may stop scripts running properly from the output directory.
## Streaming instrumentation
`nyc instrument ` will stream instrumented source directly to `stdout` and that output can then be piped to another process.
You can use this behaviour to create a server that dynamically instruments files on request.
The following example shows streaming instrumentation middleware capable of instrumenting files on request.
```javascript
app.use((req, res, next) => {
const myOptions = ""
const filename = myHelper.getFilename(req)
const nyc = cp.spawn(`nyc instrument ${myOptions} ${filename}`)
nyc.stdout.pipe(res)
})
```