Skip to content

nevalang/neva

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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

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

Here we define a component 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.