#+TITLE: MU INIT
#+MAN_CLASS_OPTIONS: :section-id "@SECTION_ID@" :date "@MAN_DATE@"
#+include: macros.inc

* NAME

mu-init - initialize the *mu* message database

* SYNOPSIS

*mu* [​_COMMON-OPTIONS_​] *init* [​_OPTIONS_​]

* DESCRIPTION

*mu init* is the subcommand for setting up the *mu* message database. After *mu init*
has completed, you can run *mu index*.

* INIT OPTIONS

** -m, --maildir _maildir_
Use _maildir_ as the root-maildir.

By default, *mu* uses the *MAILDIR* environment to find the root-maildir. If it is
not set, it uses _~/Maildir_ if it is an existing directory. If neither of those
can be used, the *--maildir* option is required; it must be an absolute path (but
~~/~ expansion is performed).

** --personal-address _email-address-or-regex_
Specifies that some e-mail address is a /personal/ address. The option can be used
multiple times, to specify all your addresses.

Any message in which at least one of the contact fields matches a personal
address, is considered a `personal' message; this can then be used for filtering
in {{{man-link(mu-find,1)}}}, {{{man-link(mu-cfind,1)}}} and *mu4e*, e.g. to
filter-out mailing list messages.

_email-address-or-regex_ can be either a plain e-mail address (such as
*foo@example.com*), or a basic PCRE regular-expression (see {{{man-link(pcre,3)}}}
for details), wrapped in */* (such as =/foo-.*@example\\.com/=). Depending on your
shell, the argument may need to be quoted.

A note of warning for *mu4e* users: any regular-expressions used with
=--with-address= are also used by *mu4e*. Unfortunately, PCRE regular expressions
are *not* generally compatible with Emacs regular expressions. For instance,
*(foo|bar)* in PCRE syntax has *\(foo\|bar\)* as its Emacs equivalent.

The good news is that *mu4e* can automatically translate the regular-expressions,
if you allow it to, by installing the *pcre2el* Elisp package. See the *mu4e*
documentation for further details.

** --my-address _email-address-or-regex_
Obsolete alias for ~--personal-address~

** --ignored-address _email-address-or-regex_
Specifies that some e-mail address is to be ignored from the contacts-cache (the
option can be used multiple times). Such addresses then cannot be found with
{{{man-link(mu-cfind,1)}}} or in the Mu4e contacts cache.

_my-email-address_ can be either a plain e-mail address or a regexp, just like
for the *--personal-address* option.

** --max-message-size _size_
Specifies the maximum size for an e-mail message. Usually, the default of
100000000 bytes should be fine.

** --batch-size _size_
The number of changes after which they are committed to the database; decreasing
the value reduces the memory requirements, at the cost of make indexing
substantially slower. Usually, the default of 250000 should be fine.

Batch-size 0 is interpreted as `use the default'.

** --support-ngrams
Whether to enable support for using ngrams in indexing and query parsing; this
can be useful for languages without explicit word breaks, such as
Chinese/Japanese/Korean. See *NGRAM SUPPORT* below for details.

** --reinit
Reinitialize the database from an earlier version; that is, create a new empty
database with the existing settings. This cannot be combined with the other *init*
options.

When you have _labels_ defined for messages in your database, *mu* automatically exports those to file for importing later. See *RESTORING LABELS* below.

#+include: "muhome.inc" :minlevel 2

* NGRAM SUPPORT

*mu*'s underlying Xapian database supports `ngrams', which improve searching for
languages/scripts that do not have explicit word breaks, such as Chinese,
Japanese and Korean. It is fairly intrusive, and influences both indexing and
query-parsing; it is not enabled by default, and is recommended only if you need
to search for messages written in such languages.

When enabled, *mu* automatically uses ngrams automatically. Xapian environment
variables such as *XAPIAN_CJK_NGRAM* are ignored.

#+include: "exit-code.inc" :minlevel 1

* RESTORING LABELS

When you have any _labels_ defined for your database, *mu* automatically exports
those to a file in the *mu* cache directory; you see this in the ~--init~ output.

#+begin_example
$ mu init --reinit
exported labels to: /home/user/.cache/mu/mu-export-2025-08-16-13:43:27.txt
#+end_example

You can restore those labels _after_ re-indexing, e.g.,
#+begin_example
$ mu label import /home/user/.cache/mu/mu-export-2025-08-16-13:43:27.txt
#+end_example

Please see {{{man-link(mu-labels,1)}}} for further details.

* EXAMPLE
#+begin_example
$ mu init --maildir=~/Maildir --my-address=alice@example.com --my-address=bob@example.com --ignored-address='/.*reply.*/'
#+end_example

#+include: "prefooter.inc" :minlevel 1

* SEE ALSO

{{{man-link(mu-index,1)}}},
{{{man-link(mu-find,1)}}},
{{{man-link(mu-labels,1)}}},
{{{man-link(mu-cfind,1)}}},
{{{man-link(pcre,3)}}}
