This is the language reference for the Crystal programming language.
Crystal is a programming language with the following goals:
- Have a syntax similar to Ruby (but compatibility with it is not a goal).
- Be statically type-checked, but without having to specify the type of variables or method parameters.
- Be able to call C code by writing bindings to it in Crystal.
- Have compile-time evaluation and generation of code, to avoid boilerplate code.
- Compile to efficient native code.
Crystal's standard library is documented in the API docs.
Do you consider yourself a helpful person? If you find bugs or sections which need more clarification you're welcome to contribute to this language reference. You can submit a pull request to this repository: https://github.com/crystal-lang/crystal-book
Thank you very much!
There is a separate branch for every minor Crystal release, all deployed alongside each other on https://crystal-lang.org/reference/ Typically, only branches of maintained releases receive updates, i.e. the branch for the most recent Crystal release.
- Changes that apply to the current Crystal release should go into the most recent release/*branch.
- Changes that apply to yet unreleased features should go into master. They'll be part of therelease/*branch for the next release. Themasterbranch is deployed at https://crystal-lang.org/reference/master/
$ git clone https://github.com/crystal-lang/crystal-book
$ cd crystal-book
$ pip install -r requirements.txtLive preview (at http://127.0.0.1:8000):
$ make serve
INFO    -  Building documentation...
INFO    -  Cleaning site directory
INFO    -  Documentation built in 3.02 seconds
INFO    -  Serving on http://127.0.0.1:8000
...Build into the site directory (some functionality won't work if opening the files locally):
$ make buildThis project includes configuration for a reproducible environment via devenv.sh with integrated pre-commit checks.
Live preview (at http://127.0.0.1:8000):
$ devenv up
Building shell ...
pre-commit-hooks.nix: hooks up to date
17:37:13 system  | serve.1 started (pid=6507)
17:37:13 serve.1 | INFO     -  Building documentation...
17:37:13 serve.1 | INFO     -  Cleaning site directory
17:37:16 serve.1 | INFO     -  Documentation built in 2.64 seconds
17:37:16 serve.1 | INFO     -  [17:37:16] Watching paths for changes: 'docs', 'mkdocs.yml'
17:37:16 serve.1 | INFO     -  [17:37:16] Serving on http://127.0.0.1:8000/reference/latest/Build the site:
$ devenv shell build
Building shell ...
pre-commit-hooks.nix: hooks up to date
rm -rf ./site
mkdocs build -d ./site  --strict
INFO     -  Cleaning site directory
INFO     -  Building documentation to directory: ./site
INFO     -  Documentation built in 2.43 secondsEnter the development shell and build the site from there:
$ devenv shell
Building shell ...
Entering shell ...
pre-commit-hooks.nix: hooks up to date
$(devenv) make build
mkdocs build -d ./site  --strict
INFO     -  Cleaning site directory
INFO     -  Building documentation to directory: ./site
INFO     -  Documentation built in 2.43 secondsRun pre-commit checks on the entire repository:
$ devenv ciTo add a page, create a Markdown file in the desired location. Then, add a link in the SUMMARY.md file which acts as the navigation for the language reference.