Skip to content

itsumura-h/nim-basolato

Repository files navigation

Basolato Framework


An asynchronous multiprocessing full-stack web framework for Nim, based on asynchttpserver.

⚠️ This project is under heavy development. It's not yet production-ready. ⚠️

The only supported OS are Alpine, Debian, and Ubuntu.

FROM ubuntu:22.04

# prevent timezone dialogue
ENV DEBIAN_FRONTEND=noninteractive

RUN apt update --fix-missing && \
    apt upgrade -y
RUN apt install -y --fix-missing \
        gcc \
        g++ \
        xz-utils \
        ca-certificates \
        curl \
        git \
        sqlite3 \
        libpq-dev \
        libmariadb-dev \
        libsass-dev

ARG VERSION="2.0.0"
WORKDIR /root
RUN curl https://nim-lang.org/choosenim/init.sh -o init.sh
RUN sh init.sh -y
RUN rm -f init.sh
ENV PATH $PATH:/root/.nimble/bin
RUN choosenim ${VERSION}

ENV PATH $PATH:/root/.nimble/bin
WORKDIR /root/project
COPY ./basolato.nimble .
RUN nimble install -y -d
RUN git config --global --add safe.directory /root/project

Table of Contents

Introduction

Basolato extends asynchttpserver, an implements a high performance asynchronous HTTP server in Nim std library, while also adding features for full-stack development. It was also heavily inspired by other frameworks:

Language Framework
Ruby Rails
PHP Laravel
Python Masonite
Java/Scala Play
Go Revel

Set up your environment

In order to start using Basolato, you'll first need a working Nim installation. You can find installation instructions for Nim here. Once installed, make sure Nimble, Nim's package manager, is already in your PATH. If not, add .nimble/bin in your favorite shell.

export PATH=$PATH:~/.nimble/bin

Dependencies

The framework depends on several libraries (installed automatically by Nimble):

  • allographer, a library for building queries.
  • bcrypt, used for hashing passwords.
  • faker, for generating fake data.
  • sass, provides a Sass/SCSS to CSS compiler for Nim through bindings to libsass.

Installation

You can install Basolato easily using Nimble:

nimble install https://github.com/itsumura-h/nim-basolato

After installing Basolato, you should have access to the ducere command on your shell.

Creating projects

Using ducere you can easily create a template project structure to start development right away. Ducere will generate a folder automatically using your project name.

cd /your/project/dir
ducere new {project_name}

The overall file structure is as follows:

├── app
│   ├── data_stores
│   │   ├── queries
│   │   └── repositories
│   ├── di_container.nim
│   ├── http
│   │   ├── controllers
│   │   │   └── welcome_controller.nim
│   │   ├── middlewares
│   │   │   ├── auth_middleware.nim
│   │   │   └── set_headers_middleware.nim
│   │   └── views
│   │       ├── errors
│   │       ├── layouts
│   │       │   ├── application_view.nim
│   │       │   └── head_view.nim
│   │       └── pages
│   │           └── welcome_view.nim
│   ├── models
│   └── usecases
├── config
│   └── database.nim
├── config.nims
├── database
│   ├── migrations
│   │   └── migrate.nim
│   └── seeders
│       └── seed.nim
├── main.nim
├── public
│   ├── basolato.svg
│   ├── css
│   ├── favicon.ico
│   └── js
├── resources
│   └── lang
│       ├── en
│       │   └── validation.json
│       └── ja
│           └── validation.json
├── {project_name}.nimble
└── tests
    └── test_sample.nim

With your project ready, you can start serving requests using ducere:

ducere serve # includes hot reloading
> Run server for development

ducere build
./startServer
> Run server for production 

Documentation

English
日本語

Benchmark

benchmark

Roadmap

Version Content
v1.0 Support Clean architecture and Tactical DDD
v2.0 Support GraphQL

Development

Generate TOC of documents

Run.

nimble setupTool # Build docker image
nimble toc # Generate TOC