Supra is the CLI tool for creating new Supranim projects and managing them!
nimble install supra
- Bootstrap new Supranim projects with a single command
- Download and extract starter template from GitHub
- Interactive prompts for project configuration (name, author, license)
- Start customizable project templates
- Start versioned project templates (e.g. with specific versions of dependencies)
- Written in Nim language
Initialize a new Supranim project from a starter template hosted on GitHub, the default
template is the official Starter Kit available on the main branch.
supra init my-new-appPass restapi as the project type to bootstrap from the
REST API Starter Kit.
You'll get an interactive checkbox prompt to pick YAML-based recipes
(Space to toggle, Enter to confirm). Each recipe adds its
.nimble dependencies, drops a service provider into
src/service/provider/, and — for stateful providers only — wires
an init line into App.services. Stateless Global providers
(nimcypher, brotli, bag, multipart, nimcrypto, e2ee,
nimsodium, zippy, zlib) need no init call.
supra init my-new-api restapiBoth project types (webapp — the default — and restapi) run the
same recipe prompt, so the recipe list below applies to either.
Available recipes: jose, nimcypher, brotli, mimedb, bag,
blackpaper, multipart, ozark, ormin, norm,
nimcrypto, e2ee, nimsodium, zippy, zlib,
plus one openparser/<module> recipe per parser module
(json, yaml, toml, xml, csv, bson, fbe, html,
feed, rss, ical, dotenv, fuzzy, path, plist,
uuid, vcard, css, colors, qr, regex, svg).
Providers are real Supranim services: most use initService X[Global]
with a high-level api (jose.issueToken/verifyToken,
nimcypher.hashUserPassword/checkUserPassword, brotli.compressText,
mimedb.mimeTypeFor, multipart.parseUpload,
nimcrypto.hashUserPassword/checkUserPassword (PBKDF2 + scrypt) and
nimcrypto.encryptData/decryptData (AES-256-GCM) plus
encryptDataCbc/decryptDataCbc, full *Hex hash coverage
(SHA-1/2, RIPEMD-160, SHA-3, BLAKE2), hmacHex, deriveKey,
randomHex/randomToken and constantTimeEqual,
e2ee (Argon2id passwords, AEAD seal/unseal, BLAKE2b over Monocypher),
nimsodium (libsodium passwords, secretbox, hashing),
zippy.compressData/decompressData, zlib.compressData/decompressData,
norm validates DB_* env and offers withNormDb,
ormin owns a global sqlite db for query: blocks).
blackpaper is a Blackpaper[Singleton] holding a prepared
dictionary (checkPassword/isStrongPassword), and ozark is an
Ozark[Singleton] over Ozark's internal pool singleton that prepares
tables (it also scaffolds src/model/user.nim; run ozark.init()
after the base db.init()). Like ozark, the other two database
recipes ship a model example: ormin adds
src/service/database/schema.sql (import it with importModel),
norm adds src/model/account.nim.
jose and blackpaper also ship config/jose.yml
(secret supports ${env.JWT_SECRET} refs) and
config/blackpaper.yml (wordlist dictionary path) respectively.
For non-interactive use (CI), select recipes with the flag instead:
supra init my-new-api restapi --skipconfig --with=jose,bag,blackpaper- 🐛 Found a bug? Create a new Issue
- 👋 Wanna help? Fork it!
Supranim | MIT license. Made by Humans from OpenPeeps.
Copyright © 2025 OpenPeeps & Contributors — All rights reserved.