Drizzle is a (currently interpreted) programming language designed as something I would like to use, and used as a way to learn lots of new things.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



Drizzle is my very own programming language, simultaneously developed as a language I would like to use and a never-ending source of things to learn.


This project was originally called Sapphire. I decided to make an organisation for this project as it would surely consist of multiple projects and I really enjoy having projects grouped into Organisations.

However, when I tried to do so, I found that sapphire and sapphire-lang were both taken in terms of names, and there were a few programming language projects named Sapphire on GitHub. So I felt I needed to change the name.

Being a fan of Pokémon, my first thought was Kyogre, the legendary from Pokémon Sapphire. From there I thought of his ability Drizzle, which I thought was a nice name for my language considering I also love rain, so there you go!

(Also I already had made stickers of the logo so I had to stick with blue and stuff >.>)


The goals of the project are (in some particular order):

  • Create a language with a nice syntax that I would like to use.
  • Constantly learn ways to improve the language.
  • Learn about the kind of work that goes into developing production grade languages.
  • Eventually get Drizzle to the point where it can interpret / compile itself.

Project Details

  • Written in Crystal.
    • Drizzle will work off of Crystal's GC.
    • If we decide to write the interpreter in Drizzle later, we'll then have to implement out own GC.
  • Parser (will eventually be) generated using ANTLR for Go and translated into Crystal (like the books I'll be using).
  • Language will initially be interpreted, then will be compiled.
    • When the compiled version starts, the interpreted version will be archived to a protected branch.
  • When language is mature enough, rewrite the interpreter, and later the compiler, in Drizzle.


Some basic extensions that I would like to see built in to the language itself;

  • drizzle docs: Similar to how crystal generates documentation I would like to have Drizzle being able to parse code and generate doc pages
  • drizzle fmt: Similar to tools like gofmt or crystal tool format, I would like it for Drizzle to have a built-in formatter (once we have a style guide in place)
  • drizzle drops: When the language starts to grow, we would need to have some kind of dependency manager built in. Dependencies will be called drops
  • drizzle playground: Seems to be a common thing nowadays, so drizzle could do with one


Here's a basic roadmap for anyone who is interested in what's going on with this project;

  • Write a basic (non-production) version of the interpreter in Crystal, using the interpreter book.
  • Research and learn ANTLR4 and use it to generate a better parser.
    • ANTLR cannot generate Crystal code so instead I intend to have it generate Go code and translate it, like I am doing with the book.
  • Once the compiler book is released, go through that and turn Drizzle into a compiled language.
  • Get Drizzle to the point where it can replace it's Crystal interpreter.
  • Get Drizzle to the point where it can replace it's Crystal compiler.
  • Start trying to add on the extra Drizzle tools.
  • Keep improving stuff.


This project is open to anyone who wants to learn anything about creating programming languages!

A goal for early stages is to keep documentation at a high enough quality that it will hopefully be easy to follow what's going on, but if not then please open an issue!