/prologue

Full-Stack Web Framework written in Nim.

Primary LanguageNimApache License 2.0Apache-2.0

Build Status Build Status Build Status

License: BSD-3-Clause Version

Prologue

What's past is prologue.

Purpose

Prologue is a Full-Stack Web Framework which is ideal for building elegant and high performance web services.

Current Work

Now we are working on rewriting network infrastructure.

https://github.com/iocrate/netkit

Also working on http2.

https://github.com/nimlight/zest

Documentation

You can read documentation in https://planety.github.io/prologue.

Feature

  • Core

    • Base on httpbeast and asynchttpserver
    • Configure and Settings
    • Context
    • Param and Query Data
    • Form Data
    • Static Files
    • Middleware
    • Simple Route
    • Regex Route
    • CORS Response
    • Signing
    • Cookie
    • Session
    • Cache
    • Startup and Shutdown Events
    • URL Building
    • Data Validation
    • Exception Handler
    • Cross-Site Request Forgery
    • Cross-Site Scripting (XSS) Protection(Karax quote string automatically)
    • Clickjacking Protection
    • Authentication
    • I18n
  • Plugin

    • Minimal OpenApi support
    • Template(Using Karax Native)
    • Test Client(Using httpclient)

Installation

First you should install Nim language which is an elegant and high performance language.Follow the instructions and set environment variables correctly.

Then you can use nimble command to install prologue.

nimble install prologue

Usage

Hello World

# app.nim
import prologue


proc hello*(ctx: Context) {.async.} =
  resp "<h1>Hello, Prologue!</h1>"


let settings = newSettings()
var app = newApp(settings = settings)
app.addRoute("/", hello)
app.run()

Run app.nim.Now the server is running at localhost:8080.

Another example

# app.nim
import prologue
import prologue/middlewares/middlewares


# Async Function
proc home*(ctx: Context) {.async.} =
  resp "<h1>Home</h1>"

proc helloName*(ctx: Context) {.async.} =
  resp "<h1>Hello, " & ctx.getPathParams("name", "Prologue") & "</h1>"

proc doRedirect*(ctx: Context) {.async.} =
  resp redirect("/hello")

proc login*(ctx: Context) {.async.} =
  resp loginPage()

proc do_login*(ctx: Context) {.async.} =
  resp redirect("/hello/Nim")


let settings = newSettings(appName = "StarLight")
var app = newApp(settings = settings, middlewares = @[debugRequestMiddleware()])
app.addRoute("/", home, @[HttpGet, HttpPost])
app.addRoute("/home", home, HttpGet)
app.addRoute("/redirect", doRedirect, HttpGet)
app.addRoute("/login", login, HttpGet)
app.addRoute("/login", do_login, HttpPost, @[debugRequestMiddleware()])
app.addRoute("/hello/{name}", helloName, HttpGet)
app.run()

Run app.nim.Now the server is running at localhost:8080.

More examples

Stars

Stargazers over time