|
60368
|
NASA stardance by @_AADARSH_ | Stardance
|
_AADARSH_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: NASA stardance by @_AADARSH_ | Stardance
|
1793033449.2326202
|
1793638249.2326202
|
|
60367
|
NASA stardance by @_AADARSH_ | Stardance
|
_AADARSH_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: NASA stardance by @_AADARSH_ | Stardance
|
1793033448.3989258
|
1793638248.3989258
|
|
60366
|
NASA stardance by @_AADARSH_ | Stardance
|
_AADARSH_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: NASA stardance by @_AADARSH_ | Stardance
|
1793033446.8515272
|
1793638246.8515272
|
|
36379
|
CRUD! with Creatu by @misofartist | Stardance
|
misofartist
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T10:37:53Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "probably won’t go furtherthanthis; this was a demonstration of crud on React.js with supabase! i will be using these skills in bigger future projects ^^ for now, you may play with “hatching” and creating a (shared) army of creatu ^^ (note: i do not own the IP of creatu; all rghts reserved to Truelight Media)", "repo": "https://github.com/mmicat/creatu-crud", "demo": "https://creatu.netlify.app"}]...
|
[{"post_id": 30058, "ts": "202 [{"post_id": 30058, "ts": "2026-07-17T10:37:23Z", "hours": 0.9619, "text": "probably won’t go furtherthanthis; this was a demonstration of crud on React.js with supabase! i will be using these skills in bigger future projects ^^ for now, you may play with “hatching” and creating a (shared) army of creatu ^^ (note: i do not own the IP of creatu; all rghts reserved to Truelight Media)"}]...
|
Title: CRUD! with Creatu by @misofartist | Stardan Title: CRUD! with Creatu by @misofartist | Stardance
Devlogs:
probably won’t go furtherthanthis; this was a demonstration of crud on React.js with supabase! i will be using these skills in bigger future projects ^^ for now, you may play with “hatching” and creating a (shared) army of creatu ^^ (note: i do not own the IP of creatu; all rghts reserved to Truelight Media)
Ships:
probably won’t go furtherthanthis; this was a demonstration of crud on React.js with supabase! i will be using these skills in bigger future projects ^^ for now, you may play with “hatching” and creating a (shared) army of creatu ^^ (note: i do not own the IP of creatu; all rghts reserved to Truelight Media)...
|
1793551843.7152274
|
1793638243.7152274
|
|
60365
|
NASA stardance by @_AADARSH_ | Stardance
|
_AADARSH_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: NASA stardance by @_AADARSH_ | Stardance
|
1793033443.2204413
|
1793638243.2204413
|
|
60364
|
NASA stardance by @_AADARSH_ | Stardance
|
_AADARSH_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: NASA stardance by @_AADARSH_ | Stardance
|
1793033441.9806056
|
1793638241.9806056
|
|
60363
|
NASA stardance by @_AADARSH_ | Stardance
|
_AADARSH_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: NASA stardance by @_AADARSH_ | Stardance
|
1793033441.128419
|
1793638241.128419
|
|
60362
|
NASA stardance by @_AADARSH_ | Stardance
|
_AADARSH_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: NASA stardance by @_AADARSH_ | Stardance
|
1793033440.2811654
|
1793638240.2811654
|
|
60361
|
NASA stardance by @_AADARSH_ | Stardance
|
_AADARSH_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: NASA stardance by @_AADARSH_ | Stardance
|
1793033439.3747952
|
1793638239.3747952
|
|
60360
|
NASA stardance by @_AADARSH_ | Stardance
|
_AADARSH_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: NASA stardance by @_AADARSH_ | Stardance
|
1793033438.4958608
|
1793638238.4958608
|
|
49376
|
My own site! by @lmao_DK | Stardance
|
lmao_DK
|
2
|
3.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-19T13:41:07Z", "hours": 0.0, "multiplier": 2.13, "payout": 1, "blessing": "neutral", "text": "just finished with all the updates", "repo": "https://github.com/Code-Breaker16/personal-site", "demo": "https://personal-site-eta-ebon.vercel.app/"}, {"ship_num": 2, "ts": "2026-08-17T18:22:42Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I just completed my first project here not my first html project but one of the complex yet easy ones ive worked on. The java script part a bit tricky but im glad i pushed myself to acheive it and finally i love how the whole site comes out many of u might thinks its ai generated but trust me it is not ive worked 3hrs on this basic project to make it look how it looks rn. Thank you and hope u guys will show some love to it .", "repo": "https://github.com/Code-Breaker16/personal-site", "demo": "https://personal-site-eta-ebon.vercel.app/"}]...
|
[{"post_id": 50278, "ts": "202 [{"post_id": 50278, "ts": "2026-08-19T13:04:28Z", "hours": 0.3797, "text": "just finished with all the updates"}, {"post_id": 49083, "ts": "2026-08-17T18:14:50Z", "hours": 1.7508, "text": "finally done with the project"}, {"post_id": 48365, "ts": "2026-08-16T17:57:15Z", "hours": 0.6386, "text": "Just done with the main html part starting off with css and jss"}, {"post_id": 48038, "ts": "2026-08-16T10:17:32Z", "hours": 0.4811, "text": "Just started working on my site not my first website, but the most special one. Done with the first section, the About Me part. Now I’ll be taking a break and studying for my exam tomorrow"}]...
|
Title: My own site! by @lmao_DK | Stardance
Devlo Title: My own site! by @lmao_DK | Stardance
Devlogs:
Just started working on my site not my first website, but the most special one. Done with the first section, the About Me part. Now I’ll be taking a break and studying for my exam tomorrow
Just done with the main html part starting off with css and jss
finally done with the project
just finished with all the updates
Ships:
I just completed my first project here not my first html project but one of the complex yet easy ones ive worked on. The java script part a bit tricky but im glad i pushed myself to acheive it and finally i love how the whole site comes out many of u might thinks its ai generated but trust me it is not ive worked 3hrs on this basic project to make it look how it looks rn. Thank you and hope u guys will show some love to it .
just finished with all the updates...
|
1793551838.4672477
|
1793638238.4672477
|
|
60359
|
BLARE!!!!!!!!!!!!!!!!!! by @Jadon | Stardance
|
Jadon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BLARE!!!!!!!!!!!!!!!!!! by @Jadon | Stardan Title: BLARE!!!!!!!!!!!!!!!!!! by @Jadon | Stardance...
|
1793033437.5917387
|
1793638237.5917387
|
|
60358
|
My very own WebOS by @atharva_ | Stardance
|
atharva_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @atharva_ | Stardance
|
1793033436.7429974
|
1793638236.7429974
|
|
60357
|
Website by @Bananchic | Stardance
|
Bananchic
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Website by @Bananchic | Stardance
|
1793033435.8983138
|
1793638235.8983138
|
|
60356
|
Signal Lab a virtual radio playground by @VeteranO Signal Lab a virtual radio playground by @VeteranOfDeath | Stardance...
|
VeteranOfDeath
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Signal Lab a virtual radio playground by @V Title: Signal Lab a virtual radio playground by @VeteranOfDeath | Stardance...
|
1793033435.0533557
|
1793638235.0533557
|
|
60355
|
My own site! by @mohamadkrd | Stardance
|
mohamadkrd
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @mohamadkrd | Stardance
|
1793033434.180448
|
1793638234.180448
|
|
60354
|
Web shooters with actual web fluid. by @Original | Web shooters with actual web fluid. by @Original | Stardance...
|
Original
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Web shooters with actual web fluid. by @Ori Title: Web shooters with actual web fluid. by @Original | Stardance...
|
1793033433.3165832
|
1793638233.3165832
|
|
60353
|
Web shooters with actual web fluid. by @Original | Web shooters with actual web fluid. by @Original | Stardance...
|
Original
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Web shooters with actual web fluid. by @Ori Title: Web shooters with actual web fluid. by @Original | Stardance...
|
1793033432.4590683
|
1793638232.4590683
|
|
45447
|
xdna.cpp by @satvikhardat | Stardance
|
|
1
|
87.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T15:45:47Z", "hours": 87.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Run GGUF quantized models directly on AMD XDNA1 NPUs (Ryzen AI 7040 / 8040 series) with llama.cpp its a fork or bettter said plugin of llama.cpp specially made to run models using amd NPUs Using AMD’s hawkpoint NPUs to run LLMs!! its a llama.cpp plugin not a standalone runtime to ensure supporting most models, but it has a few cool kernels targeted at the the xdna1 arch bcs as it turns out, the support for xdna1 NPUs is like really dead everyones like xdna2 yay, but i hv a xdna1 CPU so ima use every bit of it ig lol", "repo": "https://github.com/random-unknown-username/xdna.cpp", "demo": "https://github.com/random-unknown-username/xdna.cpp/releases/tag/v1.0.0"}]...
|
[{"post_id": 58984, "ts": "202 [{"post_id": 58984, "ts": "2026-08-31T15:43:02Z", "hours": 7.7858, "text": "Devlog 08 — Aug 31: The Crossover Spectrum & v1.0 Ship Finished multi-model crossover validation across three scales (0.5B, 3B, 27B): // Adaptive Heterogeneous Scheduling if ( N <= 256 ) { // Tiny matrices (<60 KB) run on CPU SIMD to avoid driver dispatch overhead cpu_engine -> run ( weights , weight_bytes , N , K , act , out ); } else { // Medium/Large matrices stream to 16 AIE2 compute tiles xdna_engine -> run ( weights , weight_bytes , N , K , act , out ); } Measured Crossover Scoreboard Qwen2.5-0.5B (403 MB) : CPU favored (106.5 t/s vs 72.6 t/s XDNA hybrid) due to small 60 KB payloads. Qwen2.5-3B (1.86 GB) : XDNA wins decisively: 16.5 tok/s vs 9.8 tok/s CPU (+68.8% / 1.69× speedup) . Qwen3.8-27B (15.2 GB) : XDNA sustains 1.72 tok/s streaming 12.6 GiB smoothly on a 32 GB laptop. Numerical Quality : Verified 100% Top-1 token match across all 3 scales. Shipped v1.0.0 with standalone binaries and clean architecture docs!"}, {"post_id": 57796, "ts": "2026-08-30T02:55:21Z", "hours": 12.8164, "text": "Devlog 07: Bounded 128MB Staging Ring & The 11.5x Recovery Architected the fix for the 27B memory collapse: a bounded double-buffered staging ring in src/xdna-gemv-engine.cpp . // Allocate exactly two 64 MB host-only staging buffers (128 MB total pinned memory) static constexpr size_t STAGING_BO_SIZE = 64 * 1024 * 1024 ; bo_staging [ 0 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); bo_staging [ 1 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); // Double-buffered stream from mmap page cache size_t stage_idx = current_op % 2 ; std :: memcpy ( bo_staging_map [ stage_idx ], mmap_weight_ptr , weight_bytes ); kernel_dpu -> operator ()(..., * bo_staging [ stage_idx ], ...); flags::host_only : Limits pinned kernel memory strictly to $2 \\times 64\\text{ MB} = \\mathbf{128\\text{ MB}}$. mmap_weight_ptr : Weights stay in standard page cache ( MAP_SHARED ), freely managed by Linux VM. Result: pgmajfault and swap dropped to 0 . 27B decode speed jumped from 0.15 tok/s to 1.72 tok/s —an 11.5× end-to-end recovery ."}, {"post_id": 54488, "ts": "2026-08-25T14:40:48Z", "hours": 12.2272, "text": "Devlog 06 The 27B Disaster & 12.6 GB Unevictable BO Crisis Tried loading Qwen3.8-27B-Q4_0 (15.2 GB). Everything collapsed: token speed plummeted to 0.15 tok/s (6.67 seconds/token) . Ran /proc/meminfo and /proc/vmstat diffs during decode to find the bottleneck: /proc/meminfo during 27B crash: MemTotal: 31,842 MB Unevictable: 12,640 MB <-- 369 persistent XRT BOs locked in RAM! pgmajfault: 520,118 <-- 520k disk page reads PER TOKEN pswpout: 18,400 <-- active swap storm The bug: Allocating persistent xrt::bo objects for all 369 model tensors pinned 12.6 GB into Unevictable kernel memory . The result: On a 32 GB laptop with OS and KV cache, Linux was starved of clean page cache. Every layer forced synchronous swap-outs and major page faults to disk. Persistent BO allocation for large models is fundamentally broken on consumer RAM."}, {"post_id": 50947, "ts": "2026-08-20T12:42:25Z", "hours": 9.7175, "text": "Devlog 05: Standalone GEMV Ceiling: Sustaining 38.5 GB/s Built tools/bench-aie-gemv-standalone.cpp to measure pure hardware DMA bandwidth without graph scheduler overhead. auto t0 = std :: chrono :: high_resolution_clock :: now (); bo_weights -> sync ( XCL_BO_SYNC_BO_TO_DEVICE ); kernel_run . wait (); auto t1 = std :: chrono :: high_resolution_clock :: now (); double gb_s = ( bytes / ( dt_ns * 1e-9 )) / 1e9 ; sync(TO_DEVICE) : Flushes dirty CPU lines and triggers DMA transport. kernel_run.wait() : Waits for AIE vector compute completion. Tested synthetic matrix sizes out to 1 GB ($K=5120$): 16 MB: 31.87 GB/s (0.53 ms) 128 MB: 34.27 GB/s (3.92 ms) 1024 MB: 38.57 GB/s (27.84 ms) Linear fit: $T(\\text{bytes}) \\approx 0.15\\text{ ms} + \\frac{\\text{bytes}}{38.5\\text{ GB/s}}$. The ~150 µs startup overhead gets amortized as matrix size grows."}, {"post_id": 47977, "ts": "2026-08-16T07:59:35Z", "hours": 11.2086, "text": "Devlog 04: 4-Column Planar Prepacking & First Real AIE Run Standard GGUF interleaves nibbles row-by-row. But AIE2 vector tiles need weights split into 4 independent planar column channels aligned to 64-byte boundaries. Wrote xdna-q4-prepack.cpp to deinterleave GGUF Q4 weights: // 4-Column Planar Deinterleaving for ( size_t col = 0 ; col < 4 ; ++ col ) { uint8_t * dst_col = packed_out + col * col_bytes ; for ( size_t row = 0 ; row < N ; ++ row ) { const uint8_t * src_nibbles = src_weights + row * row_stride + col * ( K / 4 ) / 2 ; deinterleave_and_align64 ( src_nibbles , dst_col + row * 64 , K / 4 ); } } col * (K / 4) : Strips matrix columns across the 4 independent NPU memory tiles. 64-byte alignment : Direct DMA streaming into tile L1 SRAM without unaligned stalls. Inside AIE: aie::unpack converts uint4 to BF16, scales, and computes fused vector MACs. First interactive generation on physical NPU! Cosine similarity against CPU FP32 oracle: 0.9999 ."}, {"post_id": 46963, "ts": "2026-08-14T15:29:37Z", "hours": 13.0922, "text": "Devlog 03: The CPU Baseline (AVX2 / FMA Golden Oracle) Before writing custom AIE kernels, we needed an unyielding golden oracle to check numerical correctness and see how fast the host CPU is. Wrote an unrolled AVX2/FMA Q4_0 vector engine in src/cpu-q4-gemv-engine.cpp : const __m256i raw = _mm256_loadu_si256 ( reinterpret_cast < const __m256i *> ( w_ptr )); const __m256i lo_nibbles = _mm256_and_si256 ( raw , _mm256_set1_epi8 ( 0x0F )); const __m256 w_f32 = _mm256_cvtepi32_ps ( _mm256_sub_epi32 ( lo_nibbles , _mm256_set1_epi32 ( 8 ))); acc = _mm256_fmadd_ps ( _mm256_mul_ps ( w_f32 , scale_vec ), act_vec , acc ); _mm256_and_si256(..., 0x0F) : Masks out the low 4-bit nibbles from 32 packed weights. _mm256_sub_epi32(..., 8) : Subtracts the Q4_0 symmetric offset (8). _mm256_fmadd_ps : Fused multiply-accumulate with FP32 activations in single-cycle throughput. Benchmarked Qwen2.5-0.5B on CPU: 106.5 tok/s (9.38 ms/tok) on 8 threads. Modern Zen 4 AVX2 is blazing fast on small models, so the NPU has a high bar to clear."}, {"post_id": 44511, "ts": "2026-08-10T09:54:07Z", "hours": 8.0289, "text": "Devlog 02: Hardware Smoke Tests & The 14ms Trap why have random shi like gate-1? bcs xdna1 is the worst supported from amd, idk their docs are incomplete im like testing and figuring stuff out Gate 1 milestone: getting real AIE execution contexts spinning via AMD XRT. Initial prototype had a huge bug: we were creating an xrt::hw_context and reloading the .xclbin bitstream inside the operator compute loop. Profiling showed this added ~14 ms of pure driver overhead per tensor dispatch —which murdered performance before we even started doing math. Fixed it by making the context a persistent backend singleton: // Initialize context & load bitstream ONCE at startup device = std :: make_unique < xrt :: device > ( device_index ); xrt :: uuid uuid = device -> register_xclbin ( xclbin_img ); hw_ctx = std :: make_unique < xrt :: hw_context > ( * device , uuid ); xrt :: module mod ( elf_img ); kernel_dpu = std :: make_unique < xrt :: kernel > ( xrt :: ext :: kernel ( * hw_ctx , mod , \"DPU\" )); device->register_xclbin : Flashes the DPU bitstream once into the NPU fabric. hw_ctx : Persistent hardware context reused across all tensor iterations. Dispatch overhead instantly dropped from 14 ms down to ~38 µs."}, {"post_id": 43766, "ts": "2026-08-09T05:55:28Z", "hours": 12.0031, "text": "Devlog 01: Talking to the Silicon (DRM & Phoenix Discovery) So the plan is simple: get GGUF models running straight on the Ryzen AI NPU without touching bloated ONNX or Vitis runtimes. First step was checking if we could even talk to /dev/accel/accel0 directly without root. Wrote a quick probe calling the kernel’s amdxdna DRM driver ioctls: struct amdxdna_drm_get_info info {}; info . param = DRM_AMDXDNA_GET_INFO_TOPOLOGY ; ioctl ( fd , DRM_IOCTL_AMDXDNA_GET_INFO , & info ); DRM_IOCTL_AMDXDNA_GET_INFO : Queries the hardware directly from the kernel. info.param = TOPOLOGY : Confirmed our Phoenix chip has 4 columns × 4 compute rows = 16 AIE2 tiles. Instead of dragging in a 10 GB SDK, we wrote our own include/xdna/amdxdna_uapi.h directly matching the kernel driver structs. Zero bloat, instant builds."}]...
|
Title: xdna.cpp by @satvikhardat | Stardance
Devl Title: xdna.cpp by @satvikhardat | Stardance
Devlogs:
Devlog 01: Talking to the Silicon (DRM & Phoenix Discovery) So the plan is simple: get GGUF models running straight on the Ryzen AI NPU without touching bloated ONNX or Vitis runtimes. First step was checking if we could even talk to /dev/accel/accel0 directly without root. Wrote a quick probe calling the kernel’s amdxdna DRM driver ioctls: struct amdxdna_drm_get_info info {}; info . param = DRM_AMDXDNA_GET_INFO_TOPOLOGY ; ioctl ( fd , DRM_IOCTL_AMDXDNA_GET_INFO , & info ); DRM_IOCTL_AMDXDNA_GET_INFO : Queries the hardware directly from the kernel. info.param = TOPOLOGY : Confirmed our Phoenix chip has 4 columns × 4 compute rows = 16 AIE2 tiles. Instead of dragging in a 10 GB SDK, we wrote our own include/xdna/amdxdna_uapi.h directly matching the kernel driver structs. Zero bloat, instant builds.
Devlog 02: Hardware Smoke Tests & The 14ms Trap why have random shi like gate-1? bcs xdna1 is the worst supported from amd, idk their docs are incomplete im like testing and figuring stuff out Gate 1 milestone: getting real AIE execution contexts spinning via AMD XRT. Initial prototype had a huge bug: we were creating an xrt::hw_context and reloading the .xclbin bitstream inside the operator compute loop. Profiling showed this added ~14 ms of pure driver overhead per tensor dispatch —which murdered performance before we even started doing math. Fixed it by making the context a persistent backend singleton: // Initialize context & load bitstream ONCE at startup device = std :: make_unique < xrt :: device > ( device_index ); xrt :: uuid uuid = device -> register_xclbin ( xclbin_img ); hw_ctx = std :: make_unique < xrt :: hw_context > ( * device , uuid ); xrt :: module mod ( elf_img ); kernel_dpu = std :: make_unique < xrt :: kernel > ( xrt :: ext :: kernel ( * hw_ctx , mod , "DPU" )); device->register_xclbin : Flashes the DPU bitstream once into the NPU fabric. hw_ctx : Persistent hardware context reused across all tensor iterations. Dispatch overhead instantly dropped from 14 ms down to ~38 µs.
Devlog 03: The CPU Baseline (AVX2 / FMA Golden Oracle) Before writing custom AIE kernels, we needed an unyielding golden oracle to check numerical correctness and see how fast the host CPU is. Wrote an unrolled AVX2/FMA Q4_0 vector engine in src/cpu-q4-gemv-engine.cpp : const __m256i raw = _mm256_loadu_si256 ( reinterpret_cast < const __m256i *> ( w_ptr )); const __m256i lo_nibbles = _mm256_and_si256 ( raw , _mm256_set1_epi8 ( 0x0F )); const __m256 w_f32 = _mm256_cvtepi32_ps ( _mm256_sub_epi32 ( lo_nibbles , _mm256_set1_epi32 ( 8 ))); acc = _mm256_fmadd_ps ( _mm256_mul_ps ( w_f32 , scale_vec ), act_vec , acc ); _mm256_and_si256(..., 0x0F) : Masks out the low 4-bit nibbles from 32 packed weights. _mm256_sub_epi32(..., 8) : Subtracts the Q4_0 symmetric offset (8). _mm256_fmadd_ps : Fused multiply-accumulate with FP32 activations in single-cycle throughput. Benchmarked Qwen2.5-0.5B on CPU: 106.5 tok/s (9.38 ms/tok) on 8 threads. Modern Zen 4 AVX2 is blazing fast on small models, so the NPU has a high bar to clear.
Devlog 04: 4-Column Planar Prepacking & First Real AIE Run Standard GGUF interleaves nibbles row-by-row. But AIE2 vector tiles need weights split into 4 independent planar column channels aligned to 64-byte boundaries. Wrote xdna-q4-prepack.cpp to deinterleave GGUF Q4 weights: // 4-Column Planar Deinterleaving for ( size_t col = 0 ; col < 4 ; ++ col ) { uint8_t * dst_col = packed_out + col * col_bytes ; for ( size_t row = 0 ; row < N ; ++ row ) { const uint8_t * src_nibbles = src_weights + row * row_stride + col * ( K / 4 ) / 2 ; deinterleave_and_align64 ( src_nibbles , dst_col + row * 64 , K / 4 ); } } col * (K / 4) : Strips matrix columns across the 4 independent NPU memory tiles. 64-byte alignment : Direct DMA streaming into tile L1 SRAM without unaligned stalls. Inside AIE: aie::unpack converts uint4 to BF16, scales, and computes fused vector MACs. First interactive generation on physical NPU! Cosine similarity against CPU FP32 oracle: 0.9999 .
Devlog 05: Standalone GEMV Ceiling: Sustaining 38.5 GB/s Built tools/bench-aie-gemv-standalone.cpp to measure pure hardware DMA bandwidth without graph scheduler overhead. auto t0 = std :: chrono :: high_resolution_clock :: now (); bo_weights -> sync ( XCL_BO_SYNC_BO_TO_DEVICE ); kernel_run . wait (); auto t1 = std :: chrono :: high_resolution_clock :: now (); double gb_s = ( bytes / ( dt_ns * 1e-9 )) / 1e9 ; sync(TO_DEVICE) : Flushes dirty CPU lines and triggers DMA transport. kernel_run.wait() : Waits for AIE vector compute completion. Tested synthetic matrix sizes out to 1 GB ($K=5120$): 16 MB: 31.87 GB/s (0.53 ms) 128 MB: 34.27 GB/s (3.92 ms) 1024 MB: 38.57 GB/s (27.84 ms) Linear fit: $T(\text{bytes}) \approx 0.15\text{ ms} + \frac{\text{bytes}}{38.5\text{ GB/s}}$. The ~150 µs startup overhead gets amortized as matrix size grows.
Devlog 06 The 27B Disaster & 12.6 GB Unevictable BO Crisis Tried loading Qwen3.8-27B-Q4_0 (15.2 GB). Everything collapsed: token speed plummeted to 0.15 tok/s (6.67 seconds/token) . Ran /proc/meminfo and /proc/vmstat diffs during decode to find the bottleneck: /proc/meminfo during 27B crash: MemTotal: 31,842 MB Unevictable: 12,640 MB <-- 369 persistent XRT BOs locked in RAM! pgmajfault: 520,118 <-- 520k disk page reads PER TOKEN pswpout: 18,400 <-- active swap storm The bug: Allocating persistent xrt::bo objects for all 369 model tensors pinned 12.6 GB into Unevictable kernel memory . The result: On a 32 GB laptop with OS and KV cache, Linux was starved of clean page cache. Every layer forced synchronous swap-outs and major page faults to disk. Persistent BO allocation for large models is fundamentally broken on consumer RAM.
Devlog 07: Bounded 128MB Staging Ring & The 11.5x Recovery Architected the fix for the 27B memory collapse: a bounded double-buffered staging ring in src/xdna-gemv-engine.cpp . // Allocate exactly two 64 MB host-only staging buffers (128 MB total pinned memory) static constexpr size_t STAGING_BO_SIZE = 64 * 1024 * 1024 ; bo_staging [ 0 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); bo_staging [ 1 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); // Double-buffered stream from mmap page cache size_t stage_idx = current_op % 2 ; std :: memcpy ( bo_staging_map [ stage_idx ], mmap_weight_ptr , weight_bytes ); kernel_dpu -> operator ()(..., * bo_staging [ stage_idx ], ...); flags::host_only : Limits pinned kernel memory strictly to $2 \times 64\text{ MB} = \mathbf{128\text{ MB}}$. mmap_weight_ptr : Weights stay in standard page cache ( MAP_SHARED ), freely managed by Linux VM. Result: pgmajfault and swap dropped to 0 . 27B decode speed jumped from 0.15 tok/s to 1.72 tok/s —an 11.5× end-to-end recovery .
Devlog 08 — Aug 31: The Crossover Spectrum & v1.0 Ship Finished multi-model crossover validation across three scales (0.5B, 3B, 27B): // Adaptive Heterogeneous Scheduling if ( N <= 256 ) { // Tiny matrices (<60 KB) run on CPU SIMD to avoid driver dispatch overhead cpu_engine -> run ( weights , weight_bytes , N , K , act , out ); } else { // Medium/Large matrices stream to 16 AIE2 compute tiles xdna_engine -> run ( weights , weight_bytes , N , K , act , out ); } Measured Crossover Scoreboard Qwen2.5-0.5B (403 MB) : CPU favored (106.5 t/s vs 72.6 t/s XDNA hybrid) due to small 60 KB payloads. Qwen2.5-3B (1.86 GB) : XDNA wins decisively: 16.5 tok/s vs 9.8 tok/s CPU (+68.8% / 1.69× speedup) . Qwen3.8-27B (15.2 GB) : XDNA sustains 1.72 tok/s streaming 12.6 GiB smoothly on a 32 GB laptop. Numerical Quality : Verified 100% Top-1 token match across all 3 scales. Shipped v1.0.0 with standalone binaries and clean architecture docs!
Ships:
Run GGUF quantized models directly on AMD XDNA1 NPUs (Ryzen AI 7040 / 8040 series) with llama.cpp its a fork or bettter said plugin of llama.cpp specially made to run models using amd NPUs Using AMD’s hawkpoint NPUs to run LLMs!! its a llama.cpp plugin not a standalone runtime to ensure supporting most models, but it has a few cool kernels targeted at the the xdna1 arch bcs as it turns out, the support for xdna1 NPUs is like really dead everyones like xdna2 yay, but i hv a xdna1 CPU so ima use every bit of it ig lol...
|
1793551831.8490946
|
1793638231.8490946
|
|
60352
|
Game by @Bananchic | Stardance
|
Bananchic
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Game by @Bananchic | Stardance
|
1793033431.560834
|
1793638231.560834
|
|
60350
|
lighthing chaos by @Joely | Stardance
|
Joely
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lighthing chaos by @Joely | Stardance
|
1793033430.7049756
|
1793638230.7049756
|
|
60349
|
Wind tunnel by @lukas_ertmonas | Stardance
|
lukas_ertmonas
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Wind tunnel by @lukas_ertmonas | Stardance
|
1793033429.8334486
|
1793638229.8334486
|
|
60348
|
Frenzi by @frenchwizz | Stardance
|
frenchwizz
|
0
|
0.38
|
0
|
[]
|
[{"post_id": 81037, "ts": "202 [{"post_id": 81037, "ts": "2026-10-19T17:05:02Z", "hours": 0.3778, "text": "Initial Devlog"}]...
|
Title: Frenzi by @frenchwizz | Stardance
Devlogs: Title: Frenzi by @frenchwizz | Stardance
Devlogs:
Initial Devlog...
|
1793033428.9715018
|
1793638228.9715018
|
|
60347
|
Untitled project by @Joely | Stardance
|
Joely
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Joely | Stardance
|
1793033428.1317616
|
1793638228.1317616
|
|
60346
|
Untitled project by @WWW | Stardance
|
WWW
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @WWW | Stardance
|
1793033427.261351
|
1793638227.261351
|
|
46823
|
3D Dino by @mohamedassem495 | Stardance
|
mohamedassem495
|
1
|
6.0
|
28
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T22:48:55Z", "hours": 6.0, "multiplier": 4.75, "payout": 28, "blessing": "neutral", "text": "The Dino game in 3D view, it was a little bit challenging to load these models as they are in one file. I really like the idea of the game as I spend too much time playing Dino when the internet is off.", "repo": "https://github.com/Mohammed-Assem/Dino", "demo": "https://mohammed-assem.github.io/Dino/"}]...
|
[{"post_id": 49944, "ts": "202 [{"post_id": 49944, "ts": "2026-08-18T22:36:55Z", "hours": 0.5689, "text": "I have added a readme file also made the game faster as u continue in it"}, {"post_id": 49568, "ts": "2026-08-18T13:29:33Z", "hours": 5.2489, "text": "I’m about to finish this game. It’s the dino game, but in a 3d view. I have added 3 lanes to move between, and the cactus model loads and chooses a random lane to appear every 0.5 sec; you can control motion between the lanes using the arrows. I am planning now to add the duck and jump shapes"}]...
|
Title: 3D Dino by @mohamedassem495 | Stardance
De Title: 3D Dino by @mohamedassem495 | Stardance
Devlogs:
I’m about to finish this game. It’s the dino game, but in a 3d view. I have added 3 lanes to move between, and the cactus model loads and chooses a random lane to appear every 0.5 sec; you can control motion between the lanes using the arrows. I am planning now to add the duck and jump shapes
I have added a readme file also made the game faster as u continue in it
Ships:
The Dino game in 3D view, it was a little bit challenging to load these models as they are in one file. I really like the idea of the game as I spend too much time playing Dino when the internet is off....
|
1793551826.6234531
|
1793638226.6234531
|
|
60344
|
My awesome macropad! by @GOVA | Stardance
|
GOVA
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @GOVA | Stardance
|
1793033426.3801599
|
1793638226.3801599
|
|
60343
|
StarFlight by @Cjhauser | Stardance
|
Cjhauser
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: StarFlight by @Cjhauser | Stardance
|
1793033425.5414712
|
1793638225.5414712
|
|
60341
|
Souls-Like by @checkers | Stardance
|
checkers
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Souls-Like by @checkers | Stardance
|
1793033424.6944442
|
1793638224.6944442
|
|
2805
|
FPEeee by @Duck | Stardance
|
Duck
|
2
|
191.0
|
3111
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-24T04:30:31Z", "hours": 58.0, "multiplier": 18.73, "payout": 1261, "blessing": "neutral", "text": "This is an updated version of my physics engine, using a new simulation method called XPBD! It was a bit challenging learning the basics of vector calculus, but it was worth it for the added flexibility of XPBD constraints and integration. I’m also really proud of getting OpenGL rendering working for some of the demos, because making an 3D renderer could be a project in and of itself! (Not this renderer though, it’s pretty barebones.) I’m especially happy with the cloth demo, with the best 3D rendering and (in my opinion) the best showcase of the engine’s features! (Also the least laggy of them all? I know why but it’s still kinda weird, being the most complex demo.) Writing it in C was a probably a bit harder than using a higher level language like C++, but being able to compile the entire project from source in less than two seconds on my machine was a big plus! I hope you enjoy playing with the physics demos! I worked really hard on this project!!", "repo": "https://github.com/duckdood/fpeeee", "demo": "https://duckdood.github.io/physics_demo"}, {"ship_num": 2, "ts": "2026-09-06T04:53:48Z", "hours": 133.0, "multiplier": 16.74, "payout": 1850, "blessing": "neutral", "text": "This is a position-based physics engine made all in C for portability and versatility. It had many challenging moments when making it, such as triangle collisions, spatial partitioning, performance optimization, and more, but I had a lot of fun building it, showing it off to my friends and family, and learning more about physics.", "repo": "https://github.com/duckdood/fpeeee", "demo": "https://duckdood.github.io/physics_demo"}]...
|
[{"post_id": 80800, "ts": "202 [{"post_id": 80800, "ts": "2026-10-18T20:26:33Z", "hours": 1.6025, "text": "Devlog #22 (I just realized that I accidentally did two devlog #15s but it’s too late now) Getting ready for another ship I edited some constraints to be more stable, edited the website to be a bit more clear of where the controls are if your screen is too small to fit them, and had a NIGHTMARE fiddling with ffmpeg to try and replace the video on the README to not be too laggy or low quality but also not too big. I also tried to do some performance optimizations for phones, but I couldn’t figure it out. This is the mp4 version animated WebP that I eventually got ffmpeg to spit out. For some reason animated WebPs don’t work in devlogs."}, {"post_id": 79264, "ts": "2026-10-13T08:10:35Z", "hours": 2.3019, "text": "Devlog #21 MERGING I’ve been rewriting a lot of the physics engine for XPBD (eXtended Position Based Dynamics) since the last ship, but on a separate branch so that if I broke anything too bad it wouldn’t show up on the website, but today I finally merged the xpbd branch into main. Sadly, it is a fair bit slower than the previous verlet integration (at least for my simple demos), but it’s a far more flexible integration and constraint scheme and I think the tradeoff is worth it. (I am a bit disappointed with the performance on the website though, I swear it was faster before I merged it! It’s a lot faster natively!)"}, {"post_id": 78023, "ts": "2026-10-09T07:13:56Z", "hours": 4.0489, "text": "Devlog #20 Another constraint, and another failed side project. Boundary constraint I added a constraint that I named a “boundary constraint”, that confines a particle to being on the specific side of a line e.g. making four lines around the edges of the screen and making sure the particle is on the side which is visible on screen. This is different from a wall because walls have two sides (and also zero thickness) which can cause a particle that’s going super fast to completely pass through to the other side of the wall in a single physics step, whereas with a boundary it will always snap it back to the correct side of the line. (If this was a bad explanation, I’m sorry). Failed lua integration I suppose the word ‘failed’ is a bit harsh in this scenario, I was just dipping my toes into integrating a little lua shell into the demos that would let you spawn particles and stuff programatically, but I decided it wasn’t worth it for small demos that aren’t meant to be super duper flexible anyway because they’re just meant to show off cool features the engine can do. throwing balls very quickly at the wall, which don’t clip through VVV"}, {"post_id": 75992, "ts": "2026-10-01T22:09:53Z", "hours": 10.0394, "text": "Devlog #19 Optimization and Interaction I’ve optimized the triangle collision code to use the spatial partitioning I implemented before for collisions. It goes through each triangle and checks what balls are in its bounding box with the collision grid, and completely skips any balls that aren’t close. This allows for about a thousand balls in a scene (at least on my computer), which is a lot better than the hundred or so you’d get with just bounding box checks and the tens or so you would get with a naive approach. Sadly, this change is only on the XPBD branch for now, meaning it won’t reflect on the website, but you’d still probably have to be spawning balls for a while for that to slow down, depending on the computer. I’ve also added far better interaction to the cloth, using some matrix multiplication and some raycast tests, you can now drag the cloth around with your mouse! This change was on the main branch too, so this is right on the website , right now! I did try to implement a system for having the cloth tear when it was under stress, but it would have required me to rework a lot of stuff and it didn’t quite work out. :("}, {"post_id": 74317, "ts": "2026-09-27T05:22:56Z", "hours": 11.4481, "text": "Devlog #18 Fluid simulation For a couple days I’ve been researching and trying to implement a PBF (position based fluid) fluid simulation, but there are barely any resources on the topic that I’ve been able to find, and the ones I have found are very math oriented with evil cryptic symbols that take a while to wrap my head around. The fluid simulation does work, but it’s much laggier, a lot finickier, and not a lot better (if at all better) than just chucking a couple thousand balls together and having them collide normally."}, {"post_id": 72994, "ts": "2026-09-24T05:51:47Z", "hours": 9.7506, "text": "Devlog #17 OpenGL integration I spend the last couple days integrating OpenGL rendering into a couple of the projects, meaning the graphics will be a lot better and rendered on the GPU instead of being rendered on the CPU, as well as speeding up the demos because even with the added visual complexity, the GPU is just so much faster at rendering! I made these changes of the main branch so that they would reflect on the website sooner, but git’s merge system is actually super good and it took no more than 15 minutes to merge the OpenGL rendering to the XPBD branch. I’ve only migrated over the cloth and fluid demos, but they’re the ones that needed it the most, and it’s not too hard to add it to more demos after I’ve had most of the OpenGL boilerplate implemented."}, {"post_id": 70439, "ts": "2026-09-19T06:17:10Z", "hours": 8.4, "text": "Devlog #16 I migrated the XPBD stuff to 3D and moved all the demos to work with it as well, not much interesting to talk about though. Here’s a demo of it working though"}, {"post_id": 66409, "ts": "2026-09-12T07:11:52Z", "hours": 10.2822, "text": "Devlog #15: Rebuilding because why not A bit before shipping, I heard about another physics method called XPBD (extended position based dynamics) that’s a lot more powerful and flexible, and I decided, after I would ship, I would try to convert my engine to that. I kinda have to remake almost all of the physics stuff I already made, but I can recycle a lot of the older code, just making it fit the new framework, and being a lot more educated about physics simulation stuff than when I started this project, it wasn’t too hard to rewrite some new stuff. Right now I have ported over my ball pit thingy, not a lot to show that’s different from old devlogs, but hey, it’s the inside that counts, right?"}, {"post_id": 62664, "ts": "2026-09-06T04:32:53Z", "hours": 6.1839, "text": "Devlog #15: shipping! Super small devlog, just editing the website and the README and stuff like that, really want to ship now! It just took a while to add messages to all the different demos and I may have tried a little bit of engine stuff but it just didn’t work out."}, {"post_id": 59457, "ts": "2026-09-01T10:01:32Z", "hours": 10.425, "text": "Devlog #14 I added edge detection for 3D triangles and other miscellaneous stuff, like improving the website, adding VSync to the demos, but that stuff’s boring so I’m just going to show off the new demo! It might be the coolest one so far, but it was one of the easiest to make. I’m planning on shipping real soon though, just wanna add a few things to the website and readme!"}, {"post_id": 56613, "ts": "2026-08-28T13:09:26Z", "hours": 10.6511, "text": "Devlog #13 I added triangle-walls which vertices are 3 dynamic spheres, which can collide with other particles and have all 4 particles update with their own velocities! This makes the engine a lot more flexible, so you don’t have to make big grids of spheres if you want to be able to have walls that can move, instead of being static. And it makes rigidbodies (probably) possible! (Press enter to spawn balls) Demo! This devlog is a bit long, sorry! I didn’t want to go too far over 10 hours like a did a couple devlogs ago. 2D 2D is, of course, simpler than 3D, and the length of the function for these walls definitely show that (~40 lines). I used the same algorithm to find the closest position on a line to another position as I used for detecting collisions on the edges of the static 3D walls a while ago. It gives you a lerpable value from from the first point to the second point of the line, and you can use that to find the point you are looking for. Comparing it to the circle you’re checking against, will give the distance and the normal of the collision. You can use that information to move the circle out of the wall, and push the wall away, using the value to lerp between as the ratio to push each of the points that the wall is made of away. 3D This function is a bit more complicated, being about 80 lines long, but a lot of the information in the 2D version is applicable here too. Here, instead of trying to find the closest point, we are trying to find the barycentric coordinates of the point, which is similar to the value to lerp between the two points in 2D, but for 3D (It’s basically just 3 numbers which tell you how close you are to each vertex of a triangle, and can describe any point on the triangle). This involves find the triangle’s area that you are checking against using the cross product, getting the distance of the point inward to the triangle for each edge, and calculating some inverse areas, which magically (not really) give you the barycentric coordinates. We then use these coordinates, as long as the distance to the triangle face using the dot product, to figure out whether the ball is colliding with the face, and if so, moving the ball outside of the triangle and moving the 3 vertices away as well, of course using each barycentric coordinate as a weight for how much to move each individual vertex. I haven’t implemented detections with the edges of the triangles exactly yet though, only the faces, but I will try to implement it soon!"}, {"post_id": 50030, "ts": "2026-08-19T01:48:43Z", "hours": 11.2506, "text": "Devlog #12 I improved the website to include multiple demos, and I made a couple improvements to the performance of the spatial partitioning detection, but I’ve mostly just been doing tinkering and testing with the engine some more."}, {"post_id": 31654, "ts": "2026-07-20T07:22:53Z", "hours": 7.2706, "text": "Devlog #11: Not a huge devlog, I’ve mostly been having fun with this little parachute demo I made! I definitely spent too much time just playing with it. I’ve also been experimenting a bit with multithreading, but it’s not in a stable or performant enough state right now to showcase. mp4 compression will hate this"}, {"post_id": 27421, "ts": "2026-07-12T23:48:38Z", "hours": 6.1297, "text": "Devlog #10: I ported the spatial partitioning to 3D! It’s definitely a lot laggier in the 3D environment, because it needs to check 3x the partitions per ball, but it’s still a lot better than having no spatial partitioning at all. One of the problems I encountered when transitioning to 3D was lag, but not in the expected “It’s going to be laggy when you have a lot of balls” way. For some strange reason, the framerate was still below 60 even when there were no balls in the world! It turned out to be an issue with needing to calloc a big region of memory everytime it would sort the balls into their partitions, but I was able to fix it by keeping the allocation throughout the lifetime of the partition grid. I also fixed it in the 2D version, even though it wasn’t really a problem there, it also wasn’t really a problem to fix either. (In the video you will notice the balls disappearing, the sample I whipped up for the devlog just automatically despawns balls when they leave the partitioning grid. Also some balls fly off when spawning, because sometimes the balls spawn inside one another) I’m getting a bit burnt out from this project though, I might ship after maybe adding multithreading, creating the README, and maybe making some more demos. I’ve been watching some videos on real rigidbody physics, and I want to try that out too!"}, {"post_id": 24090, "ts": "2026-07-07T13:02:59Z", "hours": 25.6289, "text": "Devlog #9: Intro I added spatial partitioning to the engine to speed up collisions when you have a lot of balls in a scene. Partitioning explanation Spatial partitioning is an optimization that divides the world into a grid, so balls only check other balls that are in close cells, instead of every ball checking all others, which is O(n^2). It seems pretty simple, but I tried 4 different ways before getting a good result. Judging by the time logged, I struggled. First Attempt (Dense grid) I first tried a naive implementation, which was making a big grid, with each cell having a list of pointers to balls that are in it. The problem is, each cell needs to have the total amount of balls that could be in it allocated. For the best performance, each grid cell should be the same size as a ball, and for the size I use here, you need the grid dimensions to be in the 100s. with 1000 balls, and with 64 bit pointers, you could have 1000 * 8 * 300 * 300 bytes allocated total, ~720 MB. You can get away with a lot less pointers, but that still wasn’t satisfying, or flexible. Second Attempt (Sparse grid) My second try was a grid, but you only store cells which have balls in them. This doesn’t solve the high number of pointers per cell, but it uses less cells overall. It should’ve been easier, but C doesn’t have any built in hashmaps. The physics code doesn’t use many libraries, and I didn’t want to rely on more, so I had the bright idea to make my own hashmap. It didn’t work and I gave up, and that was the end of the sparse grid. Third Attempt (Resizable arrays) The third attempt was like the first, but I decided to try allocating the memory on the fly, when balls moved around, but it didn’t work out. Working Attempt!! (Sorting) The most successful attempt was a grid, every cell is allocated, and yet, uses the least memory. Instead of storing pointers, each cell only stores two things: An offset and a length. Just indices into the ball array, which sounds easy, but then you realize - the balls are in a random order. To fix this, when updating the grid, you sort the balls into the cell they’re in. You may think that going into the dark cave of sorting is a bad idea, but here, it’s just a counting sort. Then it sets each cell’s fields, and you have your partitions. Detecting Collisions Collisions are easier than constructing the grid, you just check every ball, find its cell, check balls in close cells, then you’re done. Struggles There was a lot of friction with memory errors. To fix them, I learned GDB, and learnt about sanitizers, which detect lots of hard to catch memory errors. One time the program would randomly crash, and it was really hard to fix, but a sanitizer detected an easy out of bounds error when rendering. Not even a physics thing. :( Sorry!! Sorry for the long post, and the time it took me to post it, The devlog guide says to keep it short and post often, but I fell down a rabbit hole with optimizing, and was putting off writing as I knew it would be unwieldy in length. I haven’t implemented partitioning in 3d yet, but it should be easy to transfer over. It’s hard to see the balls in the video, but I want to keep the video smaller. It gets laggy in the video as well, but there are 7000 balls in the scene at the end, and I check collisions 15 times per frame, I am also recording too. Try it out If you read all the way down here, you might want to try the engine. I have a build on my pages , but it’s kinda slow on web. Click to attract P to set where the balls shoot to when spawned Enter to spawn balls Scroll to change spawn speed (at least until I change the demo). On some screens the simulation doesn’t show up until you click fullscreen. Sorry for weird wording, max devlog size is 4k characters."}, {"post_id": 13602, "ts": "2026-06-22T09:10:49Z", "hours": 9.5267, "text": "Devlog #8: I added a function that generates wheels (kinda lame), but I also added a GitHub action that automatically compiles and pushes my commits to my GitHub pages so now theres a web demo also i did just like a ton of testing and playing and stuff which is what pushed it to 9 hours"}, {"post_id": 11197, "ts": "2026-06-18T10:07:28Z", "hours": 12.275, "text": "Devlog 7: Finally added mass to the engine! Before now all the particles had the same mass (just implicitly, so basically all of them had a mass of 1), making the small ones super dense. Took so long because I had to migrate back to 2d in order to make sure the mass was working in 2d (everything was in 3d already so I actually added mass to 3d first), and had to update the 2d rendering for it to be able to render in 3d, but now everything (especially springs), is a lot cooler!"}, {"post_id": 7804, "ts": "2026-06-13T00:51:39Z", "hours": 3.5253, "text": "I added the shape generators back for 3d, now we have ✨ 3D cloth ✨!"}, {"post_id": 7351, "ts": "2026-06-12T08:09:41Z", "hours": 12.0594, "text": "Trying to move to 3D, finally got triangle-sphere collisions working the edges were by far the hardest part, the sphere-face collision actually wasn’t too hard the engine wasn’t built for walls to be able to move, but it can handle it semi fine (I’m just having rotating walls for the cool 3d showcase)"}, {"post_id": 3300, "ts": "2026-06-06T04:57:51Z", "hours": 5.0347, "text": "Added some functions that generate shapes for you, for example, cloth!"}, {"post_id": 2633, "ts": "2026-06-05T08:26:08Z", "hours": 1.5244, "text": "not that big but i migrated to the sdl callback system, so it works on emscripten now (can run in browser) ignore my screen recorder quality"}, {"post_id": 2039, "ts": "2026-06-04T10:12:11Z", "hours": 5.5597, "text": "got circle-circle collision working and with a lot of balls its a bit like a fluid cleaned up main.c as well too"}, {"post_id": 721, "ts": "2026-06-02T09:46:29Z", "hours": 5.7058, "text": "includes double pendulum for clout not actually accurate but looks fine it uses verlet integration and supports springs as well"}]...
|
Title: FPEeee by @Duck | Stardance
Devlogs:
inclu Title: FPEeee by @Duck | Stardance
Devlogs:
includes double pendulum for clout not actually accurate but looks fine it uses verlet integration and supports springs as well
got circle-circle collision working and with a lot of balls its a bit like a fluid cleaned up main.c as well too
not that big but i migrated to the sdl callback system, so it works on emscripten now (can run in browser) ignore my screen recorder quality
Added some functions that generate shapes for you, for example, cloth!
Trying to move to 3D, finally got triangle-sphere collisions working the edges were by far the hardest part, the sphere-face collision actually wasn’t too hard the engine wasn’t built for walls to be able to move, but it can handle it semi fine (I’m just having rotating walls for the cool 3d showcase)
I added the shape generators back for 3d, now we have ✨ 3D cloth ✨!
Devlog 7: Finally added mass to the engine! Before now all the particles had the same mass (just implicitly, so basically all of them had a mass of 1), making the small ones super dense. Took so long because I had to migrate back to 2d in order to make sure the mass was working in 2d (everything was in 3d already so I actually added mass to 3d first), and had to update the 2d rendering for it to be able to render in 3d, but now everything (especially springs), is a lot cooler!
Devlog #8: I added a function that generates wheels (kinda lame), but I also added a GitHub action that automatically compiles and pushes my commits to my GitHub pages so now theres a web demo also i did just like a ton of testing and playing and stuff which is what pushed it to 9 hours
Devlog #9: Intro I added spatial partitioning to the engine to speed up collisions when you have a lot of balls in a scene. Partitioning explanation Spatial partitioning is an optimization that divides the world into a grid, so balls only check other balls that are in close cells, instead of every ball checking all others, which is O(n^2). It seems pretty simple, but I tried 4 different ways before getting a good result. Judging by the time logged, I struggled. First Attempt (Dense grid) I first tried a naive implementation, which was making a big grid, with each cell having a list of pointers to balls that are in it. The problem is, each cell needs to have the total amount of balls that could be in it allocated. For the best performance, each grid cell should be the same size as a ball, and for the size I use here, you need the grid dimensions to be in the 100s. with 1000 balls, and with 64 bit pointers, you could have 1000 * 8 * 300 * 300 bytes allocated total, ~720 MB. You can get away with a lot less pointers, but that still wasn’t satisfying, or flexible. Second Attempt (Sparse grid) My second try was a grid, but you only store cells which have balls in them. This doesn’t solve the high number of pointers per cell, but it uses less cells overall. It should’ve been easier, but C doesn’t have any built in hashmaps. The physics code doesn’t use many libraries, and I didn’t want to rely on more, so I had the bright idea to make my own hashmap. It didn’t work and I gave up, and that was the end of the sparse grid. Third Attempt (Resizable arrays) The third attempt was like the first, but I decided to try allocating the memory on the fly, when balls moved around, but it didn’t work out. Working Attempt!! (Sorting) The most successful attempt was a grid, every cell is allocated, and yet, uses the least memory. Instead of storing pointers, each cell only stores two things: An offset and a length. Just indices into the ball array, which sounds easy, but then you realize - the balls are in a random order. To fix this, when updating the grid, you sort the balls into the cell they’re in. You may think that going into the dark cave of sorting is a bad idea, but here, it’s just a counting sort. Then it sets each cell’s fields, and you have your partitions. Detecting Collisions Collisions are easier than constructing the grid, you just check every ball, find its cell, check balls in close cells, then you’re done. Struggles There was a lot of friction with memory errors. To fix them, I learned GDB, and learnt about sanitizers, which detect lots of hard to catch memory errors. One time the program would randomly crash, and it was really hard to fix, but a sanitizer detected an easy out of bounds error when rendering. Not even a physics thing. :( Sorry!! Sorry for the long post, and the time it took me to post it, The devlog guide says to keep it short and post often, but I fell down a rabbit hole with optimizing, and was putting off writing as I knew it would be unwieldy in length. I haven’t implemented partitioning in 3d yet, but it should be easy to transfer over. It’s hard to see the balls in the video, but I want to keep the video smaller. It gets laggy in the video as well, but there are 7000 balls in the scene at the end, and I check collisions 15 times per frame, I am also recording too. Try it out If you read all the way down here, you might want to try the engine. I have a build on my pages , but it’s kinda slow on web. Click to attract P to set where the balls shoot to when spawned Enter to spawn balls Scroll to change spawn speed (at least until I change the demo). On some screens the simulation doesn’t show up until you click fullscreen. Sorry for weird wording, max devlog size is 4k characters.
Devlog #10: I ported the spatial partitioning to 3D! It’s definitely a lot laggier in the 3D environment, because it needs to check 3x the partitions per ball, but it’s still a lot better than having no spatial partitioning at all. One of the problems I encountered when transitioning to 3D was lag, but not in the expected “It’s going to be laggy when you have a lot of balls” way. For some strange reason, the framerate was still below 60 even when there were no balls in the world! It turned out to be an issue with needing to calloc a big region of memory everytime it would sort the balls into their partitions, but I was able to fix it by keeping the allocation throughout the lifetime of the partition grid. I also fixed it in the 2D version, even though it wasn’t really a problem there, it also wasn’t really a problem to fix either. (In the video you will notice the balls disappearing, the sample I whipped up for the devlog just automatically despawns balls when they leave the partitioning grid. Also some balls fly off when spawning, because sometimes the balls spawn inside one another) I’m getting a bit burnt out from this project though, I might ship after maybe adding multithreading, creating the README, and maybe making some more demos. I’ve been watching some videos on real rigidbody physics, and I want to try that out too!
Devlog #11: Not a huge devlog, I’ve mostly been having fun with this little parachute demo I made! I definitely spent too much time just playing with it. I’ve also been experimenting a bit with multithreading, but it’s not in a stable or performant enough state right now to showcase. mp4 compression will hate this
Devlog #12 I improved the website to include multiple demos, and I made a couple improvements to the performance of the spatial partitioning detection, but I’ve mostly just been doing tinkering and testing with the engine some more.
Devlog #13 I added triangle-walls which vertices are 3 dynamic spheres, which can collide with other particles and have all 4 particles update with their own velocities! This makes the engine a lot more flexible, so you don’t have to make big grids of spheres if you want to be able to have walls that can move, instead of being static. And it makes rigidbodies (probably) possible! (Press enter to spawn balls) Demo! This devlog is a bit long, sorry! I didn’t want to go too far over 10 hours like a did a couple devlogs ago. 2D 2D is, of course, simpler than 3D, and the length of the function for these walls definitely show that (~40 lines). I used the same algorithm to find the closest position on a line to another position as I used for detecting collisions on the edges of the static 3D walls a while ago. It gives you a lerpable value from from the first point to the second point of the line, and you can use that to find the point you are looking for. Comparing it to the circle you’re checking against, will give the distance and the normal of the collision. You can use that information to move the circle out of the wall, and push the wall away, using the value to lerp between as the ratio to push each of the points that the wall is made of away. 3D This function is a bit more complicated, being about 80 lines long, but a lot of the information in the 2D version is applicable here too. Here, instead of trying to find the closest point, we are trying to find the barycentric coordinates of the point, which is similar to the value to lerp between the two points in 2D, but for 3D (It’s basically just 3 numbers which tell you how close you are to each vertex of a triangle, and can describe any point on the triangle). This involves find the triangle’s area that you are checking against using the cross product, getting the distance of the point inward to the triangle for each edge, and calculating some inverse areas, which magically (not really) give you the barycentric coordinates. We then use these coordinates, as long as the distance to the triangle face using the dot product, to figure out whether the ball is colliding with the face, and if so, moving the ball outside of the triangle and moving the 3 vertices away as well, of course using each barycentric coordinate as a weight for how much to move each individual vertex. I haven’t implemented detections with the edges of the triangles exactly yet though, only the faces, but I will try to implement it soon!
Devlog #14 I added edge detection for 3D triangles and other miscellaneous stuff, like improving the website, adding VSync to the demos, but that stuff’s boring so I’m just going to show off the new demo! It might be the coolest one so far, but it was one of the easiest to make. I’m planning on shipping real soon though, just wanna add a few things to the website and readme!
Devlog #15: shipping! Super small devlog, just editing the website and the README and stuff like that, really want to ship now! It just took a while to add messages to all the different demos and I may have tried a little bit of engine stuff but it just didn’t work out.
Devlog #15: Rebuilding because why not A bit before shipping, I heard about another physics method called XPBD (extended position based dynamics) that’s a lot more powerful and flexible, and I decided, after I would ship, I would try to convert my engine to that. I kinda have to remake almost all of the physics stuff I already made, but I can recycle a lot of the older code, just making it fit the new framework, and being a lot more educated about physics simulation stuff than when I started this project, it wasn’t too hard to rewrite some new stuff. Right now I have ported over my ball pit thingy, not a lot to show that’s different from old devlogs, but hey, it’s the inside that counts, right?
Devlog #16 I migrated the XPBD stuff to 3D and moved all the demos to work with it as well, not much interesting to talk about though. Here’s a demo of it working though
Devlog #17 OpenGL integration I spend the last couple days integrating OpenGL rendering into a couple of the projects, meaning the graphics will be a lot better and rendered on the GPU instead of being rendered on the CPU, as well as speeding up the demos because even with the added visual complexity, the GPU is just so much faster at rendering! I made these changes of the main branch so that they would reflect on the website sooner, but git’s merge system is actually super good and it took no more than 15 minutes to merge the OpenGL rendering to the XPBD branch. I’ve only migrated over the cloth and fluid demos, but they’re the ones that needed it the most, and it’s not too hard to add it to more demos after I’ve had most of the OpenGL boilerplate implemented.
Devlog #18 Fluid simulation For a couple days I’ve been researching and trying to implement a PBF (position based fluid) fluid simulation, but there are barely any resources on the topic that I’ve been able to find, and the ones I have found are very math oriented with evil cryptic symbols that take a while to wrap my head around. The fluid simulation does work, but it’s much laggier, a lot finickier, and not a lot better (if at all better) than just chucking a couple thousand balls together and having them collide normally.
Devlog #19 Optimization and Interaction I’ve optimized the triangle collision code to use the spatial partitioning I implemented before for collisions. It goes through each triangle and checks what balls are in its bounding box with the collision grid, and completely skips any balls that aren’t close. This allows for about a thousand balls in a scene (at least on my computer), which is a lot better than the hundred or so you’d get with just bounding box checks and the tens or so you would get with a naive approach. Sadly, this change is only on the XPBD branch for now, meaning it won’t reflect on the website, but you’d still probably have to be spawning balls for a while for that to slow down, depending on the computer. I’ve also added far better interaction to the cloth, using some matrix multiplication and some raycast tests, you can now drag the cloth around with your mouse! This change was on the main branch too, so this is right on the website , right now! I did try to implement a system for having the cloth tear when it was under stress, but it would have required me to rework a lot of stuff and it didn’t quite work out. :(
Devlog #20 Another constraint, and another failed side project. Boundary constraint I added a constraint that I named a “boundary constraint”, that confines a particle to being on the specific side of a line e.g. making four lines around the edges of the screen and making sure the particle is on the side which is visible on screen. This is different from a wall because walls have two sides (and also zero thickness) which can cause a particle that’s going super fast to completely pass through to the other side of the wall in a single physics step, whereas with a boundary it will always snap it back to the correct side of the line. (If this was a bad explanation, I’m sorry). Failed lua integration I suppose the word ‘failed’ is a bit harsh in this scenario, I was just dipping my toes into integrating a little lua shell into the demos that would let you spawn particles and stuff programatically, but I decided it wasn’t worth it for small demos that aren’t meant to be super duper flexible anyway because they’re just meant to show off cool features the engine can do. throwing balls very quickly at the wall, which don’t clip through VVV
Devlog #21 MERGING I’ve been rewriting a lot of the physics engine for XPBD (eXtended Position Based Dynamics) since the last ship, but on a separate branch so that if I broke anything too bad it wouldn’t show up on the website, but today I finally merged the xpbd branch into main. Sadly, it is a fair bit slower than the previous verlet integration (at least for my simple demos), but it’s a far more flexible integration and constraint scheme and I think the tradeoff is worth it. (I am a bit disappointed with the performance on the website though, I swear it was faster before I merged it! It’s a lot faster natively!)
Devlog #22 (I just realized that I accidentally did two devlog #15s but it’s too late now) Getting ready for another ship I edited some constraints to be more stable, edited the website to be a bit more clear of where the controls are if your screen is too small to fit them, and had a NIGHTMARE fiddling with ffmpeg to try and replace the video on the README to not be too laggy or low quality but also not too big. I also tried to do some performance optimizations for phones, but I couldn’t figure it out. This is the mp4 version animated WebP that I eventually got ffmpeg to spit out. For some reason animated WebPs don’t work in devlogs.
Ships:
This is a position-based physics engine made all in C for portability and versatility. It had many challenging moments when making it, such as triangle collisions, spatial partitioning, performance optimization, and more, but I had a lot of fun building it, showing it off to my friends and family, and learning more about physics.
This is an updated version of my physics engine, using a new simulation method called XPBD! It was a bit challenging learning the basics of vector calculus, but it was worth it for the added flexibility of XPBD constraints and integration. I’m also really proud of getting OpenGL rendering working for some of the demos, because making an 3D renderer could be a project in and of itself! (Not this renderer though, it’s pretty barebones.) I’m especially happy with the cloth demo, with the best 3D rendering and (in my opinion) the best showcase of the engine’s features! (Also the least laggy of them all? I know why but it’s still kinda weird, being the most complex demo.) Writing it in C was a probably a bit harder than using a higher level language like C++, but being able to compile the entire project from source in less than two seconds on my machine was a big plus! I hope you enjoy playing with the physics demos! I worked really hard on this project!!...
|
1793551824.3438601
|
1793638224.3438601
|
|
60340
|
Calories Tracking App by @Ducu | Stardance
|
Ducu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Calories Tracking App by @Ducu | Stardance
|
1793033423.8233001
|
1793638223.8233001
|
|
60339
|
My very own WebOS by @dominik_willnecker | Stardan My very own WebOS by @dominik_willnecker | Stardance...
|
dominik_willnecker
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @dominik_willnecker | Title: My very own WebOS by @dominik_willnecker | Stardance...
|
1793033422.9866514
|
1793638222.9866514
|
|
60338
|
Gameeee :) by @AyishaLubna | Stardance
|
AyishaLubna
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Gameeee :) by @AyishaLubna | Stardance
|
1793033422.086706
|
1793638222.086706
|
|
60337
|
Project T.R.I.P by @aeronwtf11 | Stardance
|
aeronwtf11
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Project T.R.I.P by @aeronwtf11 | Stardance
|
1793033421.2213547
|
1793638221.2213547
|
|
46822
|
A Ai powered food picker by @Yatheesh | Stardance
|
Yatheesh
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T19:24:38Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a AI food selection website. How you ever been hungry, starving even but you just cant decide what to eat, maybe your indecisive or just picky, well problem solved because my website takes the stuff that “sounds good” and turns it into a meal with as little or as much information as you want. One of the hardest apspects of this project was deployment because I wanted it to function on any laptop or phone no matter the location it took a lot of extra set up", "repo": "https://github.com/Yatheeshpatcha/Food_website", "demo": "https://yatheeshsfoodwebsite.netlify.app/"}]...
|
[{"post_id": 51229, "ts": "202 [{"post_id": 51229, "ts": "2026-08-20T19:19:04Z", "hours": 1.2078, "text": "I Finished I added some pricing buttons and deployed it through netlify"}, {"post_id": 49870, "ts": "2026-08-18T20:27:46Z", "hours": 2.0061, "text": "I have done a lot of work since last devlog I added a bunch of new buttons and made modifier buttons for cuisines and did a lot of css it make it look nice"}, {"post_id": 46566, "ts": "2026-08-13T21:46:38Z", "hours": 0.7494, "text": "I didn’t do to much today but I did make my website a lot nicer to look at and added more buttons"}, {"post_id": 45937, "ts": "2026-08-12T18:55:46Z", "hours": 1.2475, "text": "I started the website part of my api and it works! you can type what type of food you want and it gives a response. Now I need to add limitations to what questions it will take and other things and I am done and also add more buttons for shortcuts"}, {"post_id": 45378, "ts": "2026-08-11T19:56:58Z", "hours": 0.5172, "text": "I just started making my food website and I figured out how to call an LLM using an API and its going well"}]...
|
Title: A Ai powered food picker by @Yatheesh | Sta Title: A Ai powered food picker by @Yatheesh | Stardance
Devlogs:
I just started making my food website and I figured out how to call an LLM using an API and its going well
I started the website part of my api and it works! you can type what type of food you want and it gives a response. Now I need to add limitations to what questions it will take and other things and I am done and also add more buttons for shortcuts
I didn’t do to much today but I did make my website a lot nicer to look at and added more buttons
I have done a lot of work since last devlog I added a bunch of new buttons and made modifier buttons for cuisines and did a lot of css it make it look nice
I Finished I added some pricing buttons and deployed it through netlify
Ships:
I made a AI food selection website. How you ever been hungry, starving even but you just cant decide what to eat, maybe your indecisive or just picky, well problem solved because my website takes the stuff that “sounds good” and turns it into a meal with as little or as much information as you want. One of the hardest apspects of this project was deployment because I wanted it to function on any laptop or phone no matter the location it took a lot of extra set up...
|
1793551820.4706812
|
1793638220.4706812
|
|
60336
|
thing 2 by @Anderson | Stardance
|
Anderson
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: thing 2 by @Anderson | Stardance
|
1793033420.292996
|
1793638220.292996
|
|
60335
|
My awesome macropad! by @Thijs | Stardance
|
Thijs
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Thijs | Stardance
|
1793033419.1354156
|
1793638219.1354156
|
|
60334
|
Drift the car by @vishunirala18 | Stardance
|
vishunirala18
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Drift the car by @vishunirala18 | Stardance
|
1793033418.2711174
|
1793638218.2711174
|
|
60333
|
My own site! by @HibaAwan | Stardance
|
HibaAwan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @HibaAwan | Stardance
|
1793033417.3649607
|
1793638217.3649607
|
|
60332
|
hjhkhk by @AbdurRehmanMughal | Stardance
|
AbdurRehmanMughal
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: hjhkhk by @AbdurRehmanMughal | Stardance
|
1793033416.485764
|
1793638216.485764
|
|
48087
|
File manager/File System by @mrpeng | Stardance
|
mrpeng
|
1
|
15.43
|
47
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T10:38:37Z", "hours": 13.0, "multiplier": 4.68, "payout": 47, "blessing": "neutral", "text": "A Python-based virtual file system CLI application that simulates full directory structures and file management within custom JSON storage files. Features local user authentication, directory navigation, custom file editor with save/exit shortcuts, folder creation, reading, and overwriting for over 40 distinct plain text and code file extensions. A lightweight, terminal-based file system simulator written in Python. This application emulates standard operating system directory structures, file creation, reading, and editing operations while persisting all data to JSON-formatted .pilu system files. User Authentication: Local user signup and login stored securely in User_data.pilu. Directory Navigation: Move through virtual nested directories using path commands. File Management: Create folders, create files with custom extensions, view contents, append text, and overwrite files. Interactive File Editor: Multi-line terminal-based text editor supporting line-by-line input, saving, and exiting. Persistent Storage: Automatically syncs all virtual file system changes to Root.pilu.", "repo": "https://github.com/mrpeng4/File-system", "demo": "https://github.com/mrpeng4/File-system/releases/tag/v1.1"}]...
|
[{"post_id": 48319, "ts": "202 [{"post_id": 48319, "ts": "2026-08-16T17:02:14Z", "hours": 1.0986, "text": "Devlog #3 added a forget password or forget username function to my tool. just type forget in both the password and username entries when logging to automatically trigger the forget function check out my GitHub page for more details mrpeng4 :)"}, {"post_id": 47938, "ts": "2026-08-16T06:22:59Z", "hours": 1.3333, "text": "I worked on thedelete and the clear functions with a confirmation check when you do some thing that may delete or replace your original file I will be work on a feature when you can have a better text editor instead of a vim ripoff which I tried to make 😅, also added a executable feature. try it on my GitHub page mrpeng4 :)"}, {"post_id": 47406, "ts": "2026-08-15T10:07:02Z", "hours": 13.0422, "text": "Just finished my first version basic light weight file manager. A Python-based virtual file system CLI application that simulates full directory structures and file management within custom JSON storage files. Features local user authentication, directory navigation, custom file editor with save/exit shortcuts, folder creation, reading, and overwriting for over 40 distinct plain text and code file extensions."}]...
|
Title: File manager/File System by @mrpeng | Stard Title: File manager/File System by @mrpeng | Stardance
Devlogs:
Just finished my first version basic light weight file manager. A Python-based virtual file system CLI application that simulates full directory structures and file management within custom JSON storage files. Features local user authentication, directory navigation, custom file editor with save/exit shortcuts, folder creation, reading, and overwriting for over 40 distinct plain text and code file extensions.
I worked on thedelete and the clear functions with a confirmation check when you do some thing that may delete or replace your original file I will be work on a feature when you can have a better text editor instead of a vim ripoff which I tried to make 😅, also added a executable feature. try it on my GitHub page mrpeng4 :)
Devlog #3 added a forget password or forget username function to my tool. just type forget in both the password and username entries when logging to automatically trigger the forget function check out my GitHub page for more details mrpeng4 :)
Ships:
A Python-based virtual file system CLI application that simulates full directory structures and file management within custom JSON storage files. Features local user authentication, directory navigation, custom file editor with save/exit shortcuts, folder creation, reading, and overwriting for over 40 distinct plain text and code file extensions. A lightweight, terminal-based file system simulator written in Python. This application emulates standard operating system directory structures, file creation, reading, and editing operations while persisting all data to JSON-formatted .pilu system files. User Authentication: Local user signup and login stored securely in User_data.pilu. Directory Navigation: Move through virtual nested directories using path commands. File Management: Create folders, create files with custom extensions, view contents, append text, and overwrite files. Interactive File Editor: Multi-line terminal-based text editor supporting line-by-line input, saving, and exiting. Persistent Storage: Automatically syncs all virtual file system changes to Root.pilu....
|
1793551816.2305331
|
1793638216.2305331
|
|
60330
|
rae by @sylvieisnton | Stardance
|
sylvieisnton
|
0
|
2.62
|
0
|
[]
|
[{"post_id": 68096, "ts": "202 [{"post_id": 68096, "ts": "2026-09-14T14:39:39Z", "hours": 2.6247, "text": "full parser, tests"}]...
|
Title: rae by @sylvieisnton | Stardance
Devlogs:
Title: rae by @sylvieisnton | Stardance
Devlogs:
full parser, tests...
|
1793033415.6106722
|
1793638215.6106722
|
|
60329
|
if i ever made a phone 👀 by @Horizontrent | Starda if i ever made a phone 👀 by @Horizontrent | Stardance...
|
Horizontrent
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: if i ever made a phone 👀 by @Horizontrent | Title: if i ever made a phone 👀 by @Horizontrent | Stardance...
|
1793033414.731936
|
1793638214.731936
|
|
60327
|
DIY keyboard by @Wisso | Stardance
|
Wisso
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: DIY keyboard by @Wisso | Stardance
|
1793033413.8781478
|
1793638213.8781478
|
|
60326
|
My awesome macropad! by @rehmatullah | Stardance
|
rehmatullah
|
0
|
1.19
|
0
|
[]
|
[{"post_id": 68117, "ts": "202 [{"post_id": 68117, "ts": "2026-09-14T15:18:42Z", "hours": 0.5742, "text": "Day 2 of Building Hackpad: Today I moved from the finished schematic into actual PCB layout in KiCad. Getting the footprints onto the board Ran “Update PCB from Schematic” to pull my components (Seeeduino XIAO + SW1, SW2, SW3) onto the PCB canvas. Hit two snags right away: SW3 had no footprint assigned at all, so KiCad refused to add it (“Cannot add SW3 (no footprint assigned)”). U1 (the XIAO) had somehow been auto-assigned Module:Maple_Mini — a completely different, larger 40-pin board — instead of the correct 14-pin XIAO footprint. Fixed both through the Assign Footprints tool: gave U1 the XIAO-Generic-Hybrid-14P-2.54-21X17.8MM footprint from the care package library, and matched SW3 to the same SW_NKK_GW12LJP footprint already used on SW1/SW2. Re-ran the update and everything landed cleanly. Layout and routing: Flipped the XIAO to the back copper layer so the board assembles with switches on top. Spread out the three switch footprints (they land stacked on top of each other after every update — apparently normal) and arranged them around the XIAO. Routed all the traces: pins 9, 10, and 11 from the XIAO out to each switch, plus GND daisy-chained across SW1 → SW2 → SW3. Zero unrouted connections when I finished. Board outline: Drew the Edge.Cuts rectangle around everything and measured it out: 69.5mm × 68.5mm. That’s the PCB fully done — schematic, footprints, routing, and outline. Next step is the case in Fusion 360 (still need to download it), followed by QMK firmware setup."}, {"post_id": 65447, "ts": "2026-09-10T16:11:10Z", "hours": 0.6197, "text": "Day 1 of Building Hackpad September 10, 2026 I got started with KiCad today to build my Hackpad. The first hurdle was installing the custom Hack Club “care package” libraries. It took me a moment to realize that footprints and symbols are managed in two separate library managers, but I eventually linked the .sym and .pretty files globally. After that, I jumped into the schematic editor. I placed the SEEEDUINO-XIAO (which will be the brain of the board) and three push buttons. At first, I made a rookie mistake by wiring a pin straight to ground without the switch in between, but I caught it and fixed it. Now pins 9, 10, and 11 are wired properly through the switches and tied to a common ground. Everything is electrically connected and safely saved."}]...
|
Title: My awesome macropad! by @rehmatullah | Star Title: My awesome macropad! by @rehmatullah | Stardance
Devlogs:
Day 1 of Building Hackpad September 10, 2026 I got started with KiCad today to build my Hackpad. The first hurdle was installing the custom Hack Club “care package” libraries. It took me a moment to realize that footprints and symbols are managed in two separate library managers, but I eventually linked the .sym and .pretty files globally. After that, I jumped into the schematic editor. I placed the SEEEDUINO-XIAO (which will be the brain of the board) and three push buttons. At first, I made a rookie mistake by wiring a pin straight to ground without the switch in between, but I caught it and fixed it. Now pins 9, 10, and 11 are wired properly through the switches and tied to a common ground. Everything is electrically connected and safely saved.
Day 2 of Building Hackpad: Today I moved from the finished schematic into actual PCB layout in KiCad. Getting the footprints onto the board Ran “Update PCB from Schematic” to pull my components (Seeeduino XIAO + SW1, SW2, SW3) onto the PCB canvas. Hit two snags right away: SW3 had no footprint assigned at all, so KiCad refused to add it (“Cannot add SW3 (no footprint assigned)”). U1 (the XIAO) had somehow been auto-assigned Module:Maple_Mini — a completely different, larger 40-pin board — instead of the correct 14-pin XIAO footprint. Fixed both through the Assign Footprints tool: gave U1 the XIAO-Generic-Hybrid-14P-2.54-21X17.8MM footprint from the care package library, and matched SW3 to the same SW_NKK_GW12LJP footprint already used on SW1/SW2. Re-ran the update and everything landed cleanly. Layout and routing: Flipped the XIAO to the back copper layer so the board assembles with switches on top. Spread out the three switch footprints (they land stacked on top of each other after every update — apparently normal) and arranged them around the XIAO. Routed all the traces: pins 9, 10, and 11 from the XIAO out to each switch, plus GND daisy-chained across SW1 → SW2 → SW3. Zero unrouted connections when I finished. Board outline: Drew the Edge.Cuts rectangle around everything and measured it out: 69.5mm × 68.5mm. That’s the PCB fully done — schematic, footprints, routing, and outline. Next step is the case in Fusion 360 (still need to download it), followed by QMK firmware setup....
|
1793033409.1937995
|
1793638209.1937995
|
|
60324
|
appl joos by @doctamario85_tiktok | Stardance
|
doctamario85_tiktok
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: appl joos by @doctamario85_tiktok | Stardan Title: appl joos by @doctamario85_tiktok | Stardance...
|
1793033407.1300616
|
1793638207.1300616
|
|
60323
|
Untitled project by @Giorgio | Stardance
|
Giorgio
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Giorgio | Stardance
|
1793033406.278027
|
1793638206.278027
|
|
60321
|
2D cod zombies knockoff thing by @doctamario85_tik 2D cod zombies knockoff thing by @doctamario85_tiktok | Stardance...
|
doctamario85_tiktok
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: 2D cod zombies knockoff thing by @doctamari Title: 2D cod zombies knockoff thing by @doctamario85_tiktok | Stardance...
|
1793033405.445476
|
1793638205.445476
|
|
60320
|
Chai-bot by @chaitanyakohli | Stardance
|
chaitanyakohli
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Chai-bot by @chaitanyakohli | Stardance
|
1793033404.5495296
|
1793638204.5495296
|
|
60319
|
Chai-bot by @chaitanyakohli | Stardance
|
chaitanyakohli
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Chai-bot by @chaitanyakohli | Stardance
|
1793033403.67882
|
1793638203.67882
|