---
name: "sievec"
section: "1"
platform: "linux"
package: "pigeonhole"
version: "2.4.5-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/sievec"
---

# sievec(1)

Pigeonhole's Sieve script compiler

## NAME

**sievec** - Pigeonhole's Sieve script compiler

## SYNOPSIS

**sievec** \[*options*\] *script-file* \[*out-file*\]

## DESCRIPTION

The **sievec** command is part of Pigeonhole ([pigeonhole(7)](/pigeonhole/7.md)), which adds Sieve (RFC 5228) and ManageSieve (RFC 5804) support to Dovecot ([dovecot(1)](/dovecot/1.md)).

Using the **sievec** command, Sieve scripts can be compiled into a binary representation. The resulting binary can be used directly to process e-mail messages during the delivery process. The delivery of mail messages and - by means of the LDA Sieve plugin - also the execution of Sieve scripts is performed by Dovecot's local delivery agent (LDA) called [dovecot-lda(1)](/dovecot-lda/1.md).

Usually, it is not necessary to compile the Sieve script manually using **sievec**, because [dovecot-lda(1)](/dovecot-lda/1.md) will do this automatically if the binary is missing. However, in some cases [dovecot-lda(1)](/dovecot-lda/1.md) does not have permission to write the compiled binary to disk, forcing it to recompile the script every time it is executed. Using the **sievec** tool, this can be performed manually by an authorized user to increase performance.

The Pigeonhole Sieve implementation recognizes files with a **.sieve** extension as Sieve scripts and corresponding files with a **.svbin** extension as the associated compiled binary. This means for example that Dovecot's LDA process will first look for a binary file "dovecot.svbin" when it needs to execute "dovecot.sieve". It will compile a new binary when it is missing or outdated.

The **sievec** command is also useful to verify Sieve scripts before using. Additionally, with the **-d** option it can output a textual (and thus human-readable) dump of the generated Sieve code to the specified file. The output is then identical to what the [sieve-dump(1)](/sieve-dump/1.md) command produces for a stored binary file. This output is mainly useful to find bugs in the compiler that yield corrupt binaries.

## OPTIONS

- **-c** *config-file*

  Alternative Dovecot configuration file path.

- **-d**

  Don't write the binary to *out-file*, but write a textual dump of the binary instead. In this context, the *out-file* value '-' has special meaning: it causes the textual dump to be written to **stdout**. The *out-file* argument may also be omitted, which has the same effect as '-'. The output is identical to what the [sieve-dump(1)](/sieve-dump/1.md) command produces for a compiled Sieve binary file. Note that this option is not allowed when the *out-file* argument is a directory.

- **-D**

  Enable Sieve debugging.

- **-o** *setting***=***value*

  Overrides the configuration *setting* from */etc/dovecot/dovecot.conf* and from the userdb with the given *value*. In order to override multiple settings, the **-o** option may be specified multiple times.

- **-u** *user/mask*

  Run the *command* only for the given *user*. It's also possible to use '**\***' and '**?**' wildcards (e.g. -u \*@example.org).

- **-x** *auth\_info*

  *auth\_info* specifies additional conditions for the **user** command. The *auth\_info* option string has to be given as *name* **=** *value* pair. For multiple conditions the **-x** option could be supplied multiple times.

  Possible names for the *auth\_info* are:

  **service**

  The service for which the userdb lookup should be tested. The value may be the name of a service, commonly used with Dovecot. For example: **imap**, **pop3** or **smtp**.

  **session**

  Session identifier.

  **lip**

  The local IP address (server) for the test.

  **rip**

  The remote IP address (client) for the test.

  **lport**

  The local port, e.g. 143

  **rport**

  The remote port, e.g. 24567

  **real\_lip**

  The local IP to which the client connected on this host.

  **real\_rip**

  The remote IP where client connected from to this host.

  **real\_lport**

  The local port to which client connected to to this host.

  **real\_rport**

  The remote port from where the client connected from to this host.

  **forward\_\<field\>**

  Field to forward as %{forward:field} to auth process.

## ARGUMENTS

*script-file*

Specifies the script to be compiled. If the *script-file* argument is a directory, all files in that directory with a *.sieve* extension are compiled into a corresponding *.svbin* binary file. The compilation is not halted upon errors; it attempts to compile as many scripts in the directory as possible. Note that the **-d** option and the *out-file* argument are not allowed when the *script-file* argument is a directory.

*out-file*

Specifies where the (binary) output is to be written. This argument is optional. If this argument is omitted, a binary compiled from \<scriptname\>.sieve is saved as \<scriptname\>.svbin. If this argument is omitted and **-b** is specified, the binary dump is output to **stdout**.

## EXIT STATUS

**sievec** will exit with one of the following values:

**0**

Compile was successful. (EX\_OK, EXIT\_SUCCESS)

**1**

Operation failed. This is returned for almost all failures. (EXIT\_FAILURE)

**64**

Invalid parameter given. (EX\_USAGE)

**67**

User does not exist.

**68**

Input file, address or other resource does not exist.

**73**

Cannot create output file.

**77**

Permission error.

**78**

Configuration error.

**127**

Unknown error.

## FILES

*/etc/dovecot/dovecot.conf*

Dovecot's main configuration file.

*/etc/dovecot/conf.d/90-sieve.conf*

Sieve interpreter settings (included from Dovecot's main

configuration file)

## REPORTING BUGS

Report bugs, including *doveconf -n* output, to the Dovecot Mailing List *⟨dovecot@dovecot.org⟩*. Information about reporting bugs is available at: *⟨https://dovecot.org/bugreport.html⟩*

## SEE ALSO

[dovecot(1)](/dovecot/1.md), [dovecot-lda(1)](/dovecot-lda/1.md), [sieve-dump(1)](/sieve-dump/1.md), [sieve-filter(1)](/sieve-filter/1.md), [sieve-test(1)](/sieve-test/1.md), [pigeonhole(7)](/pigeonhole/7.md)
