Kore is an easy to use web platform for writing scalable web APIs in C.
Its primary goals are security, scalability and allowing rapid development and deployment of such APIs.

Because of this Kore is an ideal candidate for building robust, scalable and secure web things.

Feature rich

Kore comes packed with tons of amazing features that make it awesome to use.
All features are designed so that the secure by default mantra comes first.

  •  TLS with PFS in all major browsers.
  •  Private keys are isolated.
  •  Websocket support.
  •  Built-in parameter validation.
  •  Asynchronous PostgreSQL queries.

and much more.

  •  Fully privilege separated.
  •  Per CPU worker processes.
  •  Easy to use background tasks.
  •  Optional Python support.
  •  Applications can be reloaded on the fly, even while serving content.

Easy to write code for

Kore makes it easy to get started without having to fiddle with build automation tools such as make/cmake thanks to the kodev tool bundled with Kore.

Using the tool you can create, compile and run Kore applications when developing your next big thing. However if you are a Unix wizard who prefers building Makefiles and linking the libraries together yourself or integrating the build of your Kore application into your build system, you can of course do that.

$ kodev create myapp
$ cd myapp
$ kodev run
compiling myapp.c
myapp built succesfully!
[parent]: running on https://127.0.0.1:8888
[parent]: kore is starting up
[wrk 0]: worker 0 started (cpu#0)

Non-complex APIs

A lot of C web frameworks or libraries overcomplicate the APIs applications use in order to create responses, read headers, add headers or deal with request parameters.

Kore takes a no-bullshit approach to this and presents the developer with a clean and easy to use API which makes writing code a breeze and makes the code more readable and understandable.

#include <kore/kore.h>
#include <kore/http.h>

int	page(struct http_request *);

int
page(struct http_request *req)
{
	uint16_t	id;
	const char	*hdr;

	if (http_request_header(req, "x-request", &hdr))
		http_response_header(req, "x-response", hdr);

	http_populate_qs(req);

	if (!http_argument_get_uint16(req, "id", &id)) {
		http_response(req, 400, NULL, 0);
		return (KORE_RESULT_OK);
	}

	kore_log(LOG_INFO, "id parameter: %u", id);
	http_response(req, 200, NULL, 0);

	return (KORE_RESULT_OK);
}

Open source

Kore is open software licensed under the ISC license and is developed in my spare time. If you like Kore please consider donating to the project to support future development.

If you are using Kore commercially please consider becoming a sponsor.

A sponsorship includes:

  • - Ability to sponsor new features.
  • - Priority support for any issues related to Kore.
  • - Your company listed under our sponsors page (optional).

 Sponsors