Charly Programming Language interpreter repl programming-language
0.3.0 Latest release released

Build Status Version License


The Charly programming language

This is my try at writing an interpreter of a dynamic language from scratch with my bare hands. It is implemented in Crystal. It is absolutely not production-ready and is meant only for my own learning-purposes.

Syntax and language guide

Take a look at the official website for an introduction to the language.

Using the built-in REPL

You can use the arrow keys to navigate the cursor. Up and down will scroll through the history.

$ charly repl
> 2 + 2
> "test"
> $ * 4
> func increment(a) { a + 1 }
> increment(25)
> print("hello world")
hello world
> .exit

If you need to pass arguments or flags to a REPL session you can do so via the repl command

$ charly repl these are all arguments
[these, are, all, arguments]

OS Support

I'm developing on macOS 10.12 so it should work without any problems on that. The CI Build runs on Ubuntu 12.04.5 LTS.


  1. Install Crystal

  2. Clone this repo (git clone

  3. Run

You will be prompted for your admin password (used to copy to /usr/local/bin).

After that you need to set the CHARLYDIR environment variable. Just add the following line to your .bashrc, .zshrc, etc. Replace the path with the path to the Charly source code (e.g The path to the git repo).

export CHARLYDIR=~/GitHub/charly-lang/charly

You can also build the interpreter via the following command:

$ mkdir bin
$ crystal build src/ --release -o bin/charly

This will place the executable in the bin folder.

CLI options

$ charly -v
Charly 0.3.0 [ee05bdf] (11. February 2017)

$ charly -h
Usage: charly [filename] [flags] [arguments]
    -f FLAG, --flag FLAG             Set a flag
    -h, --help                       Print this help message
    -v, --version                    Prints the version number
    --license                        Prints the license

    ast                              Display the AST of the userfile
    dotdump                          Dump dot language displaying the AST
    tokens                           Display tokens of the userfile
    lint                             Don't execute after parsing (linting)

29 internal methods are loaded


  github: charly-lang/charly
  version: ~> 0.3.0
License MIT
Crystal none


Dependencies 0

Development Dependencies 0

Dependents 0

Last synced .
search fire star recently