• Stars
    star
    117
  • Rank 301,828 (Top 6 %)
  • Language
    Nim
  • License
    MIT License
  • Created about 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Connection-Pooling Compile-Time ORM for Nim

Gatabase

screenshot

screenshot

  • Works with ARC, ORC, --panics:on, --experimental:strictFuncs.

Use

Support

  • All SQL standard syntax is supported.
  • -- Human readable comments, multi-line comments produce multi-line SQL comments, requires Stropping.
  • COMMENT, Postgres-only.
  • UNION, UNION ALL.
  • INTERSECT, INTERSECT ALL.
  • EXCEPT, EXCEPT ALL, requires Stropping.
  • CASE with multiple WHEN and 1 ELSE with correct indentation, requires Stropping.
  • INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN.
  • OFFSET.
  • LIMIT.
  • FROM, requires Stropping.
  • WHERE, WHERE NOT, WHERE EXISTS, WHERE NOT EXISTS.
  • ORDER BY.
  • SELECT, SELECT *, SELECT DISTINCT.
  • SELECT TOP, SELECT MIN, SELECT MAX, SELECT AVG, SELECT SUM, SELECT COUNT.
  • SELECT trim(lower( )) for strings, SELECT round( ) for floats, useful shortcuts.
  • DELETE FROM.
  • LIKE, NOT LIKE.
  • BETWEEN, NOT BETWEEN.
  • HAVING.
  • INSERT INTO.
  • IS NULL, IS NOT NULL.
  • UPDATE, SET.
  • VALUES.
  • DROP TABLE IF EXISTS.
  • CREATE TABLE IF NOT EXISTS.

Not supported:

  • Deep complex nested SubQueries are not supported, because KISS.
  • TRUNCATE, because is the same as DELETE FROM without a WHERE.
  • WHERE IN, WHERE NOT IN, because is the same as JOIN, but JOIN is a lot faster.

API Equivalents

Nim StdLib API Gatabase ORM API
tryExec tryExec
exec exec
getRow getRow
getAllRows getAllRows
getValue getValue
tryInsertID tryInsertID
insertID insertID
execAffectedRows execAffectedRows

Output

Output Gatabase ORM API
bool tryExec
Row getRow
seq[Row] getAllRows
int64 tryInsertID
int64 insertID
int64 execAffectedRows
SqlQuery sqls
any getValue
exec

Install

Comments

-- SQL Comments are supported, but stripped when build for Release. This is SQL.

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

`--` "SQL Comments are supported, but stripped when build for Release. This is Nim."

SELECT & FROM

SELECT *
FROM sometable

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

select '*'
`from` "sometable"

SELECT somecolumn
FROM sometable

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

select "somecolumn"
`from` "sometable"

SELECT DISTINCT somecolumn

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selectdistinct "somecolumn"

MIN & MAX

SELECT MIN(somecolumn)

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selectmin "somecolumn"

SELECT MAX(somecolumn)

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selectmax "somecolumn"

COUNT & AVG & SUM

SELECT COUNT(somecolumn)

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selectcount "somecolumn"

SELECT AVG(somecolumn)

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selectavg "somecolumn"

SELECT SUM(somecolumn)

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selectsum "somecolumn"

TRIM & LOWER

SELECT trim(lower(somestringcolumn))

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selecttrim "somestringcolumn"

ROUND

SELECT round(somefloatcolumn, 2)

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selectround2 "somefloatcolumn"

SELECT round(somefloatcolumn, 4)

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selectround4 "somefloatcolumn"

SELECT round(somefloatcolumn, 6)

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selectround6 "somefloatcolumn"

TOP

SELECT TOP 5 *

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

selecttop 5

WHERE

SELECT somecolumn
FROM sometable
WHERE power > 9000

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

select "somecolumn"
`from` "sometable"
where "power > 9000"

LIMIT & OFFSET

OFFSET 9
LIMIT 42

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

offset 9
limit 42

INSERT

INSERT INTO person
VALUES (42, 'Nikola Tesla', true, '[email protected]', 9.6)

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

insertinto "person"
values 5

Example:

insertinto "person"
values 5

⬆️ Nim ⬆️          ⬇️ Generated SQL ⬇️

INSERT INTO person
VALUES ( ?, ?, ?, ?, ? )
  • The actual values are passed via varargs directly using stdlib, Gatabase does not format values ever.
  • Nim code values 5 generates VALUES ( ?, ?, ?, ?, ? ).

UPDATE

UPDATE person
SET name = 'Nikola Tesla', mail = '[email protected]'

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

update "person"
set ["name", "mail"]

Example:

update "person"
set ["name", "mail"]

⬆️ Nim ⬆️          ⬇️ Generated SQL ⬇️

UPDATE person
SET name = ?, mail = ?
  • The actual values are passed via varargs directly using stdlib, Gatabase does not format values ever.
  • Nim code set ["key", "other", "another"] generates SET key = ?, other = ?, another = ?.

DELETE

DELETE debts

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

delete "debts"

ORDER BY

ORDER BY ASC

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

orderby "asc"

ORDER BY DESC

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

orderby "desc"

CASE

CASE
  WHEN foo > 10 THEN 9
  WHEN bar < 42 THEN 5
  ELSE 0
END

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

`case` {
  "foo > 10": "9",
  "bar < 42": "5",
  "else":     "0"
}

COMMENT

COMMENT ON TABLE myTable IS 'This is an SQL COMMENT on a TABLE'

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

commentontable {"myTable": "This is an SQL COMMENT on a TABLE"}

COMMENT ON COLUMN myColumn IS 'This is an SQL COMMENT on a COLUMN'

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

commentoncolumn {"myColumn": "This is an SQL COMMENT on a COLUMN"}

COMMENT ON DATABASE myDatabase IS 'This is an SQL COMMENT on a DATABASE'

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

commentondatabase {"myDatabase": "This is an SQL COMMENT on a DATABASE"}

GROUP BY

GROUP BY country

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

groupby "country"

JOIN

FULL JOIN tablename

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

fulljoin "tablename"

INNER JOIN tablename

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

innerjoin "tablename"

LEFT JOIN tablename

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

leftjoin "tablename"

RIGHT JOIN tablename

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

rightjoin "tablename"

HAVING

HAVING beer > 5

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

having "beer > 5"

UNION

UNION ALL

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

union true

UNION

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

union false

INTERSECT

INTERSECT ALL

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

intersect true

INTERSECT

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

intersect false

EXCEPT

EXCEPT ALL

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

`except` true

EXCEPT

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

`except` false

IS NULL

IS NULL

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

isnull true

IS NOT NULL

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

isnull false

DROP TABLE

DROP TABLE IF EXISTS tablename

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

dropTable "tablename"

CREATE TABLE

CREATE TABLE IF NOT EXISTS kitten(
  id    INTEGER     PRIMARY KEY,
  age   INTEGER     NOT NULL  DEFAULT 1,
  sex   VARCHAR(1)  NOT NULL  DEFAULT 'f',
  name  TEXT        NOT NULL  DEFAULT 'fluffy',
  rank  REAL        NOT NULL  DEFAULT 3.14,
);

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

let myTable = createTable "kitten": [
  "age"  := 1,
  "sex"  := 'f',
  "name" := "fluffy",
  "rank" := 3.14,
]

No default values:

CREATE TABLE IF NOT EXISTS kitten(
  id    INTEGER     PRIMARY KEY,
  age   INTEGER,
  sex   VARCHAR(1),
  name  TEXT,
  rank  REAL,
);

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

let myTable = createTable "kitten": [
  "age"  := int,
  "sex"  := char,
  "name" := string,
  "rank" := float,
]

More examples:

CREATE TABLE IF NOT EXISTS kitten(
  id    INTEGER     PRIMARY KEY,
  age   INTEGER     NOT NULL  DEFAULT 1,
  sex   VARCHAR(1),
);

⬆️ SQL ⬆️          ⬇️ Nim ⬇️

let myTable = createTable "kitten": [
  "age"  := 1,
  "sex"  := char,
]

And more examples: https://github.com/juancarlospaco/nim-gatabase/blob/master/examples/database_fields_example.nim#L1


Wildcards

  • Nim '*' ➡️ SQL *.
  • Nim '?' ➡️ SQL ?.

Anti-Obfuscation

Gatabase wont like Obfuscation, its code is easy to read and similar to Pretty-Printed SQL. nimpretty friendly. Very KISS.

Compiles Ok:

let variable = sqls:
  select  '*'
  `from`  "clients"
  groupby "country"
  orderby AscNullsLast

Fails to Compile:

  • let variable = sqls: select('*') from("clients") groupby("country") orderby(AscNullsLast)
  • let variable = sqls: '*'.select() "clients".from() "country".groupby() AscNullsLast.orderby()
  • let variable = sqls: select '*' from "clients" groupby "country" orderby AscNullsLast
  • let variable = sqls:select'*' from"clients" groupby"country" orderby AscNullsLast

This helps on big projects where each developer tries to use a different code style.

Your data, your way

Nim has template is like a literal copy&paste of code in-place with no performance cost, that allows you to create your own custom ORM function callbacks on-the-fly, like the ones used on scripting languages.

template getMemes(): string =
  result = [].getValue:
    select "url"
    `from` "memes"
    limit 1

Then you do getMemes() when you need it. The API that fits your ideas.

From this MyClass.meta.Session.query(Memes).all().filter().first() to this getMemes().

For Python Devs

Remember on Python2 you had like print "value"?, on Nim you can do the same for any function, then we made functions to mimic basic standard SQL, like select "value" and it worked, its Type-Safe and valid Nim code, you have an ORM that gives you the freedom and power, this allows to support interesting features, like CASE, UNION, INTERSECT, COMMENT, etc.

When you get used to template it requires a lot less code to do the same than SQLAlchemy.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy import Column, Integer, String, Boolean, Float

engine = create_engine("sqlite:///:memory:", echo=False)
engine.execute("""
  create table if not exists person(
    id      integer     primary key,
    name    varchar(9)  not null unique,
    active  bool        not null default true,
    rank    float       not null default 0.0
  ); """
)


meta = MetaData()
persons = Table(
  "person", meta,
  Column("id", Integer, primary_key = True),
  Column("name", String, nullable = False, unique = True),
  Column("active", Boolean, nullable = False, default = True),
  Column("rank", Float, nullable = False, default = 0.0),
)


conn = engine.connect()


ins = persons.insert()
ins = persons.insert().values(id = 42, name = "Pepe", active = True, rank = 9.6)
result = conn.execute(ins)


persons_query = persons.select()
result = conn.execute(persons_query)
row = result.fetchone()

print(row)

⬆️ CPython 3 + SQLAlchemy ⬆️          ⬇️ Nim 1.0 + Gatabase ⬇️

import db_sqlite, gatabase

let db = open(":memory:", "", "", "")
db.exec(sql"""
  create table if not exists person(
    id      integer     primary key,
    name    varchar(9)  not null unique,
    active  bool        not null default true,
    rank    float       not null default 0.0
  ); """)


exec [42, "Pepe", true, 9.6]:
  insertinto "person"
  values 4


let row = [].getRow:
  select '*'
  `from` "person"

echo row

Smart SQL Checking

screenshot

It will perform a SQL Syntax checking at compile-time. Examples here Fail intentionally as expected:

exec []:
  where "failure"

Fails to compile as expected, with a friendly error:

gatabase.nim(48, 16) Warning: WHERE without SELECT nor INSERT nor UPDATE nor DELETE.

Typical error of making a DELETE FROM without WHERE that deletes all your data:

exec []:
  delete "users"

Compiles but prints a friendly warning:

gatabase.nim(207, 57) Warning: DELETE FROM without WHERE.

Typical bad practice of using SELECT * everywhere:

exec []:
  select '*'

Compiles but prints a friendly warning:

gatabase.nim(20, 50) Warning: SELECT * is bad practice.

Non-SQL wont compile, even if its valid Nim:

sqls:
  discard

sqls:
  echo "This is not SQL, wont compile"

Gatabase Diagrams

Tests

$ nimble test

[Suite] Gatabase ORM Tests
  [OK] let   INSERT INTO
  [OK] let   SELECT ... FROM ... WHERE
  [OK] let   SELECT ... (comment) ... FROM ... COMMENT
  [OK] let   SELECT ... FROM ... LIMIT ... OFFSET
  [OK] let   INSERT INTO
  [OK] let   UNION ALL ... ORBER BY ... IS NOT NULL
  [OK] let   SELECT DISTINCT ... FROM ... WHERE
  [OK] let INSERT INTO
  [OK] const SELECT ... FROM ... WHERE
  [OK] const SELECT ... (comment) ... FROM ... COMMENT
  [OK] const SELECT ... FROM ... LIMIT ... OFFSET
  [OK] const INSERT INTO
  [OK] const UNION ALL ... ORBER BY ... IS NOT NULL
  [OK] const INTERSECT ALL
  [OK] const EXCEPT ALL
  [OK] const SELECT DISTINCT ... FROM ... WHERE
  [OK] var   CASE
  [OK] var   SELECT MAX .. WHERE EXISTS ... OFFSET ... LIMIT ... ORDER BY
  [OK] SELECT TRIM
  [OK] SELECT ROUND
  [OK] var   DELETE FROM WHERE

Requisites

  • None.

Stars

Stars over time

FAQ

  • This is not an ORM ?.

Wikipedia defines ORM as:

Object-relational mapping in computer science is a programming technique for converting data between incompatible type systems using object-oriented programming languages.

Feel free to contribute to Wikipedia.

  • Supports SQLite ?.

Yes.

  • Supports MySQL ?.

No.

  • Will support MySQL someday ?.

No.

  • Supports Mongo ?.

No.

  • Will support Mongo someday ?.

No.

  • How is Parameter substitution done ?.

It does NOT make Parameter substitution internally, its delegated to standard library.

  • This works with Synchronous code ?.

Yes.

  • This works with Asynchronous code ?.

Yes.

  • SQLite mode dont support some stuff ?.

We try to keep as similar as possible, but SQLite is very limited.

⬆️ ⬆️ ⬆️ ⬆️

More Repositories

1

faster-than-requests

Faster requests on Python 3
Nim
993
star
2

pyvoicechanger

Real Time Microphone Voice Changer Python 3.6+ App. Works with On-Line Games and VideoConferences!
Python
252
star
3

nodejs

Alternative StdLib for Nim for NodeJS/JavaScript targets, hijacks NodeJS StdLib for Nim
Nim
204
star
4

awesome-streaming-tools

Awesome Streaming Tools
193
star
5

cpython

Alternative StdLib for Nim for Python targets, hijacks Python StdLib for Nim
Python
142
star
6

webgui

Web Technologies based Crossplatform GUI Framework with Dark theme
Nim
135
star
7

faster-than-csv

Faster CSV for Python
Python
99
star
8

cliche

AutoMagic CLI argument parsing is cliche
Nim
69
star
9

nim-html-dsl

Nim HTML DSL
Nim
64
star
10

nim-contra

Lightweight Self-Documenting Design by Contract Programming and Security Hardened mode.
Nim
53
star
11

thatlib

Faster pathlib for Python
Python
52
star
12

harpoon

HTTP Harpoon, HTTP Client
Nim
44
star
13

plz

PLZ Python PIP Alternative
Python
40
star
14

nim-new-backend

Template to create a new Backend for Nim, based on the JavaScript Backend, as minimalistic as possible to focus on codegen
Nim
38
star
15

nim-nimterlingua

Internationalization at Compile Time for Nim
Nim
37
star
16

faster-than-walk

Faster recursive directory walk on Python 3
Python
36
star
17

nim-xdo

Nim GUI Automation Linux, simulate user interaction, mouse and keyboard.
Nim
35
star
18

nim-presentation-slides

Nim Presentation Slides and Examples.
Nim
32
star
19

tradingview

TradingView client
Nim
30
star
20

nimrun-action

Nim Bisect commit-by-commit action
JavaScript
27
star
21

binance

Binance API Client Futures Spot
Nim
24
star
22

nim-firejail

Firejail wrapper for Nim, Isolate your Production App before its too late!
Nim
23
star
23

nim-html-tools

HTML5 Tools for Nim, all Templates, No CSS, No Libs, No JS Framework
Nim
22
star
24

gothon

Python 3.6+ modules written on pure Go 1.10+. No CFFI, no CTypes, no CGo, no PyBindGen, just import *.go files from Python.
Python
20
star
25

nim-telegram-bot

Nim Telegram Bot.
Nim
19
star
26

choosenim_install

Nim integration for Python PIP, install Nim via PIP, write Python modules using Nim
Python
18
star
27

dik

Table implemented as optimized sorted hashed dictionary for heterogeneous values
Nim
17
star
28

geoguessrnim

GeoGuessr browser plugin, hide Ads, Filters for StreetView and Mapillary for Chromium and Firefox
Nim
17
star
29

nim-crc32

CRC-32 In-place for Nim.
Nim
15
star
30

nim-libravatar

Libravatar library for Nim, Gravatar alternative. Libravatar is an open source free federated avatar api & service.
Nim
14
star
31

nim-openstreetmap

OpenStreetMap API Lib for Nim
Nim
13
star
32

nim-bytes2human

Calculate all Byte units from integer bytes positive int64 with precision from Bytes to Yottabytes and return a human friendly string representation.
Nim
13
star
33

biblioteca-guarrilla

Simple web to share books, Calibre, Jester, Spectre CSS, No JavaScript, WebP & ZIP to reduce bandwidth
Nim
12
star
34

nim4py

NimScript Interoperability for Python
Python
12
star
35

krita-plugin-bashactions

Plugin to execute Bash commands and programs as Actions on your current Images from Krita.
Python
12
star
36

nim-random-font-color

Random curated Fonts and pastel Colors for your UI/UX design, design for non-designers, poors man design.
Nim
11
star
37

nim_packages_security_audit

Fully Automated Nim Packages Security Audit
Nim
11
star
38

cloudbet

Cloudbet Virtual Crypto Casino API Client
Nim
11
star
39

nim-tinyslation

Text string translation from free online crowdsourced API. Tinyslation a tiny translation. Nim package.
Nim
11
star
40

grabulma

HTML/CSS WYSIWYG for Bulma CSS without JavaScript
JavaScript
11
star
41

bitcoin-lightning

Open-source zero-fee no-download offline-capable anonymous instant micropayments platform with plugins Bitcoin Lightning ⚡️
Nim
11
star
42

nimbug

Nim Semi-Auto Bug Report Tool
Nim
10
star
43

nim-easings

Robert Penner Easing Functions for Nim
C
10
star
44

nimpretty-action

Nimpretty GitHub Action
JavaScript
10
star
45

nim-osrm

Open Source Routing Machine for OpenStreetMap API Lib and App for Nim
Nim
9
star
46

nim-dnsprotec

DNS /etc/hosts file manager, Block 1 Million malicious domains with 1 command
Nim
9
star
47

nim-css-html-minify

HTML & CSS Minify Lib & App based on Regexes & parallel MultiReplaces
Nim
8
star
48

nim-kdialog

Nim KDialog wrapper for super easy GUI.
Nim
8
star
49

nim-datetime2human

Calculate date & time with precision from seconds to millenniums. Human friendly date time as string. ISO-8601 representation and more.
Nim
8
star
50

ballena-itcher

Flash ISO images to SD cards & USB drives, safely and easily.
Nim
7
star
51

borapp

BORA App: Boletin Oficial Republica Argentina
Nim
6
star
52

netpbm

NetPBM Raster Bitmap Pure Python 3 Image, No dependencies, Color, Grayscale or Black&White, Object, Encoder and Decoder, PNG Export, JSON Import/Export, and other useful manipulation functions. Uses native Python lists.
Python
6
star
53

nimble_install

Nimble integration for Python
Python
6
star
54

fision

Nim
6
star
55

xpm

Nim
6
star
56

pre-commit-nim

Pre-Commit Hook for Nim.
6
star
57

aria

Aria2 API lib for Nim using RPC for any backend
Nim
5
star
58

nim-smnar

Servicio Meteorologico Nacional Argentina API Client
Nim
5
star
59

nim-chonker

Arch Linux Pacman Optimizer: Your Arch Linux is too fat, lets make it lightweight
Nim
5
star
60

grapespectre

HTML/CSS WYSIWYG for Spectre CSS without JavaScript
JavaScript
5
star
61

apistar-msgpack

Apistar MessagePack Renderer and Parser pluggable components.
Python
5
star
62

parselicense

Parse Standard SPDX Licenses from string to Enum
Nim
4
star
63

nim-requirementstxt

Python requirements.txt generic iterator parser for Nim
Nim
4
star
64

nim-tinyfiledialogs

TinyFileDialogs wrapper for Nim.
C
4
star
65

spacemacs-nim-python

http://spacemacs.org with http://python.org and https://nim-lang.org plugins, +stripped down, +eye candy.
Emacs Lisp
4
star
66

openexchangerate

OpenExchangeRates API client for Python 3.7+.
Python
4
star
67

nim-hackpad

Hackathon Web Scratchpad for teaching Nim on events using Wifi with limited or no Internet.
HTML
4
star
68

microraptor

3D HTML5 Presentations from a simple MarkDown file. Convert a GitHub README.md to Presentations with one command.
Python
3
star
69

nim-openexchangerates

OpenExchangeRates API Client for Nim
Nim
3
star
70

nim-openweathermap

OpenWeatherMap API Lib for Nim
Nim
3
star
71

nim-steam

Steam API Client for Nim
Nim
3
star
72

python-course

Curso Python 3 Castellano AutoGuiado Automatizado para GitHub for Classrooms | Python 3 Course SelfGuided Automatized for GitHub for Classrooms
Python
3
star
73

nim-georefar

GeoRef Argentina Government MultiSync API Client for Nim
Nim
3
star
74

nim-calibre

Calibre eBooks App Database Client for Nim.
Nim
3
star
75

changelogen

Conflict-less Changelog.md generator with categories for Nim
Nim
3
star
76

nim-nominatim

OpenStreetMap Nominatim API Lib for Nim
Nim
3
star
77

nim-unsplash

Unsplash API Client for Nim
Nim
3
star
78

nim-osutil

OS Utils for Nim, simple tiny but useful procs for OS.
Nim
3
star
79

nim-overpass

OpenStreetMap Overpass API Lib for Nim
Nim
3
star
80

nim-minifyc

C Source Code Minifier for Nim
Nim
2
star
81

kanban5

Kanban Board, based on HTML5 Local Storage and CSV
2
star
82

nim-pallas

Fully automated crossplatform standalone single-file multi-GUI custom installers to install anything anywhere without coding
Nim
2
star
83

nim-crosscompile

Crosscompile Nim source code into multiple targets on Linux with this proc.
Nim
2
star
84

bgelauncher

Blender Game Engine Launcher
Python
2
star
85

nim-espeak

Nim Espeak NG wrapper, for super easy Voice and Text-To-Speech
Nim
2
star
86

nim-webp-tools

Nim WebP Tools wrapper.
Nim
2
star
87

nim-itchio

itch.io API Client for Nim
Nim
2
star
88

nim-usigar

USIG Argentina Government MultiSync API Client for Nim
HTML
2
star
89

nim-datauri

Data URI Base64 UTF-8 Nim module.
Nim
1
star
90

libarchibi

Libarchive Chibi Edition
Nim
1
star
91

fuzzy-cootie

Fuzzy Cootie Font Repository (Unofficial)
1
star
92

nimwc-calendar

Calendar for NimWC
Nim
1
star
93

python-native

Nim
1
star
94

nimlint-action

Nimlint GitHub Action
JavaScript
1
star
95

curso-nim

HTML
1
star
96

linkode-gui

linkode.org desktop client on python3 qt5
Python
1
star
97

nim-printdebug

Print Debug for Nim, tiny 3 lines Lib, C Target.
C
1
star
98

cuckoor

Cuckoo-R: QR Code App
Python
1
star
99

juancarlospaco

1
star
100

cpp-examples

C++ 23 and Nim 1.8 examples
C++
1
star