Why is HAL (Hypertext Application Language) deprecated and not widespread?
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
What is HAL?
Hypertext Application Language (HAL) is an Internet Draft standard convention for defining hypermedia such as links to other resources within JSON or XML documents. It makes working with JSON or XML APIs more manageable by providing a consistent, easy way to hyperlink between resources. HAL was originally proposed by Mike Kelly and its documentation can primarily be found in the form of a draft under the IETF.
Primary Use of HAL
HAL aimed to simplify the way API services communicate. It structures the representations that are returned by APIs in such a way that, along with the data, you have a _links object containing hyperlinks to other associated resources. For example, in a JSON API response detailing a user, HAL specifies _links to resources like the user's posts, comments, or profile pictures.
Reasons for Deprecation and Lack of Widespread Adoption
1. Complexity and Overhead
Despite HAL's intention to standardize resource linking, it introduces additional complexity and overhead in the API design. Developers need to build and maintain the linking structure and ensure consistency across different API endpoints, which can be cumbersome for large-scale applications.
2. Alternative Standards
HAL competes with other standards and formats that achieve similar goals, such as JSON:API, OpenAPI, and Siren, which might be preferred due to their own strengths or higher adoption rates. Each of these alternatives has its community and alignment with specific use cases, often influenced by industry trends or specific developer ecosystems.
3. Lack of Tooling and Support
The ecosystem around HAL, including tooling, libraries, and community support, has not grown significantly. Robust ecosystems often play a critical role in the adoption of technology standards; without strong tooling and community support, integrating and maintaining HAL can be seen as a liability.
4. Steeper Learning Curve
The hypermedia concept itself, though powerful, has a steeper learning curve. Developers may prefer simpler, more direct forms of API interaction, particularly for smaller projects or those with short deadlines. This aspect makes HAL less attractive to teams looking for quick implementations.
5. Ambiguities and Inconsistencies
Some aspects of HAL’s specification have been criticized for being under-specified or ambiguous. This lack of clarity can lead to inconsistent implementations, making it difficult for developers to understand or adopt HAL in a standardized manner.
Summary Table
| Factor | Impact on HAL Usage |
| Complexity and Overhead | Increases burden on developers; reduces simplicity. |
| Alternatives Available | Competing standards overshadow HAL. |
| Lack of Tooling | A smaller ecosystem deters developers from adopting HAL. |
| Learning Curve | Stiffer learning requirements limit beginner adoption. |
| Ambiguities | Inconsistencies discourage adoption and hinder interoperability. |
Conclusion
While HAL provided a structured format for linking resources in API responses, its deprecation and lack of widespread use can be attributed to several factors. These include competition with other media types, its inherent complexity, insufficient tooling, and a steep learning curve, together with ambiguities in its specification.
In the evolution of API design and architecture, the adoption of standards greatly depends on how they balance complexity, extensibility, and ease of use. HAL, despite its potential, somewhat missed this balance according to the needs and preferences of the broader developer community. As the API technology landscape continues to evolve, future specifications will need to closely align with developer needs and industry trends to gain widespread acceptance.
Related reading
- Why is there a need for Twisted?
- Why is there both a System.Net.Http and System.Web.Http namespace?
- Why is this HTTP request not working on AWS Lambda?
- why kafka producer is showing me error kafka.connDNS lookup failed for <container id>9092?
- why use Retrofit when we have OkHttp
- Will non-awaited async functions definitely attempt finish in ASP.NET Core Web API?
- Windows API Code Pack Where is it?
- Wordpress blocks async REST calls in registerBlockType edit function

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.