HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
kevinswiber
siren
OPEN SOURCE2012–2026
kevinswiber / siren

siren

Structured Interface for Representing Entities, super-rad hypermedia

10Distinct people
10Mentions
0Explicit recommenders
1.4KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Structured Interface for Representing Entities, super-rad hypermedia

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, 5:04:57 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 year10 dated mentions

Observed mentions: 2012-07-06 23:35:49 UTC to 2026-07-30 13:49:56 UTC.

0122012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments20122013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2021-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): 1 mentions; 0 submissions, 1 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

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
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC211
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC101
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC000
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC101
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC202
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC000
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC000
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC000
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC000
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 UTC101
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC110
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC000
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC101
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC101

What Hacker News says

10 sources
> They usually live under the _links parent. The example given in this section... is there actually a commonly used REST api that uses that particular key/structure? I wouldn't be _surprised_ if I came across that in some random API's documentation, but I hardly think it's the 'usual' thing to do. The article later claims that that style is from https://stateless.co/hal_specification.html , which I think is a consultancy company whose major partners are all casinos (am I totally off on this?). The article also references (https://github.com/kevinswiber/siren which adds detail re: http methods embedded in the _links structure, but I'm not sure why that repo should be considered authoritative. 1300 stars for a just a spec is actually not bad though I think, so maybe. Overall this article seems like slop produces from some kind of ai crawler
Read the rest
that managed to dig up a couple of random links. I am glad that it mentions rfc9457 though.
In What it means for an API to be RESTful
OK, have now read: https://dmitriid.com/hypermedia-is-a-property-of-the-client I think that a large part of the disagreement we seem to have is language related. I do NOT believe that HTML is the only hypertext: my inclusion of HXML as a mobile hypermedia format confirms that I do not believe this. In the tweet linked in your essay I am being sarcastic and pointing out HXML as the counter argument to it, I apologize if that was not clear to you. Your essay is, as you say, meandering & at times incoherent, so I will try to clarify and address specific issues in it as best I can. You mention that clients can interpret non-hypermedia files (such as Java classes) contextually and provide actions related to the content. This is of course true and I don't disagree with it. I do NOT believe that a hypermedia system is defined solely due to a
Read the rest
hypermedia format (and, again, I do not believe that HTML is the only hypermedia format). Markdown, for example, is a (limited) hypermedia format imposed on top of plain text. When combined with a client that understand Markdown it forms a hypermedia system. > If your custom non-standard XML DSL is hypermedia, then everything is This section is very difficult to parse. I did not create HXML, however I do think it qualifies as a hypermedia format due to the presence of hypermedia controls. And I agree that the hypermedia client for HXML is just as important as the format itself in creating a mobile hypermedia system. I also want to stress that I think you can impose a hypermedia format on top of JSON. You offer some examples and another one I'm familiar with is Siren (https://github.com/kevinswiber/siren). This is analogous to how HTML imposes a hypermedia format on top of SGML, or HXML imposes a hypermedia format on top of XML. As you rightly note, that isn't enough however: you also need a hypermedia client that understands that format and can present non-linear actions to a user. You seem very focused on the idea that I think only HTML is a hypertext. I want to stress again that do not believe this to be the case, that appears to be a language misunderstanding. Finally, we have this: > Hypermedia, as Roy Fielding himself says, is the property of a machine talking to another machine using a media type both understand. The media type aka format itself doesn't matter as long as both machines understand it. Even presentation of controls to the user is a secondary concern and can be performed by the machine as it sees fit. Because, once you've unwrapped the contortionist back into their human shape, hypermedia is a property of the client. This conclusion is contradictory. "A machine talking to another machine using a media type both understand" makes the effective use of hypermedia a property of both the client and the server (both machines). I agree strongly with that conclusion, drawn directly from your own words, which is why I titled my book Hypermedia Systems rather than, say, "HTML is the only hypermedia format".
In How functional programming shaped and twisted front end development
This doesn't really matter. What you'll end up exposing via your API is your use case! Does your system allow for an account to be closed? Awesome! So let the client know how to do it. If you're speaking HTML it can be as simple as: <form action="/close-account?acc_number=12345" method="POST"> <button>Close Account</button> </form> Or even: <form action="/close-account" method="POST"> <input type="hidden" name="acc_number" value="12345"> <button>Close Account</button> </form> If you're speaking Siren (https://github.com/kevinswiber/siren): { "actions": [ { "title": "Close Account", "method": "POST", "href": "/close-account", "type": "application/x-www-form-urlencoded", "fields": [ { "name": "acc_number", "type": "hidden", "value": "12345" } ]
Read the rest
} ] }
In REST Anti-patterns
There are a number of specifications that address linking in JSON: * JSON-LD http://www.w3.org/TR/json-ld/ * HAL https://tools.ietf.org/html/draft-kelly-json-hal-06 * Siren https://github.com/kevinswiber/siren * Uber https://rawgit.com/uber-hypermedia/specification/master/uber-hypermedia.html Totally agree on the points against making up a field / format. Using standards where you can is a great way to bring familiarity & common tooling into your APIs. But don't focus too much on XML vs. JSON, use what you need / want, you can find a standard to support it.
In The Restful CookBook
I would say media types don't give you a full definition [1] because they really aren't meant to do so. They are meant to be used to express resources in a certain way that clients and servers can understand them. Additionally, your resources should be described through link relations, which, along with media types, allow your API to be self describing and discoverable. Take, for example, the Business API that is listed on the site [2] and picture Collection+JSON [3] being used to represent the business collection resource and the business item resource. If you used Collection+JSON, what would be left to describe? It would seem like you wouldn't need a Swagger file because your API would be describing itself. Lastly, even though media types may not be actively promoted or used at this time, I think we should push toward promoting really g
Read the rest
ood hypermedia types. Edit: I wanted to also add a couple other interesting media types to check out, HAL [4] and Siren [5]. I'm sure there are other really good ones, too. [1] By definition I'm taking it to mean fully describing an API. [2] https://github.com/ongithub/businesses/blob/gh-pages/busines... [3] http://amundsen.com/media-types/collection/ [4] http://stateless.co/hal_specification.html [5] https://github.com/kevinswiber/siren
In New API Commons Platform Allows Developers to Share APIs
If you are concerned with having your API conform to HATEOAS, HTML offers some clear advantages over JSON. Namely, HTML has well defined "hypermedia affordances", or "H Factors"; plain old JSON has none: H Factor http://www.amundsen.com/hypermedia/hfactor/ Hypermedia-Oriented Design http://amundsen.com/articles/hypermedia-oriented-design/ It's possible to develop and document a well-defined "semantic profile" for a hypermedia API that uses HTML as the base media type. For an example see: ALPS - Application-Level Profile Semantics http://amundsen.com/hypermedia/profiles/ By leveraging some or all of the details of the API, machine-to-machine logic can be developed fairly easily. In his recent book Building Hypermedia APIs with HTML5 and Node, Mike Amundsen demonstrates an example of a "microblogging bot" that consumes an API conforming to
Read the rest
the semantic profile detailed in the ALPS document. The bot (written in JavaScript), knowing only the semantics involved with registration and "create post" links/forms, and an entry point for the API, is able to signup and begin making posts. The interesting thing is that the precise implementation of the API is not important, e.g. whether it's written with NodeJS or PHP or Clojure or whatever. Also, from one implementation to another, the pages served by the API could vary in terms of the layout of the pages, CSS, etc. So long as the pages conform to the semantic profile, the bot should be able to work equally well with a wide variety of implementations. Regarding JSON, there are a number of attempts to develop hypermedia-rich media types on top of it: HAL http://tools.ietf.org/html/draft-kelly-json-hal-03 JSON-LD http://json-ld.org/ Collection+JSON http://www.amundsen.com/media-types/collection/ Siren https://github.com/kevinswiber/siren There are others as well.
In Using HTML as the Media Type for your API

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.