Awesome
<p align="center"> <img src="./documents/images/basolato.svg" style="width:160px"> </p> <div align="center"> <h1>Basolato Framework</h1> <img src="https://github.com/itsumura-h/nim-basolato/workflows/Build%20and%20test%20Nim/badge.svg"> </div>An asynchronous multiprocessing full-stack web framework for Nim, based on asynchttpserver.
:warning: This project is under heavy development. It's not yet production-ready. :warning:
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
<!--ts--> <!-- Created by https://github.com/ekalinin/github-markdown-toc --> <!-- Added by: root, at: Sat Jun 22 11:25:29 UTC 2024 --> <!--te-->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 tolibsass
.
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
<details><summary>English</summary><div>- ducere CLI tool
- Settings
- Routing
- Controller
- Request
- Middleware
- Header
- Migration
- View
- Static files
- Error
- Validation
- Security (CsrfToken, Cookie, Session, Client)
- Helper
- Logging
- ducere CLI tool
- 設定
- ルーティング
- コントローラー
- リクエスト
- ミドルウェア
- ヘッダー
- マイグレーション
- ビュー
- 静的ファイル
- エラー
- バリデーション
- セキュリティ (CsrfToken, クッキー, セッション, Client)
- ヘルパー
- ログ
Benchmark
- https://github.com/the-benchmarker/web-frameworks
- https://www.techempower.com/benchmarks/#section=test&shareid=cc027c81-ee70-4dec-bb93-228f16fd1d1e&hw=ph&test=query
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