# The Tectonic Typesetting System (Aware Software fork)

> **`aware-tectonic`** is the Aware Software fork of the [`tectonic`] crate,
> version 0.16.9. It is identical to upstream except that its bundle crate
> ([`aware-tectonic-bundles`]) does not contact the network when the bundle
> cache is warm — upstream re-fetches the bundle digest on every run. The
> library name is kept as `tectonic`, so `use tectonic::…` works unchanged.
> Maintained at <https://github.com/ikhomyakov/tectonic>.
>
> [`tectonic`]: https://crates.io/crates/tectonic
> [`aware-tectonic-bundles`]: https://crates.io/crates/aware-tectonic-bundles

The `tectonic` crate delivers a modernized, complete, self-contained
[TeX](https://en.wikipedia.org/wiki/TeX)/[LaTeX](https://www.latex-project.org/)
engine, powered by [XeTeX](http://xetex.sourceforge.net/) and
[TeXLive](https://www.tug.org/texlive/). It provides a CLI and ties together the
functionality of a large collection of sub-crates.

- [User Website](https://tectonic-typesetting.github.io/)
- [The Tectonic Book](https://tectonic-typesetting.github.io/book/latest/)
- [Installation](https://tectonic-typesetting.github.io/book/latest/installation/) of the CLI
- [Detailed Build Instructions][build-inst]
- [API Documentation](https://docs.rs/tectonic/)
- [Issues](https://github.com/tectonic-typesetting/tectonic/issues/)
- [Changelog](https://github.com/tectonic-typesetting/tectonic/blob/release/CHANGELOG.md)

[build-inst]: https://tectonic-typesetting.github.io/book/latest/howto/build-tectonic/


## Building Tectonic

The Tectonic crates collectively depend on a relatively large number of
third-party libraries. See [the Book’s build instructions][build-inst] for a
listing and guidance on setting up the build.

The crate build can be customized with the following [Cargo features]:

[Cargo features]: https://doc.rust-lang.org/cargo/reference/features.html

- `external-harfbuzz`: build against an external version of the [Harfbuzz] text
  shaping library, rather than a vendored version (the default)
- `geturl-curl`: use the [curl] crate to implement HTTP requests. In order for
  this to take effect, you must use `--no-default-features` because
  `geturl-reqwest` is a default feature and it takes precedence
- `geturl-reqwest`: use the [reqwest] crate to implement HTTP requests (enabled
  by default)
- `native-tls-vendored`: if using [reqwest], activate the `vendored` option in
  the [native-tls] crate, causing OpenSSL to be vendored

[Harfbuzz]: https://harfbuzz.github.io/
[curl]: https://docs.rs/curl/
[reqwest]: https://docs.rs/reqwest/
[native-tls]: https://github.com/sfackler/rust-native-tls

[The Book][build-inst] describes some less-used features and provides a bit more
detail.


## Sub-crates

The main `tectonic` crate ties together the functionality of a number of
sub-crates:

- [`tectonic_bridge_core`](https://crates.io/crates/tectonic_bridge_core)
- [`tectonic_bridge_flate`](https://crates.io/crates/tectonic_bridge_flate)
- [`tectonic_bridge_freetype2`](https://crates.io/crates/tectonic_bridge_freetype2)
- [`tectonic_bridge_graphite2`](https://crates.io/crates/tectonic_bridge_graphite2)
- [`tectonic_bridge_harfbuzz`](https://crates.io/crates/tectonic_bridge_harfbuzz)
- [`tectonic_bridge_icu`](https://crates.io/crates/tectonic_bridge_icu)
- [`tectonic_bundles`](https://crates.io/crates/tectonic_bundles)
- [`tectonic_cfg_support`](https://crates.io/crates/tectonic_cfg_support)
- [`tectonic_dep_support`](https://crates.io/crates/tectonic_dep_support)
- [`tectonic_docmodel`](https://crates.io/crates/tectonic_docmodel)
- [`tectonic_engine_bibtex`](https://crates.io/crates/tectonic_engine_bibtex)
- [`tectonic_engine_xdvipdfmx`](https://crates.io/crates/tectonic_engine_xdvipdfmx)
- [`tectonic_engine_xetex`](https://crates.io/crates/tectonic_engine_xetex)
- [`tectonic_errors`](https://crates.io/crates/tectonic_errors)
- [`tectonic_geturl`](https://crates.io/crates/tectonic_geturl)
- [`tectonic_io_base`](https://crates.io/crates/tectonic_io_base)
- [`tectonic_pdf_io`](https://crates.io/crates/tectonic_pdf_io)
- [`tectonic_status_base`](https://crates.io/crates/tectonic_status_base)
- [`tectonic_xdv`](https://crates.io/crates/tectonic_xdv)
- [`tectonic_xetex_layout`](https://crates.io/crates/tectonic_xetex_layout)
