Skip to content

valum-framework/valum

 
 

Repository files navigation

Valum Web micro-framework

Build Status Documentation Status codecov.io

Valum is a Web micro-framework entirely written in the Vala programming language.

using Valum;
using VSGI;

var app = new Router ();

app.use (basic ());

app.get ("/", (req, res) => {
    res.headers.set_content_type ("text/plain", null);
    return res.extend_utf8 ("Hello world!");
});

Server.@new ("http", handler: app).run ({"app", "--forks=4"});

Installation

The installation process is fully documented in the user documentation.

Features

  • powerful routing mechanism to write expressive Web services:
    • helpers and flags (i.e. Method.GET | Method.POST) for common HTTP methods
    • scoping
    • rule system supporting typed parameters, group, optional and wildcard
    • regular expression with capture extraction
    • automatic HEAD and OPTIONS
    • subrouting
    • status codes through error domains (i.e. throw new Redirection.PERMANENT ("http://example.com/");
    • filtering by composition
    • context to hold states
  • middlewares for subdomains, server-sent events, content negotiation and much more
  • written upon VSGI, an abstraction layer for various protocols:
    • fast, asynchronous and elegant
    • streaming-first API
    • listen on multiple interfaces (e.g. port, UNIX socket, file descriptor) with tight GIO integration
    • support libsoup-2.4 built-in HTTP server, CGI, FastCGI and SCGI out of the box
    • support plugin for custom server implementation
    • fork to scale on multi-core architecture
    • cushion for parsing CLI, logging and running a Web application
  • extensively documented at docs.valum-framework.org

Contributing

Valum is built by the community under the LGPL license, so anyone can use or contribute to the framework.

  1. fork repository
  2. pick one task from TODO.md or GitHub issues
  3. let us know what you will do (or attempt!)
  4. code
  5. make a pull request of your amazing changes
  6. let everyone enjoy :)

We use semantic versionning, so make sure that your changes

  • does not alter api in bugfix release
  • does not break api in minor release
  • breaks api in major (we like it that way!)

Discussions and help

You can get help with Valum from different sources: