koffi 2.12.1 → 2.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE.txt +2 -2
  3. package/README.md +8 -8
  4. package/build/koffi/darwin_arm64/koffi.node +0 -0
  5. package/build/koffi/darwin_x64/koffi.node +0 -0
  6. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  7. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  8. package/build/koffi/freebsd_x64/koffi.node +0 -0
  9. package/build/koffi/linux_arm64/koffi.node +0 -0
  10. package/build/koffi/linux_armhf/koffi.node +0 -0
  11. package/build/koffi/linux_ia32/koffi.node +0 -0
  12. package/build/koffi/linux_loong64/koffi.node +0 -0
  13. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  14. package/build/koffi/linux_x64/koffi.node +0 -0
  15. package/build/koffi/musl_arm64/koffi.node +0 -0
  16. package/build/koffi/musl_x64/koffi.node +0 -0
  17. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  18. package/build/koffi/openbsd_x64/koffi.node +0 -0
  19. package/build/koffi/win32_arm64/koffi.exp +0 -0
  20. package/build/koffi/win32_arm64/koffi.node +0 -0
  21. package/build/koffi/win32_ia32/koffi.exp +0 -0
  22. package/build/koffi/win32_ia32/koffi.node +0 -0
  23. package/build/koffi/win32_x64/koffi.exp +0 -0
  24. package/build/koffi/win32_x64/koffi.node +0 -0
  25. package/doc/assets.ini +3 -3
  26. package/doc/develop.sh +4 -3
  27. package/doc/pages/platforms.md +1 -1
  28. package/doc/static/highlight.js +1 -1
  29. package/doc/static/koffi.css +3 -2
  30. package/doc/static/print.css +1 -1
  31. package/doc/templates/code.html +5 -5
  32. package/doc/templates/page.html +4 -4
  33. package/index.d.ts +228 -145
  34. package/index.js +25 -25
  35. package/indirect.js +25 -5
  36. package/package.json +2 -2
  37. package/src/cnoke/LICENSE.txt +2 -2
  38. package/src/cnoke/README.md +2 -0
  39. package/src/cnoke/assets/FindCNoke.cmake +12 -2
  40. package/src/cnoke/assets/win_delay_hook.c +4 -4
  41. package/src/cnoke/cnoke.js +4 -2
  42. package/src/cnoke/package.json +1 -1
  43. package/src/cnoke/src/builder.js +11 -14
  44. package/src/cnoke/src/index.js +2 -2
  45. package/src/cnoke/src/tools.js +34 -2
  46. package/src/core/{libcc/libcc.cc → base/base.cc} +3174 -1640
  47. package/src/core/{libcc/libcc.hh → base/base.hh} +3066 -2427
  48. package/src/core/{libcc → base}/mimetypes.inc +42 -4
  49. package/src/core/{libcc → base}/mimetypes_gen.py +3 -3
  50. package/src/core/base/unicode.inc +426 -0
  51. package/src/core/base/unicode_gen.py +189 -0
  52. package/src/koffi/CMakeLists.txt +7 -5
  53. package/src/koffi/cmake/raylib.cmake +6 -2
  54. package/src/koffi/cmake/{sqlite.cmake → sqlite3.cmake} +3 -3
  55. package/src/koffi/examples/electron-forge/forge.config.js +23 -3
  56. package/src/koffi/examples/electron-forge/package.json +18 -16
  57. package/src/koffi/src/abi_arm32.cc +7 -7
  58. package/src/koffi/src/abi_arm32_asm.S +2 -2
  59. package/src/koffi/src/abi_arm64.cc +45 -45
  60. package/src/koffi/src/abi_arm64_asm.S +4 -4
  61. package/src/koffi/src/abi_arm64_asm.asm +2 -2
  62. package/src/koffi/src/abi_loong64_asm.S +2 -2
  63. package/src/koffi/src/abi_riscv64.cc +5 -5
  64. package/src/koffi/src/abi_riscv64_asm.S +2 -2
  65. package/src/koffi/src/abi_x64_sysv.cc +3 -3
  66. package/src/koffi/src/abi_x64_sysv_asm.S +5 -5
  67. package/src/koffi/src/abi_x64_win.cc +3 -3
  68. package/src/koffi/src/abi_x64_win_asm.asm +2 -2
  69. package/src/koffi/src/abi_x86.cc +8 -8
  70. package/src/koffi/src/abi_x86_asm.S +2 -2
  71. package/src/koffi/src/abi_x86_asm.asm +2 -2
  72. package/src/koffi/src/call.cc +12 -12
  73. package/src/koffi/src/call.hh +8 -8
  74. package/src/koffi/src/errno.inc +152 -152
  75. package/src/koffi/src/ffi.cc +44 -39
  76. package/src/koffi/src/ffi.hh +6 -6
  77. package/src/koffi/src/init.js +1 -1
  78. package/src/koffi/src/parser.cc +5 -5
  79. package/src/koffi/src/parser.hh +3 -3
  80. package/src/koffi/src/trampolines/armasm.inc +2 -2
  81. package/src/koffi/src/trampolines/gnu.inc +2 -2
  82. package/src/koffi/src/trampolines/masm32.inc +2 -2
  83. package/src/koffi/src/trampolines/masm64.inc +2 -2
  84. package/src/koffi/src/trampolines/prototypes.inc +2 -2
  85. package/src/koffi/src/util.cc +9 -9
  86. package/src/koffi/src/util.hh +3 -3
  87. package/src/koffi/src/win32.cc +5 -5
  88. package/src/koffi/src/win32.hh +9 -9
  89. package/vendor/node-addon-api/CHANGELOG.md +97 -2
  90. package/vendor/node-addon-api/CONTRIBUTING.md +117 -7
  91. package/vendor/node-addon-api/README.md +25 -249
  92. package/vendor/node-addon-api/common.gypi +1 -0
  93. package/vendor/node-addon-api/doc/README.md +145 -0
  94. package/vendor/node-addon-api/doc/array_buffer.md +15 -15
  95. package/vendor/node-addon-api/doc/basic_env.md +200 -0
  96. package/vendor/node-addon-api/doc/buffer.md +24 -26
  97. package/vendor/node-addon-api/doc/cmake-js.md +19 -0
  98. package/vendor/node-addon-api/doc/{creating_a_release.md → contributing/creating_a_release.md} +16 -4
  99. package/vendor/node-addon-api/doc/env.md +11 -131
  100. package/vendor/node-addon-api/doc/error_handling.md +12 -0
  101. package/vendor/node-addon-api/doc/external.md +13 -4
  102. package/vendor/node-addon-api/doc/finalization.md +153 -0
  103. package/vendor/node-addon-api/doc/memory_management.md +1 -1
  104. package/vendor/node-addon-api/doc/object_wrap.md +19 -3
  105. package/vendor/node-addon-api/doc/promises.md +51 -0
  106. package/vendor/node-addon-api/doc/setup.md +29 -6
  107. package/vendor/node-addon-api/doc/value.md +13 -0
  108. package/vendor/node-addon-api/doc/version_management.md +2 -2
  109. package/vendor/node-addon-api/eslint.config.js +5 -0
  110. package/vendor/node-addon-api/index.js +2 -0
  111. package/vendor/node-addon-api/napi-inl.h +592 -166
  112. package/vendor/node-addon-api/napi.h +167 -59
  113. package/vendor/node-addon-api/node_addon_api.gyp +10 -0
  114. package/vendor/node-addon-api/noexcept.gypi +1 -1
  115. package/vendor/node-addon-api/package.json +10 -13
  116. package/vendor/node-addon-api/release-please-config.json +15 -0
  117. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +2 -1
  118. package/vendor/node-addon-api/test/array_buffer.js +1 -1
  119. package/vendor/node-addon-api/test/async_context.js +2 -2
  120. package/vendor/node-addon-api/test/async_progress_queue_worker.js +3 -3
  121. package/vendor/node-addon-api/test/async_progress_worker.js +3 -3
  122. package/vendor/node-addon-api/test/async_worker.cc +15 -13
  123. package/vendor/node-addon-api/test/async_worker.js +5 -5
  124. package/vendor/node-addon-api/test/basic_types/value.cc +6 -0
  125. package/vendor/node-addon-api/test/basic_types/value.js +17 -0
  126. package/vendor/node-addon-api/test/binding.cc +8 -0
  127. package/vendor/node-addon-api/test/binding.gyp +23 -1
  128. package/vendor/node-addon-api/test/buffer.js +1 -2
  129. package/vendor/node-addon-api/test/common/index.js +1 -1
  130. package/vendor/node-addon-api/test/except_all.cc +22 -0
  131. package/vendor/node-addon-api/test/except_all.js +14 -0
  132. package/vendor/node-addon-api/test/exports.js +19 -0
  133. package/vendor/node-addon-api/test/finalizer_order.cc +152 -0
  134. package/vendor/node-addon-api/test/finalizer_order.js +98 -0
  135. package/vendor/node-addon-api/test/function.js +2 -2
  136. package/vendor/node-addon-api/test/function_reference.js +2 -2
  137. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +4 -4
  138. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +4 -4
  139. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +3 -3
  140. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +5 -5
  141. package/vendor/node-addon-api/test/name.cc +10 -8
  142. package/vendor/node-addon-api/test/object/delete_property.cc +5 -5
  143. package/vendor/node-addon-api/test/object/get_property.cc +5 -5
  144. package/vendor/node-addon-api/test/object/has_own_property.cc +4 -4
  145. package/vendor/node-addon-api/test/object/has_property.cc +5 -5
  146. package/vendor/node-addon-api/test/object/object.cc +1 -1
  147. package/vendor/node-addon-api/test/object/set_property.cc +5 -5
  148. package/vendor/node-addon-api/test/object/subscript_operator.cc +3 -3
  149. package/vendor/node-addon-api/test/object_reference.cc +18 -18
  150. package/vendor/node-addon-api/test/promise.cc +75 -0
  151. package/vendor/node-addon-api/test/promise.js +23 -0
  152. package/vendor/node-addon-api/test/require_basic_finalizers/index.js +38 -0
  153. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/addon.cc +12 -0
  154. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/binding.gyp +48 -0
  155. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/index.js +3 -0
  156. package/vendor/node-addon-api/test/require_basic_finalizers/tpl/package.json +11 -0
  157. package/vendor/node-addon-api/test/run_script.cc +1 -1
  158. package/vendor/node-addon-api/test/type_taggable.cc +1 -1
  159. package/vendor/node-addon-api/test/type_taggable.js +3 -4
  160. package/vendor/node-addon-api/test/typedarray.cc +28 -24
  161. package/vendor/node-addon-api/tools/conversion.js +1 -1
  162. package/vendor/node-api-headers/CHANGELOG.md +29 -0
  163. package/vendor/node-api-headers/CREATING_A_RELEASE.md +12 -2
  164. package/vendor/node-api-headers/def/js_native_api.def +6 -1
  165. package/vendor/node-api-headers/def/node_api.def +7 -1
  166. package/vendor/node-api-headers/include/js_native_api.h +56 -24
  167. package/vendor/node-api-headers/include/js_native_api_types.h +27 -0
  168. package/vendor/node-api-headers/include/node_api.h +38 -29
  169. package/vendor/node-api-headers/lib/parse-utils.js +92 -0
  170. package/vendor/node-api-headers/package.json +7 -7
  171. package/vendor/node-api-headers/release-please-config.json +12 -0
  172. package/vendor/node-api-headers/scripts/update-headers.js +63 -12
  173. package/vendor/node-api-headers/scripts/write-symbols.js +1 -1
  174. package/vendor/node-api-headers/symbols.js +17 -1
  175. package/vendor/node-api-headers/test/parse-utils.js +21 -0
  176. package/doc/flat/flat.css +0 -27
  177. package/doc/flat/normal.css +0 -429
  178. package/doc/flat/print.css +0 -29
  179. package/doc/flat/reset.css +0 -41
  180. package/doc/flat/small.css +0 -104
  181. package/doc/flat/static.js +0 -161
  182. package/src/core/libcc/brotli.cc +0 -186
  183. package/src/core/libcc/lz4.cc +0 -197
  184. package/src/core/libcc/miniz.cc +0 -353
  185. package/vendor/node-addon-api/tools/eslint-format.js +0 -79
  186. /package/vendor/node-api-headers/{scripts → lib}/clang-utils.js +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,27 @@
7
7
 
8
8
  ### Koffi 2.12
9
9
 
10
+ #### Koffi 2.12.3
11
+
12
+ *Released on 2025-07-28*
13
+
14
+ - Add missing TypeScript overloads for struct redefinition
15
+ - Add missing TypeScript member parameter in `koffi.offsetof()`
16
+ - Add missing TypeScript declaration for `koffi.view()`
17
+ - Add primitive type names to TypeScript
18
+ - Simplify TypeScript module declaration
19
+
20
+ #### Koffi 2.12.2
21
+
22
+ *Released on 2025-07-16*
23
+
24
+ - Validate identifiers against Unicode XID table
25
+ - Skip struct and union members with placeholder name '\_'
26
+ - Add Koffi prebuild for Linux (musl) ARM64
27
+
28
+ > [!NOTE]
29
+ > The Koffi 3 codebase has been put aside, and some of it will be progressively integrated into Koffi 2 over the following months.
30
+
10
31
  #### Koffi 2.12.1
11
32
 
12
33
  *Released on 2025-07-05*
package/LICENSE.txt CHANGED
@@ -1,9 +1,9 @@
1
1
  MIT License
2
2
 
3
- Copyright 2023 Niels Martignène <niels.martignene@protonmail.com>
3
+ Copyright (C) 2025 Niels Martignène <niels.martignene@protonmail.com>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
- this software and associated documentation files (the “Software”), to deal in
6
+ this software and associated documentation files (the “Software”), to deal in
7
7
  the Software without restriction, including without limitation the rights to use,
8
8
  copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
9
9
  Software, and to permit persons to whom the Software is furnished to do so,
package/README.md CHANGED
@@ -9,14 +9,14 @@ Koffi is a fast and easy-to-use C FFI module for Node.js, featuring:
9
9
 
10
10
  The following combinations of OS and architectures __are officially supported and tested__ at the moment:
11
11
 
12
- ISA / OS | Windows | Linux | macOS | FreeBSD | OpenBSD
13
- ------------------ | ----------- | -------- | ----------- | ----------- | --------
14
- x86 (IA32) [^1] | ✅ Yes | ✅ Yes | ⬜️ *N/A* | ✅ Yes | ✅ Yes
15
- x86_64 (AMD64) | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes
16
- ARM32 LE [^2] | ⬜️ *N/A* | ✅ Yes | ⬜️ *N/A* | 🟨 Probably | 🟨 Probably
17
- ARM64 (AArch64) LE | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | 🟨 Probably
18
- RISC-V 64 [^3] | ⬜️ *N/A* | ✅ Yes | ⬜️ *N/A* | 🟨 Probably | 🟨 Probably
19
- LoongArch64 | ⬜️ *N/A* | ✅ Yes | ⬜️ *N/A* | 🟨 Probably | 🟨 Probably
12
+ ISA / OS | Windows | Linux (glibc) | Linux (musl) | macOS | FreeBSD | OpenBSD
13
+ ------------------ | ----------- | ------------- | ------------ | ----------- | ----------- | --------
14
+ x86 (IA32) [^1] | ✅ Yes | ✅ Yes | 🟨 Probably | ⬜️ *N/A* | ✅ Yes | ✅ Yes
15
+ x86_64 (AMD64) | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes
16
+ ARM32 LE [^2] | ⬜️ *N/A* | ✅ Yes | 🟨 Probably | ⬜️ *N/A* | 🟨 Probably | 🟨 Probably
17
+ ARM64 (AArch64) LE | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | 🟨 Probably
18
+ RISC-V 64 [^3] | ⬜️ *N/A* | ✅ Yes | 🟨 Probably | ⬜️ *N/A* | 🟨 Probably | 🟨 Probably
19
+ LoongArch64 | ⬜️ *N/A* | ✅ Yes | 🟨 Probably | ⬜️ *N/A* | 🟨 Probably | 🟨 Probably
20
20
 
21
21
  [^1]: The following call conventions are supported: cdecl, stdcall, MS fastcall, thiscall.
22
22
  [^2]: The prebuilt binary uses the hard float ABI and expects a VFP coprocessor. Build from source to use Koffi with a different ABI (softfp, soft).
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/doc/assets.ini CHANGED
@@ -1,4 +1,4 @@
1
- EsbuildPath = ../../vendor/esbuild/bin
1
+ EsbuildPath = ../../vendor/esbuild/native/node_modules/@esbuild
2
2
 
3
3
  [favicon.png]
4
4
  Type = Copy
@@ -11,7 +11,7 @@ Ignore = favicon.png *.js *.css
11
11
 
12
12
  [static/site.min.js]
13
13
  Type = Bundle
14
- Source = flat/static.js
14
+ Source = ../../src/web/flat/static.js
15
15
 
16
16
  [static/highlight.min.js]
17
17
  Type = Bundle
@@ -20,4 +20,4 @@ Source = static/highlight.js
20
20
  [static/site.min.css]
21
21
  Type = Bundle
22
22
  Source = static/koffi.css
23
- Options = --loader:.woff=file --loader:.woff2=file --loader:.png=file --loader:.webp=file
23
+ Options = --loader:.woff2=file --loader:.png=file --loader:.webp=file
package/doc/develop.sh CHANGED
@@ -3,12 +3,13 @@
3
3
  cd "$(dirname $0)"
4
4
 
5
5
  ../../bootstrap.sh
6
- ../../felix -pFast serf hodler
6
+ ../../felix -pFast nestor hodler
7
7
 
8
8
  trap 'kill $(jobs -p) 2>/dev/null' EXIT
9
9
  trap 'kill $(jobs -p) 2>/dev/null' SIGINT
10
10
 
11
- ../../bin/Fast/serf dist/ &
12
- ../../bin/Fast/hodler . -O dist --loop &
11
+ mkdir -p dist
12
+ ../../bin/Fast/nestor dist/ &
13
+ ../../bin/Fast/hodler . -O dist --loop --sourcemap &
13
14
 
14
15
  wait $(jobs -p)
@@ -19,7 +19,7 @@ ISA / OS | Windows | Linux (glibc) | Linux (musl)
19
19
  x86 (IA32) [^1] | ✅ | ✅ | 🟨
20
20
  x86_64 (AMD64) | ✅ | ✅ | ✅
21
21
  ARM32 LE [^2] | ⬜️ | ✅ | 🟨
22
- ARM64 (AArch64) LE | ✅ | ✅ | 🟨
22
+ ARM64 (AArch64) LE | ✅ | ✅ |
23
23
  RISC-V 64 [^3] | ⬜️ | ✅ | 🟨
24
24
  LoongArch64 | ⬜️ | ✅ | 🟨
25
25
 
@@ -1,4 +1,4 @@
1
- // Copyright (C) 2024 Niels Martignène <niels.martignene@protonmail.com>
1
+ // Copyright (C) 2025 Niels Martignène <niels.martignene@protonmail.com>
2
2
  //
3
3
  // This program is free software: you can redistribute it and/or modify
4
4
  // it under the terms of the GNU General Public License as published by
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2024 Niels Martignène <niels.martignene@protonmail.com>
1
+ /* Copyright (C) 2025 Niels Martignène <niels.martignene@protonmail.com>
2
2
 
3
3
  This program is free software: you can redistribute it and/or modify
4
4
  it under the terms of the GNU General Public License as published by
@@ -13,10 +13,11 @@
13
13
  You should have received a copy of the GNU General Public License
14
14
  along with this program. If not, see <https://www.gnu.org/licenses/>. */
15
15
 
16
- @import url('../flat/flat.css');
16
+ @import url('../../../src/web/flat/flat.css');
17
17
  @import url('../../../vendor/highlight.js/styles/base16/tomorrow.css');
18
18
 
19
19
  html {
20
20
  --top_color: #ec7400;
21
+ --button_color: #ec7400;
21
22
  --anchor_color: #ec7400;
22
23
  }
@@ -1,4 +1,4 @@
1
- /* Copyright (C) 2024 Niels Martignène <niels.martignene@protonmail.com>
1
+ /* Copyright (C) 2025 Niels Martignène <niels.martignene@protonmail.com>
2
2
 
3
3
  This program is free software: you can redistribute it and/or modify
4
4
  it under the terms of the GNU General Public License as published by
@@ -12,8 +12,8 @@
12
12
  <meta name="theme-color" content="#6aa051">
13
13
  <link rel="stylesheet" href="{{ ASSET static/site.min.css }}">
14
14
 
15
- <script type="text/javascript" src="{{ ASSET static/site.min.js }}" async></script>
16
- <script type="text/javascript" src="{{ ASSET static/highlight.min.js }}" async></script>
15
+ <script type="text/javascript" src="{{ ASSET static/site.min.js }}"></script>
16
+ <script type="text/javascript" src="{{ ASSET static/highlight.min.js }}"></script>
17
17
  </head>
18
18
 
19
19
  <body>
@@ -21,7 +21,7 @@
21
21
 
22
22
  <nav id="top">
23
23
  <menu>
24
- <a id="logo" href="/"><img src="{{ ASSET static/logo.webp }}" alt="Logo Koffi" /></a>
24
+ <a id="logo" href="/"><img src="{{ ASSET static/logo.webp }}" width="370" height="198" alt="" /></a>
25
25
 
26
26
  {{ LINKS }}
27
27
 
@@ -39,9 +39,9 @@
39
39
  </main>
40
40
 
41
41
  <footer>
42
- <div>Koffi © 2024</div>
42
+ <div>Koffi © 2025</div>
43
43
  <div style="font-size: 0.8em;">
44
- Niels Martignène (<a href="https://github.com/Koromix/" target="_blank">Koromix</a>)<br>
44
+ Niels Martignène (<a href="https://koromix.dev/" target="_blank">Koromix</a>)<br>
45
45
  <a href="mailto:niels.martignene@protonmail.com" style="font-weight: bold; color: inherit;">niels.martignene@protonmail.com</a>
46
46
  </div>
47
47
  </footer>
@@ -12,7 +12,7 @@
12
12
  <meta name="theme-color" content="#6aa051">
13
13
  <link rel="stylesheet" href="{{ ASSET static/site.min.css }}">
14
14
 
15
- <script type="text/javascript" src="{{ ASSET static/site.min.js }}" async></script>
15
+ <script type="text/javascript" src="{{ ASSET static/site.min.js }}"></script>
16
16
  </head>
17
17
 
18
18
  <body>
@@ -20,7 +20,7 @@
20
20
 
21
21
  <nav id="top">
22
22
  <menu>
23
- <a id="logo" href="/"><img src="{{ ASSET static/logo.webp }}" alt="Logo Koffi" /></a>
23
+ <a id="logo" href="/"><img src="{{ ASSET static/logo.webp }}" width="370" height="198" alt="" /></a>
24
24
 
25
25
  {{ LINKS }}
26
26
 
@@ -38,9 +38,9 @@
38
38
  </main>
39
39
 
40
40
  <footer>
41
- <div>Koffi © 2024</div>
41
+ <div>Koffi © 2025</div>
42
42
  <div style="font-size: 0.8em;">
43
- Niels Martignène (<a href="https://github.com/Koromix/" target="_blank">Koromix</a>)<br>
43
+ Niels Martignène (<a href="https://koromix.dev/" target="_blank">Koromix</a>)<br>
44
44
  <a href="mailto:niels.martignene@protonmail.com" style="font-weight: bold; color: inherit;">niels.martignene@protonmail.com</a>
45
45
  </div>
46
46
  </footer>