Techical report 2026-Jan-28

Hi folks, here're the latest updates on GNU Artanis development as of January 28, 2026.

Critical Bugfixes

GNU Artanis is slow?!

Recently, AI assistant mentioned me that there're "performance blaming of GNU Artanis" somewhere, so I did some investigation and found out that the root cause is due to a slow-moving reason illustrated in the figure below.

image-2026-01-28-163728.png

Figure 1: The slow-moving reason

And I think it's a fixed bug in released 1.3.0, folks may not heard about it: https://gitlab.com/hardenedlinux/artanis/-/issues/135 The reaons is that the GNU Artanis client was blocking the whole server core, now we easily fixed it with the runner.

The Artanis Runner is a useful feature to help you run time consuming task without blocking Ragnarok server core. As you may know, Ragnarok is the coroutine server core based one delimited-continuation, so if you block the core, all other requests will be blocked too. The runner will let you run your task in another thread under tha help of Guile Futures. And when the task is done, it will notify the Ragnarok core to continue the request processing. It works like a simple message queue, and managed by Guile's threading pool. It's very easy to use, and users don't have to manually synicronize with the server core.

Support customizable config path

This is in the vanilla but haven't released yet.

In previous versions, GNU Artanis only support config file at fixed path: "/etc/artanis/artanis.conf". This breaks Guix package policy since the Guix sytem path is mounted as readonly filesystem. So when a packcage installs, it can not write to this path. Obviously, we need to support customizable config path.

;; say, we have put artanis.conf and sys/i18n in /path/to/your/
(init-server #:config-path "/path/to/your"
             #:i18n-path "/path/to/your/")

You may read Works with Guix to see how to customize the config path.

New Features

A lot of Database updates

We just pick some notable new features here.

Support transaction in FPRM

Multiple database operations may need to be executed atomically, otherwise rollback. Now FPRM supports transaction with the new special form (with-transaction rc body ...).

For example:

(with-transaction
 rc
 ($vericode 'set #:activated 1 #:condition (where #:id id))
 ($user 'set #:status user:normal
        #:condition (where #:email email)))

Paramerterized query

Paramerized query is the super weapon the prevent most of SQL injection attacks. Without it, we have to carefully to escape user inputs when we build SQL query strings manually. Today, I've send PR to guile-dbi to support parameterized query. After it get merged and released, GNU Artanis will rewrite FPRM to use it by default.

;; MySQL or MariaDB
(import (dbi dbi))
(define conn (dbi-open "mysql" "test:123:test:tcp:localhost:3306"))
(dbi-params-query conn
 "SELECT ? + ? as sum"
 '(7 8))

(dbi-get_row conn) ;; => (("sum" . 15))

;; SQLite
(define conn (dbi-open "sqlite3" "mytest"))
(dbi-params-query conn
 "select ? as str"
 '("hello world"))

(dbi-get_row conn) ;; => (("str" . "hello world"))

;; PostgreSQL
(define conn (dbi-open "postgresql" "test:123:test:tcp:localhost:5432"))
(dbi-params-query conn
 "SELECT $1::int + $2::int as sum"
 '(7 8))
(dbi-get_row conn) ;; => (("sum" . 15))

Add where-exists to SSQL

(->sql select * from 'Employees
       (where (/exists (->sql select 1 from 'Managers
                              (where #:id 123))))

Add base16 and base32

The Base64 is not safe to be used in URL without encoding, so we add base16 and base32.

And we have move all hash functions to (artanis security hash) module now.

(import (artanis security hash))

(base32-encode str/bv)
(base32-decode str)

(base16-encode str/bv)
(base16-decode str)

The future plan

Customizable Logger

Logger is important today, however requirements of logger is diverse. It's important to unify the logger activities, and make it customizable.

If you're interested in this feature, please keep an eyes on this issue.

Happy hacking

Please join us in [email protected] mailing list for discussions, and report bugs to https://gitlab.com/hardenedlinux/artanis/-/issues

And follow me on twitter @r0ymu.

Author: Artanis Dev Team

Created: 2026-01-28 Wed 17:26

Validate