The V Programming Language

Simple, fast, safe, compiled. For developing maintainable software.

github.com/vlang/v 18k
fn main() { areas := ['game', 'web', 'tools', 'science', 'systems', 'embedded', 'drivers', 'GUI', 'mobile'] for area in areas { println('Hello, $area developers!') } }

Simple language for building maintainable programs

You can learn the entire language by going through the documentation in half an hour, and in most cases there's only one way to do something.

This results in simple, readable, and maintainable code.

Despite being simple, V gives a lot of power to the developer and can be used in pretty much every field, including systems programming, webdev, gamedev, GUI, mobile (wip), science, embedded, etc.

Safety

Performance

  • As fast as C
  • C interop without any costs
  • Minimal amount of allocations
  • Built-in serialization without runtime reflection
  • Compiles to native binaries without any dependencies: a simple web server is only 65 KB

Fast compilation

V compiles between ≈80k (Clang backend) and ≈1 million (x64 and tcc backends) lines of code per second per CPU core.
(Intel i5-7500, SM0256L SSD, no optimization)

V is written in V and compiles itself in under a second.

Small and easy to build compiler

V can be bootstrapped in under a second by compiling its code translated to C with a simple

cc v.c
No libraries or dependencies needed.

For comparison:

Space required   Build time
Go525 MB1m 33s
Rust30 GB45m
GCC8 GB50m
Clang90 GB [0] 60m
Swift70 GB [1] 90m
V< 2 MB [2] <1s

Building V in 0.4 seconds and then using the resulting binary to build itself again:

C translation

V can translate your entire C wip project and offer you the safety, simplicity, and 10-25x compilation speed-up.

std::vector s;
s.push_back("V is ");
s.push_back("awesome");
std::cout << s.size();
mut s := []
s << 'V is '
s << 'awesome'
println(s.len)

A blog post about translating DOOM will be published.

C++ to V translation is at an early stage.

Translating DOOM from C to V and building it in 0.7 seconds:

You can follow the progress and read translated code here: github.com/vlang/doom

Hot code reloading

Get your changes instantly without recompiling.

Since you also don't have to get to the state you are working on after every compilation, this can save a lot of precious minutes of your development time.

github.com/.../examples/hot_reload

Powerful graphics libraries

Cross-platform drawing library built on top of GDI+/Cocoa Drawing, and an OpenGL based graphics library for more complex 2D/3D applications, that will also have the following features:

  • Loading complex 3D objects with textures
  • Camera (moving, looking around)
  • Skeletal animation

DirectX, Vulkan, and Metal support is planned.

A simple example of the graphics library in action is tetris.v.

Native cross-platform GUI library

Build native apps with native controls. You no longer need to embed a browser to develop cross-platform apps quickly.

V has a ui module that uses native GUI toolkits: WinAPI/GDI+ on Windows, Cocoa on macOS. On Linux custom drawing is used.

Coming soon:

  • a Delphi-like visual editor for building native GUI apps
  • iOS/Android support with native controls
  • a declarative API similar to SwiftUI and React Native

github.com/vlang/ui

Volt, a 300 KB Slack client built with V and V ui:

Easy cross compilation

To cross compile your software simply run v -os windows. or v -os linux. No extra steps required, even for GUI and graphical apps!

(Compiling macOS software only works on macOS for now.)

Building V for Windows using V for macOS, and then testing resulting v.exe on a Windows VM:

Painless deployments and dependency management

To build your project, no matter how big, all you need to do is run v .

No more build environments, makefiles, headers, virtual environments, etc.

You get a single statically linked binary that is guaranteed to work on all operating systems (provided you cross compile) without any dependencies.

Installing new libraries is as simple as

		v install ui
		

Run everywhere

V can emit (human readable) C, so you get the great platform support and optimization of GCC and Clang.

Emitting C will always be an option, even after direct machine code generation matures.

V can call C code, and calling V code is possible in any language that has C interop.

REPL

v
>>> import net.http
>>> data := http.get('https://vlang.io/utc_now')?
>>> data.text
1565977541

V Script

for file in ls('build/') {
  rm(file)
}
mv('v.exe', 'build/')

v run deploy.vsh

Read more about V script

Code formatting with vfmt for consistent style

No more arguments about coding styles. There's one official coding style enforced by the vfmt formatter.

All V code bases are guaranteed to use the same style, making it easier to read and change code written by other developers.

v fmt -w hello.v

A built-in code profiler

Build and run your program with

v -profile profile.txt x.v && ./x
and you'll get a detailed list for all function calls: number of calls, average timer per call, total time per call.

Run V in your browser

V programs can be compiled to JavaScript and WASM (for now with Emscripten).

V compiler compiled to WASM and running V programs by translating them to JavaScript:

v-wasm.now.sh

Automatic documentation

Use vdoc to get instant documentation generated directly from the module's source code. No need to keep and update separate documentation.

v doc os

Powerful built-in web framework

github.com/vlang/v/tree/master/vlib/vweb

['/post/:id'] fn (b Blog) show_post(id int) vweb.Result { post := b.posts_repo.retrieve(id) or { return vweb.not_found() } return vweb.view(post) }

V forum is running on Vorum (built with V/vweb).

Built-in ORM

import sqlite struct Customer { id int name string nr_orders int country string } fn main() { db := sqlite.connect('example.sqlite') or { panic('could not create/find example.sqlite') } nr_customers := sql db { select count from Customer } println('number of all customers: $nr_customers') // V syntax can be used to build queries uk_customers := sql db { select from Customer where country == 'uk' && nr_orders > 0 } for customer in uk_customers { println('$customer.id - $customer.name') } // by adding `limit 1` we tell V that there will be // only one object customer := sql db { select from Customer where id == 1 limit 1 } println(customer.name) // insert a new customer new_customer := Customer{name: 'Bob', nr_orders: 10} sql db { insert new_customer into Customer } }

Built in V

V

V itself is written in V.

Volt

Native desktop client for Slack, Skype, Matrix, Telegram, Twitch and many more services.

Filey

Cross-platform file manager with Miller Columns and built-in selective sync with major cloud platforms.

Vid

Open-source 1 MB editor with the performance of Sublime Text.

C/C++ to V translator

This tool already supports C and will soon support the latest standard of notoriously complex C++. It does full automatic conversion to human readable code.

V UI

Cross-platform widget toolkit using native APIs.

Gitly

Open-source light and fast alternative to GitHub/GitLab.

Vorum

Right now it's very basic forum/blogging software, but in the future it will be a full featured light alternative to Discourse.
The V forum runs on Vorum.

vgram

A bot library for Telegram Bot API.

Awesome V

A curated list of awesome V frameworks, libraries and software

Are you using V to build your product or library? Have it added to this list.

Web design by Leah. logo by Sonovice and Don.