<p align="center">
<a href="https://github.com/hexe-rs/Hexe/">
<img
src="https://raw.githubusercontent.com/hexe-rs/Hexe/assets/Icon.png"
alt="Hexe"
width="250"
>
</a>
<br>
A pure <a href="https://www.rust-lang.org">Rust</a> chess engine
</p>
----
<p align="center"><em>(pronounced "Hekseh")</em></p>
[![Travis Status][travis-badge]][travis]
[![AppVeyor Status][appv-badge]][appv]

## What is Hexe?
Hexe is an open-source chess engine written in Rust. It is written primarily as
a library, with an executable that directly utilizes that library. This project
is split into two packages (crates):
- **[ lib + bin ]** [`hexe`]: The chess engine itself
- Specialized for Hexe's use cases
- Contains all code used to run the executable
- **[ lib ]** [`hexe_core`]: The chess engine's building blocks
- Supports `no_std` builds
- May be used by other chess programs for ease of code reuse
## Why "Hexe"?
1. "Hexe" is German for witch. It denotes the use of magic bitboards within this
project.
2. It refers to [Clarke's Third Law][clarke-laws]: "Any sufficiently advanced
technology is indistinguishable from magic."
3. If she weighs the same as a duck... she's made of wood. And therefore...
## Features
The goal of this project is to have the following features:
### [`hexe`]
- [x] UCI compatibility
- [ ] Aspiration Windows
- [ ] Iterative Deepening
- [ ] Killer Moves
- [ ] Minimax with Alpha-Beta pruning
- [ ] Null Move Heuristic
- [ ] Transposition Tables
- [ ] Work-stealing multi-threaded search
### [`hexe_core`]
- [x] Bitboard and square-to-piece map chess board representations
- [x] Lookup tables and magic Bitboards without runtime initialization
### Cross-Platform Compatibility
Hexe is written to be available for the main platforms that Rust compiles to.
`hexe` and `hexe_core` are both automatically tested—separately—against all
[Tier 1 platforms][tier1]. As of this writing, they are:
| macOS | 10.7+, Lion+ | 32/64 |
| MinGw/MSVC | Windows 7+ | 32/64 |
| Linux | 2.6.18+ | 32/64 |
`hexe_core` is designed to not require [the Rust standard library][std]. Because
of this, it is compatible with all platforms that stable Rust compiles to.
### Cross-Language Compatibility
Hexe wrappers are currently available in the following languages:
- Swift
- [Hexe.swift](https://github.com/hexe-rs/Hexe.swift/)
## License
Hexe is licensed under either of
- [Apache License (Version 2.0)][license-apache]
- [MIT License][license-mit]
at your choosing.
[`hexe`]: https://docs.rs/hexe
[`hexe_core`]: https://docs.rs/hexe_core
[travis]: https://travis-ci.org/hexe-rs/Hexe
[travis-badge]: https://travis-ci.org/hexe-rs/Hexe.svg?branch=master
[appv]: https://ci.appveyor.com/project/nvzqz/hexe
[appv-badge]: https://ci.appveyor.com/api/projects/status/github/hexe-rs/Hexe?svg=true
[license-apache]: https://github.com/hexe-rs/Hexe/blob/master/LICENSE-APACHE
[license-mit]: https://github.com/hexe-rs/Hexe/blob/master/LICENSE-MIT
[std]: https://doc.rust-lang.org/std/
[tier1]: https://forge.rust-lang.org/platform-support.html#tier-1
[clarke-laws]: https://en.wikipedia.org/wiki/Clarke%27s_three_laws