{"id":34208115,"url":"https://github.com/verifa/horizon","last_synced_at":"2026-03-10T09:41:18.416Z","repository":{"id":221354999,"uuid":"743153620","full_name":"verifa/horizon","owner":"verifa","description":"Building blocks and patterns for creating a minimal internal developer platform","archived":false,"fork":false,"pushed_at":"2024-12-13T07:30:31.000Z","size":3677,"stargazers_count":12,"open_issues_count":6,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-25T05:03:44.580Z","etag":null,"topics":["developer-portal","developer-tools","go","golang","iac","kubernetes","nats","nats-jetstream","platform-engineering"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/verifa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-14T13:53:45.000Z","updated_at":"2025-01-21T06:30:56.000Z","dependencies_parsed_at":"2024-11-14T13:27:05.418Z","dependency_job_id":"41939ef6-ec1d-4f5e-9d6a-13e405a9b3a9","html_url":"https://github.com/verifa/horizon","commit_stats":null,"previous_names":["verifa/horizon"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/verifa/horizon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verifa%2Fhorizon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verifa%2Fhorizon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verifa%2Fhorizon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verifa%2Fhorizon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/verifa","download_url":"https://codeload.github.com/verifa/horizon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verifa%2Fhorizon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30328925,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["developer-portal","developer-tools","go","golang","iac","kubernetes","nats","nats-jetstream","platform-engineering"],"created_at":"2025-12-15T20:13:07.937Z","updated_at":"2026-03-10T09:41:18.403Z","avatar_url":"https://github.com/verifa.png","language":"Go","readme":"# Horizon 🌅 - Build your Internal Developer Platform\n\nWhen building an internal developer platform it is very important to define a Platform API.\nThe API should model your end users' domain and decouple them from the underlying platform technologies (such as Kubernetes, AWS, GCP, Azure).\nOn top of the platform API we can build user interfaces, such as web portals and command-line tools.\n\nHorizon offers a Kubernetes-like API and libraries to help you build internal developer platforms with significantly less complexity and overhead, whilst focusing on developer experience for the platform developers. It is a thin wrapper written in Go on top of [NATS](https://nats.io/).\n\nLearn more about [Platform Engineering](./docs/learning.md#platform-engineering) to understand the use cases for Horizon.\n\n## Why Horizon?\n\nBuilding internal platforms that enable developer self-service and improve the developer experience is hard.\n\nTraditional \"DevOps Teams\" typically expose tools like Terraform and Helm directly to the end users.\nThose abstractions are [leaky](https://en.wikipedia.org/wiki/Leaky_abstraction) and do not decouple your users from  the underlying technology (i.e. Terraform and Kubernetes).\nThis negatively impacts developers' flow and cognitive load and also makes maintaining a stable platform API very difficult.\n\nModern \"Platform Teams\" typically deploy an Internal Developer Platform / Portal, like [Backstage](https://backstage.io/).\nThis provides a very elegant UI for developers, but does not take care of provisioning anything.\nFor provisioning you still need something like Kubernetes + some infrastructure provisioner (like CrossPlane or a Terraform controller).\nThis is a very complex stack of tools to maintain and requires significant platform development to be useful.\n\nHorizon is an attempt to get the best of both worlds without a complex stack to maintain.\nHorizon's only hard dependency is [NATS](https://nats.io/), and it makes heavy use of it!\n\nHorizon is not \"off the shelf\".\nIn fact the idea is that you build and own the Horizon extensions you need.\nDo not expect an ecosystem of plugins you can install or lots of pretty graphs and UI elements: expect a thin layer on top of NATS to help you build only what you need.\n\n## How it works\n\nAs the platform team building this for your end users (i.e. the software development teams) you are creating **an interface** on top of your **underlying platform**. This interface is incredibly important because it **decouples your end users** away from the **platform technologies**.\nThe interface should be designed to enable your developers in thier domain, not to mirror the API on top of the underlying platform (e.g. Kubernetes, AWS, GCP, Azure).\n\n\u003e [!WARNING]\n\u003e If you want to use Horizon you will need to write and maintain code.\n\u003e\n\u003e At this time, Go is the only supported language.\n\nBelow is a high-level overview of the different Horizon components. For a more detailed explanation of the components, see the [Architecture](#architecture) section.\n\n![overiview](./docs/drawings/overview.excalidraw.png)\n\n\u003e [!NOTE]\n\u003e All communication is handled via NATS. As such, the dotted lines between components do not actually exist but are subject-based pub/subs via NATS.\n\nYour end users will typically interact with Horizon via HTTP servers (portals) or command line tools that the platform team build. More on [portals](./docs/architecture.md#platform---portals).\n\nFor provisioning \"resources\" (e.g. cloud infrastructure, Git repositories, artifact respositories) the platform team will define objects and a controller to handle reconciliation (taking an object specifiation and moving the object towards the desired state). More on [controllers](./docs/architecture.md#platform---controllers).\n\nFor running operations across different nodes, actors can be called via the broker and actors are selected based on their labels. More on [actors](./docs/architecture.md#platform---actors).\n\n## Project status\n\n\u003e [!WARNING]\n\u003e Horizon is still a Proof of Concept.\n\u003e\n\u003e We are piloting Horizon with a few projects at the moment.\n\u003e If you think Horizon could be useful for your internal platform then please give it a try, and feel free to start a discussion with your use case and we will try to help.\n\n**Store and Controllers:** should be considered fairly stable. This is the foundations of Horizon and is where most of the effort has been spent.\n\n**Gateway and Portals:** we are not sure if the abstraction is correct. It might be easier to provide the gateway as a library allowing teams to fully customise and build their own version. There are so many opinions about developing web servers and styling with CSS.\n\nIf you try Horizon please give us your feedback via [GitHub discussions](https://github.com/verifa/horizon/discussions)!\n\n## Architecture\n\nCheck the [architecture](./docs/architecture.md) document for some more information on the different components.\n\n## Getting started\n\nCheck the [getting started](./docs/gettingstarted.md) section.\n\n## Examples\n\nCheck the [examples](./examples/) folder for some examples.\n\nA recommended starting point would be the incredibly useful (joke) [greetings](./examples/greetings/README.md) example.\nIt has a portal, controller and actor and does not depend on any external services, so there is no added complexity due to third party dependencies.\n\n## Rationale\n\nTo understand how and why Horizon came into existence, check the [rationale](./docs/rationale.md).\n\n## Frequently Asked Questions\n\nCheck the [FAQ](./docs/faq.md) page.\n\n## Debugging with NATS\n\nCheck the [debugging with nats](./docs/debugging_nats.md) page.\n\n## Resources / Learning\n\nCheck the [learning](./docs/learning.md) for some material to help you learn NATS and generally about platform engineering.\n\n## Who is behind Horizon?\n\n[Verifa](https://verifa.io/) is a Nordic-based niche consultancy company who have developed Horizon to solve problems for our customers.\n\nOur business model is based on consulting services and we are happy to help you build internal platforms with Horizon.\n\nIf you would like help with developer experience and platform engineering topics, please [contact us](https://verifa.io/contact/)!\n\n## License\n\nThis code is released under the [Apache-2.0 License](./LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverifa%2Fhorizon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverifa%2Fhorizon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverifa%2Fhorizon/lists"}