In KaiCode’25, we received 112 applications. After a three-phase review of them, the jury made a decision to reward three projects and the steering committee agreed:
The ag2ai/faststream project (4.3K★),
a Python library that simplifies the process of writing producers and consumers for message queues,
demonstrated perfect software development practices:
code style control,
continuous integration,
automated testing,
versioning and releases,
issue triaging,
and contribution management discipline.
Source files are small, well formatted, and properly documented.
However, licensing is not under control according to SPDX requirements.
$2048 was the reward.
The kozistr/pytorch_optimizer project (319★),
an optimizer for PyTorch written in Python,
showed us an excellent codebase:
well formatted and documented code,
CI,
automated testing,
coverage control.
However,
style checking is not part of CI,
build pipeline is rather weak,
there is a lack of clarity in package management,
and no license control of source files.
$1024 was the reward.
The PierreBeucher/novops project (418★),
a universal secret and configuration manager written in Rust,
showed us awesome coding practices:
issue triaging and community support,
continuous deployment,
automated testing.
However,
they don’t have a style checker in the CI pipeline,
module placement is a bit chaotic,
PRs don’t go through the full build pipeline,
branching is a bit messy,
and no badges in the README.
$512 was the reward.
Steering Committee
Jury
Participants
We received 112 applications (excluding duplicates and broken submissions).
Then, we semi-automatically split the list into three groups. The first group contained XXX that didn’t match the criteria of the competition or were obviously not qualified for the winning (we created a software that calculated repository age, size, the presence of CI, the number of issues, pull requests, commits, etc):
- aelassas/bookcars
- anmol098/waka-readme-stats
- arkivanov/Decompose
- arlac77/repository-provider
- askerlee/AdaFace-dev/
- Astrosp/Awesome-OSINT-For-Everything
- BoboTiG/ebook-reader-dict
- BoboTiG/python-mss
- BoboTiG/python-wks-com
- BoboTiG/thermalprinter
- cargo-generate/cargo-generate
- codebucks27/Next.js-Creative-Portfolio-Website
- codebucks27/Nextjs-contentlayer-blog
- continew-org/continew-starter
- daidr/dualsense-tester
- DerYeger/yeger
- DeskX11/DeskX
- devtrice/qr-x
- DingWB/PyComplexHeatmap
- elmoiv/elmocut
- estruyf/vscode-demo-time
- fan-ziqi/rl_sar
- godzie44/BugStalker
- gorakhargosh/watchdog
- infrabot-io/infrabot
- izivkov/GShockAPI
- jaywcjlove/awesome-mac
- jeertmans/DiffeRT
- jeertmans/languagetool-rust
- johannschopplich/apiful
- johnmarktaylor91/torchlens
- Kostr/UEFI-Lessons
- Kr0oked/Metronome
- leviarista/my.dev.corner
- LimerBoy/BadUSB_Downloader
- lukeberrypi/css2wind
- lz233/Tarnhelm
- makridenko/supadantic
- mfvanek/pg-index-health
- Milkdown/milkdown
- miyuesc/bpmn-process-designer
- mkalioby/django-passkeys
- mkalioby/leopards
- mus-format/mus-go
- nishantwrp/gsoc-organizations
- octobuild/octobuild
- orhun/binsider
- PierreBeucher/cloudypad
- pytries/marisa-trie
- rfc-st/humble
- rust-osdev/multiboot2/
- rust-osdev/uefi-rs
- rustfinity/rustfinity
- saiinc/MySensorAirData
- SaminZou/study-prj
- sassman/putzen-rs
- sassman/srp6-rs
- sassman/ssd-benchmark-rs
- septag/Junkyard
- skanehira/chibiwasm
- speauty/anto
- steganogram/stegano-rs
- stephenafamo/bob
- sudoaugustin/supex
- SUPERCILEX/clipboard-history
- SUPERCILEX/fuc
- TaTo30/vue-pdf
- Techinterview-space/web-api
- vadcom/dumb-menu
- WerWolv/ImHex
- yujinpan/el-select-tree
- yungifez/artisan-ui
- ZSWatch/ZSWatch
The software we created for filtering repositories works as follows.
- First it uses GitHub Rest API:
- for repositories
where it checks:
created_at
>= 2020-01-01created_at
<= 2024-05-01public
== truearchived
== falsedisabled
== falseis_template
== false
- for releases where it checks if amount of releases >= 5
- for repository Readme where it checks if amount of lines >= 20
- for issues where it checks if amount of issues >= 10
- for commits where it checks if amount of commits >= 60
- for pull requests where it checks if amount of pull requests >= 10
- for repository action workflows where it checks if amount of action workflows >= 1
- for repositories
where it checks:
- Then it manually clones every repository using
git clone
and checks if:- amount of directories >= 10
- amount of files >= 50
- amount of files with more than 1k lines < 10
Ignored file formats are:
.png
.jpg
.jpeg
.svg
.eot
.ttf
.woff
.pdf
.ico
.rst
.gif
.webp
- Then it excludes all the repositories that are not matching the criteria
The second group consisted of XXX that were manually reviewed by one of the jury members and were classified as “not enough quality” to compete for the trophy:
- axiel7/AniHyou-android
- azesmway/react-native-unity
- continew-org/continew-admin
- cshum/imagor
- dbots-pkg/dbots.js
- flxapps/DetoxDroid
- GuardKenzie/chafa.py
- ikatsuba/mutates
- izivkov/CasioGShockSmartSync
- joplin/plugin-templates
- knadh/listmonk
- liuch/dmarc-srg
- LumpBloom7/sentakki
- MrHadiSatrio/Journal3
- SaptarshiSarkar12/Drifty
- saynotobugsorg/confidence
- scx567888/scx
- Stypox/dicio-android
- sudoaugustin/renex
- tomasfarias/airflow-dbt-python
- traccar/traccar
- Vaskivskyi/asusrouter
- yasserbdj96/hiphp
- zhensherlock/watermark-js-plus
The third group contained XXX, which we considered as candidates for the prize:
- ag2ai/faststream
- aimclub/GOLEM
- ayoisaiah/f2
- ChatLunaLab/chatluna
- hanruihua/ir-sim
- jeertmans/manim-slides
- JnyJny/busylight
- kozistr/pytorch_optimizer
- louis-e/arnis
- lukasbach/headless-tree
- ohler55/ojg
- PierreBeucher/novops
- sungaila/PDFtoImage
- tempestphp/tempest-framework
- TrianguloY/URLCheck
Then, we asked our jury to review all projects manually. Every project was reviewed by two jury members. The details are here: kaicode-2025.xlsx
Sponsors
Organizers
These people organized KaiCode (in alphabetic order):