Show HN: Defeating AI by making knowledge accessible to Humans (github.com)

4 points by tnelsond4 ↗ HN
PeakSlab is a libre pwa offline-first dictionary platform from scratch in under 128kb. The core wasm file of the app is written in C and is 38kb compiled which includes the ZSTD decoder and the custom dictionary format file loader and searcher.

I started writing this because I live in Cambodia and all the dictionary apps meet at least two of the following criteria: Slow, Online-only, Incomplete. So I started making .slob files for aard dictionary to help with learning the Khmer language. But aard only searches inside the headwords and there was no iOS port for my coworkers. I looked at other programs (like stardict), but they didn't seem to have any releases in ages and were super buggy. So a couple years ago I made a SQLite3 based web app so that it'd be easy to share with other people. But I couldn't help feeling like maybe SQLite wasn't the right solution. (SQLite databases aren't compressed, and the runtime for SQLite is 1.3mb and I still had to hack it to get it to work for my dictionary, kinda slow and if I was to make more indexes the file size would balloon drastically. Also I hate editing database files)

So a few months ago I wrote my own binary dictionary format and it's fast and tiny and has some really nice features. For the dictionaries I just write a tsv file and use my generator program to turn it into a .peak.zst file.

I put together examples for a bunch of different languages, but Khmer is the most complete one. See the list at https://peakslab.org

1 comment

[ 5.1 ms ] story [ 25.4 ms ] thread
This isn't just for dictionaries, thanks to it's 27kb jbig2 to PNG image module it can display monochrome page scans. A jbig2 image can be as small as 12kb and still be legible for sheet music in Khmer Script.

I have a sheet music app built with this at https://peakslab.org/khmermusic/

It's stupid simple to setup, just put media files (webp, webm opus, jbig2) in a folder and run ./peakgen mediafolder/ outfile.slab Then just edit the config.js to include that outfile.slab and you've got a pwa.