HN user

avelino

251 karma

FOSS GitHub Star / triathlon as a hobby (IRONMAN distance) / plant-based (noob vegan) / CTO at buser

[ my public key: https://keybase.io/avelino; my proof: https://keybase.io/avelino/sigs/j4ykON0DBD4QKrwGsrHCDZZBgd5m6ehvIN_FEYnkJZI ]

Posts38
Comments19
View on HN
outl.app 27d ago

Outl syncs notes peer-to-peer, end-to-end encrypted, with no server

avelino
2pts0
news.ycombinator.com 4mo ago

Show HN: Jbundle – GitHub Action to build self-contained JVM binaries in CI

avelino
1pts0
avelino.run 5mo ago

Transforming a Clojure Database into a Polyglot Library with GraalVM and FFI

avelino
2pts1
github.com 6mo ago

Clj-pack – Package Clojure apps into self-contained binaries without GraalVM

avelino
5pts6
www.youtube.com 1y ago

Show HN: Chrondb – a PostgreSQL-compatible Git-backed database [video]

avelino
11pts0
www.moclojer.com 1y ago

Git as a Database: Chronological Data Storage

avelino
3pts1
www.moclojer.com 1y ago

Essential tips for developing with Clojure and Emacs or Neovim

avelino
3pts0
www.moclojer.com 2y ago

Clojure and Redis Queue – Our lib clj-rq is finally stable

avelino
3pts0
news.ycombinator.com 2y ago

Redis Queue in Clojure

avelino
5pts0
github.com 2y ago

Talkd/dialog open source project has been selected for 2024 GitHub Accelerator

avelino
7pts1
tldr.chat 2y ago

Too long, don't read create a simple news summary using OpenAI

avelino
3pts0
avelino.run 2y ago

Tech-Enabled Companies Shaping the Future

avelino
1pts1
github.com 2y ago

Humanized conversation API without exposing that it is a response made by LLM

avelino
1pts0
news.ycombinator.com 3y ago

Mastodon Federation for Clojure Community

avelino
11pts0
news.ycombinator.com 3y ago

Mirror your database on an API with 0 code lines Use prestd

avelino
3pts0
github.com 4y ago

(Almost) monochromatic light theme for Visual Studio Code (VSCode)

avelino
1pts0
eltonminetto.dev 4y ago

Accessing Postgres via REST Using PRest

avelino
4pts0
vim-bootstrap.com 5y ago

Vim-bootstrap site has a new layout using Dracula UI

avelino
2pts0
market.mashape.com 7y ago

API to get web site meta data by passing an URL using Artificial Intelligence

avelino
1pts0
github.com 8y ago

Background Worker Processes for PostgreSQL Written in Go

avelino
2pts0
github.com 9y ago

pREST – A fully RESTful API from any existing PostgreSQL database writting in Go

avelino
176pts85
www.linkedin.com 9y ago

AI helping companies to reduce costs

avelino
2pts0
postgres.rest 9y ago

Serve a RESTful API from Any PostgreSQL Database

avelino
4pts0
news.ycombinator.com 9y ago

How to start using VIM?

avelino
11pts8
www.avelino.xxx 11y ago

Where to start a project with bottle, Boilerplate

avelino
1pts0
www.avelino.xxx 11y ago

Bottle, full stack without Django

avelino
1pts0
vim-bootstrap.appspot.com 11y ago

Generate the ideal setting for your vim #vim #python #ruby #PHP

avelino
1pts1
vim-bootstrap.com 11y ago

A generator which provides a simple method of generating vim file

avelino
1pts0
github.com 12y ago

A curated list of Go frameworks, libraries and software

avelino
158pts43
github.com 12y ago

Riak Dashboard Open Source

avelino
2pts0

Advantage over manual uberjar + jlink/jpackage:

The main pain point jbundle solves is that jpackage generates installers (.deb, .rpm, .dmg, .msi), not plain executables. jbundle produces a single self-contained binary — just a shell stub concatenated with a compressed payload. You chmod +x it, distribute it, and the user runs ./app. No installation step, no system-level changes.

It also automates the full pipeline (detect build system → build uberjar → download JDK → jdeps → jlink → pack) so you don't need a JDK installed on the build machine — it fetches the exact version from Adoptium. Plus it includes startup optimizations like AppCDS (auto-created on first run, JDK 19+), CRaC checkpoints, and profile-tuned JVM flags for CLI vs server workloads.

Cross-compilation:

Yes — jbundle build --target linux-x64 (or linux-aarch64, macos-x64, macos-aarch64). Since the JAR is platform-independent, it just downloads the appropriate JDK runtime for the target OS/arch from Adoptium and bundles it. You can build a Linux binary from macOS and vice-versa.

Plain executable (not an installer):

That's exactly what jbundle produces. The output is a single file you can scp to a server or hand to someone. On first run it extracts the runtime and jar to ~/.jbundle/cache/ (keyed by content hash), so subsequent runs are instant. No .deb, no .dmg, no "install this first" — just a binary.

For the macOS testing concern: since it's a CLI binary (not a .app bundle), it doesn't require signing/notarization to run. And with --target macos-aarch64 you can build it from a Linux CI without needing a Mac.

I built a tool to solve a problem I kept hitting: deploying Clojure apps without requiring Java on the target machine.23:20:00 [3/101]

The usual answer is GraalVM native-image, but in practice it means dealing with reflection configs, library incompatibilities, long build times, and a complex toolchain. For many projects it's more friction than it's worth.

clj-pack takes a different approach: it bundles a minimal JVM runtime (via jlink) with your uberjar into a single executable. The result is a binary that runs anywhere with zero external dependencies and full JVM compatibility — no reflection configs, no unsupported libraries, your app runs exactly as it does in development.

clj-pack build --input ./my-project --output ./dist/my-app ./dist/my-app # no Java needed How it works:

Detects your build system (deps.edn or project.clj)

Compiles the uberjar

Downloads a JDK from Adoptium (cached locally)

Uses jdeps + jlink to create a minimal runtime (~30-50 MB)

Packs everything into a single binary

The binary extracts on first run (cached by content hash), subsequent runs are instant.

Trade-off is honest: binaries are slightly larger than GraalVM output (~30-50 MB vs ~20-40 MB), and first execution has extraction overhead. But you get full compatibility and a simple build process in return.

Written in Rust, supports Linux and macOS (x64/aarch64).

Feedback and contributions welcome

When we think of Git, the first association we make is with code version control. However, Git’s internal mechanisms are so well designed that they can be leveraged for purposes beyond traditional version control. A particularly interesting use is as a database, especially for data that benefits from historical and chronological tracking. In this post, we’ll explore Git’s internal structure and how it can be adapted to function as an efficient database.

Didn't know "FAMF"

The impact of a high number of inodes and the limitations of the number of inodes in Unix-like systems. A very valid point. For which I created 4 million directories, under ...

"FAMF" is horrible for large volumes of writing, it might work well for KPM, but I wouldn't trade DB (even if it's SQLite) for FAMF, probably because I'm a software engineer (as you mentioned in your text)