neva icon indicating copy to clipboard operation
neva copied to clipboard

Write programs like message passing graphs and get parallelism for free. Statically typed and compiled to machine code!

Big Header

Flow-Based Programming Language

tests lint

⚠️ Warning: This project is currently under heavy development and is not yet ready for production use.

Neva

A general-purpose flow-based programming language with static types and implicit parallelism. Compiles to machine code and Go.

Website: https://nevalang.org/

Features 🚀

  • Flow-Based Programming
  • Strong Static Typing
  • Implicit Parallelism
  • Compiles to Machine Code, Go and More
  • Clean C-like Syntax
  • Garbage Collection
  • ...And more!

Please note that even though these features are technically implemented, developer-experience may be bad due to the current state of the project. No backward-compatibility guarantees at the time.

Quick Start

Installation

For Mac OS and Linux:

curl -sSL https://raw.githubusercontent.com/nevalang/neva/main/scripts/install.sh | bash

If your device is connected to a chinese network:

curl -sSL https://raw.githubusercontent.com/nevalang/neva/main/scripts/install.sh | bash

For Windows (please note there's an WIP issue with Windows Defender, try manual download from releases if installed won't work):

curl -o installer.bat -sSL https://raw.githubusercontent.com/nevalang/neva/main/scripts/install.bat && installer.bat

Creating a project

neva new test

Running

neva run test/src

You should see the following output:

Hello, World!

What's inside?

If you open test/src/main.neva with your favorite IDE you'll see this

flow Main(start) (stop) {
	nodes { Println }
	:start -> ('Hello, World!' -> println -> :stop)
}

Here we define a flow Main with inport start and outport stop. It contains one node, println, an instance of Println. The network consist of one connection: upon receiving a message from start, "Hello, World!" is sent to println. After printing, the program terminates by signaling stop.

Execute

Now run (make sure you are in the test directory with neva.yml):

neva run test/src # or neva run test/src/main.neva

You should see the following output:

Hello, World!

What's Next?

Roadmap (🚧 WIP)

Nevalang is at an extremely early stage but with the help of community it can become a feature-rich, mature language.

  • Bigger Community and Better Documentation
  • Batteries included stdlib (including Testing Framework)
  • More language features including Pattern-Matching
  • Good DX (Language Server, Debugger, Linter, etc)
  • Go Interop (import Go from Neva and Neva from Go)
  • Visual Programming in VSCode (Neva becomes hybrid langauge)

See backlog for more details

Nevalang needs your help - it currently has just a few maintainers.

Community

Join community. Together we can change programming for the better:

Also please check our CoC.

Contributing

See CONTRIBUTING.md and ARCHITECTURE.md.

Neva is a relatively small and simple language. Don't be intimidated, feel free to dive in and hack around. Some directories have a README.md.

Note that, due to the early stage of development, the documentation can sometimes be outdated. Feel free to reach out to maintainers if you need any help.