HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
camgunz
cmp
C2020–2025
camgunz / cmp

cmp

An implementation of the MessagePack serialization format in C / msgpack.org[C]

2Distinct people
4Mentions
0Explicit recommenders
372GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

An implementation of the MessagePack serialization format in C / msgpack.org[C]

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year4 dated mentions

Observed mentions: 2020-03-10 21:01:53 UTC to 2025-07-31 21:24:26 UTC.

0122020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2025

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC101
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC000
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC000
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC000
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC101
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC202

What Hacker News says

4 sources
I am really glad you replied. > Sure, that’s sort of true but missing context. Bormann (and others) wanted to add things such as separate string and byte sequence types. The MessagePack creator refused for years. Fair enough it’s his format. But it frustrated the community dealing with string vs bytes issues. msgpack-ruby added string support less than a month after cbor-ruby's first commit [0] [1]. The spec was updated over two months before [2]. Awful lot of work if this were really just about strings. > It also highlights a core philosophical difference of a mostly closed spec vs an extensible first one. MP has been always been extensible, via ext types. > That’s just incorrect I am entirely correct [3]. > MessagePack is designed as a small self mostly closed format. Isn't it a lot of effort to get an IETF standard changed? Isn't that
Read the rest
the benefit of a standard? You keep saying "mostly closed" like it's bad. Data format standards in particular really shouldn't change: who knows how many zettagottabytes there are stored in previous versions? > It’s debatable how much CBOR is a fork of MPack vs a new format with similarities. cbor-ruby is literally a fork of msgpack-ruby. The initial commit [0] contains headers like: /\* \* CBOR for Ruby \* \* Copyright (C) 2013 Carsten Bormann \* \* Licensed under the Apache License, Version 2.0 (the "License"). \* \* Based on: \*\*\*\*\**/ /* \* MessagePack for Ruby \* \* Copyright (C) 2008-2013 Sadayuki Furuhashi > The resulting binary output is pretty similar with similar benefits This is the whole game isn't it? The binary output is pretty similar? These are binary output formats! > but the core theoretical models are pretty different. I think you're giving a little too much credence to the "theoretical model". It's not more elegant to do what cbor-ruby does [4] vs. what MP does [5] (this is my lib). I literally just use the tag value, or for fixed values I OR them together. The format is designed for you to do this. What's more elegant than a simple, predefined value? > The whole point of CBOR is that the tags go from 1-8 bytes. The tags themselves are only 1 byte, until you get to extension types. > The parser designs end up fairly different due to the different tag formats. The creator of CBOR disagrees: cbor-ruby was a fork of msgpack-ruby with the tag values changed. > No one says he ripped off “TLV”. Don't conflate the general approach with literally forking an existing project. > You can’t just take a message pack parser and turn it into a CBOR one by changing some values. This is a strawman. My claim has been about the origins of CBOR, not how one can transmute an MP codec to a CBOR codec. > I’ve hit limits with MessagePack before on embedded projects because you need to know the length of an array upfront. When everything's fine, sure this works. If there are any problems whatsoever, you're totally screwed. Any protocol that supports streaming handles this kind of thing. CBOR doesn't. That's bad! > For example streaming the conversion of a large XML file into a more concise CBOR format would be much more memory efficient. It's probably faster to feed it through zstd. Also I think you underestimate how involved it'd be to round-trip a rich XML document to/from CBOR/MP. > However the CBOR specification defines an official human readable text format for debugging and documentation purposes. Where? Are you talking about Diagnostic Notation [6]? Hmm: "Note that this truly is a diagnostic format; it is not meant to be parsed. Therefore, no formal definition (as in ABNF) is given in this document. (Implementers looking for a text-based format for representing CBOR data items in configuration files may also want to consider YAML [YAML].)" YAML!? Anyway, it literally doesn't define it. [0]: https://github.com/msgpack/msgpack-ruby/commit/60e846aaaa638... [1]: https://github.com/cabo/cbor-ruby/commit/5aebd764c3a92d40592... [2]: https://github.com/msgpack/msgpack/commit/5dde8c4fd0010e1435... [3]: https://github.com/msgpack/msgpack/issues/129#issuecomment-1... [4]: https://github.com/cabo/cbor-ruby/blob/5aebd764c3a92d4059236... [5]: https://github.com/camgunz/cmp/blob/master/cmp.c#L30 [6]: https://www.rfc-editor.org/rfc/rfc8949.html#name-diagnostic-...
In From XML to JSON to CBOR
> That said I totally get that writing specs are hard, so not dissing the authors as such. Oh definitely. Yeah maybe I come off as anti-spec or something, but in this case I just think MP was really well thought out, and then Bormann hung a bunch of stuff on it that really wasn't, and I'm salty haha. > Anyway I've only looked at CBOR and MessagePack when I dabbled with some microcontroller projects. I found both to be too big, ie couldn't find a library suitably small, either compiled size or memory requirements or both. So I ended up with JSON for those due to that. Using a SAX-like parser I could avoid dynamic allocations entirely (or close enough). Whaa? I wrote an MP implementation specifically for this use case: https://github.com/camgunz/cmp. JSON parsing terrifies me; there was some table of tons of JSON (de)serializers with all th
Read the rest
eir weirdo bugs that I never would've thought of. There are probably pretty good test suites now though? I've never looked.
In Begrudgingly Choosing CBOR over MessagePack
I run https://github.com/camgunz/cmp and I think I'm in the middle of (well, maybe closer to nobody but not nobody) the "nobody" vs. "everybody" extremes. The thing I think I had/have going for me was that there was a clear end to the project: build a MessagePack implementation that doesn't allocate. Could it be better? Could I remove the ancient, not working Travis CI badge? Could I roll it into something bigger? Sure, but I haven't been motivated to do any of that, and it seems like everyone's reached some equilibrium of happy. I've also been lucky enough to get great contributions from people, everything from fixing compiler breakage to making floating point support optional. It hasn't been zero work, but it has been gratifying. I do question the kind of "open source project takes over the world" model, the GCCs, the Apaches, the Linux
Read the rest
es. Those projects are of great importance, so even if you have a small group of contributors the responsibility is still large and weighty. It's even more so if you've suddenly got a huge community to manage. That kind of thing feels a lot less like a hobby and more like either a job or a lifestyle (e.g. you hang out in an IRC/email window all day and manage the community, and you like it), and I'm not sure how sustainable a lifestyle it is. So maybe I agree with OP here. I wonder if there's something to like, creating some kind of barrier to interact. Like, if I want to file an OpenBSD bug I have to work pretty hard, so some filtering is happening. Filing a bug on GitHub is very easy, so anyone can jump on there and demand whatever they want.
In I've Soured on Open Source

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.