De gefedereerde code forge

Voor het grootste deel van de afgelopen twee decennia was de 'code forge' de plek waar projecten leefden: waar code werd gehost, waar wijzigingen werden beoordeeld en waar bijdragers elkaar vonden. Forges boden gemak in ruil voor centralisatie.

Maar de gecentraliseerde forge brokkelt af. Vertrouwen op iemand anders voor uptime, functies en het goede beheer van je code is niet goed uitgepakt. Wat wel de tand des tijds heeft doorstaan, is e-mail: Git om de code te verplaatsen en e-mail — een open protocol — om erover te praten. Dit ging echter ten koste van de gebruikerservaring.

  • ’05 Mail + Git
  • ’09 GitHub + Git
  • ’25 AT Protocol + Git

Tangled streeft ernaar je het beste van beide te bieden: de duurzaamheid van een open protocol, gecombineerd met het gemak en de afwerking van een volwaardige forge.

Het is de eerste echt gefedereerde code forge — je kunt code op je eigen servers hosten en toch naadloos met anderen samenwerken. Onze aanpak is pragmatisch: self-host alleen de onderdelen die je wilt, zoals Git-hosting of CI-runners, of het geheel, inclusief de API-server en UI. Wat je ook kiest, je kunt nog steeds met iedereen communiceren.

Het bezitten van je eigen infrastructuur betekent ook dat je je forge kunt hacken, uitbreiden en aanpassen naar eigen inzicht. Omdat Tangled is gebouwd op het AT Protocol, kun je je eigen extensies bouwen, je abonneren op de 'firehose', of zelfs volledig aangepaste 'knots' schrijven, zoals deze die draait op Cloudflare Workers en hun Artifacts-product gebruikt voor git-opslag. Of een volledig aangepaste 'spindle', zoals mitchellh.com/tack. Ga nog een stap verder en host onze ultralichte API-server om je eigen aangepaste forge te bouwen.

Agents hebben het bouwen van dergelijke hyper-gepersonaliseerde software triviaal gemaakt, zeker wanneer software vanaf het begin is ontworpen met hackbaarheid in het achterhoofd. Tangled is ongelooflijk agent-vriendelijk.

De toekomst van software engineering is wellicht een bewegend doel, maar onze inzet op open protocollen en de autonomie van ontwikkelaars geeft ons de wendbaarheid om mee te bewegen en om jouw code forge voor het volgende decennium te worden.

Productupdates

Een frisse look!

De meest opvallende update: met deze release heeft Tangled een volledig nieuw uiterlijk. We hebben de UI opnieuw opgebouwd bovenop onze nieuwe architectuur (verder beneden beschreven), in Svelte. Alles zou nu sneller, visueel consistenter en mooier moeten zijn! De scherpere lezer heeft misschien ook gemerkt dat we Inter hebben vervangen door Timeless Sans.

Een bobbin bij jou in de buurt

Tot nu toe waren de web-UI en backend van Tangled een enkele Go-monoliet genaamd de appview. De appview-service verzorgde AT Protocol-indexering, caching, off-protocol data en UI-rendering met behulp van html/template + htmx. Deze draaide op een enkele SQLite-database op één middelgrote server in Zweden.

Dit werkte prima zolang je ongeveer 50–100 ms van Zweden verwijderd was, maar de meeste van onze gebruikers zijn dat niet! We hebben de architectuur herzien: we hebben een nieuwe, zelfstandige frontend-app gebouwd in Svelte, die 'at the edge' is uitgerold. Deze wordt gevoed door onze nieuwe diskless, volledig in-memory indexerservice geschreven in Rust: bobbin.

Bobbins zijn wereldwijd uitgerold in meer dan 11 regio's, waardoor gebruikers over de hele wereld de beste API- en UI-prestaties krijgen.

De oplettende lezer zal merken dat bobbin puur read-only is en alleen met AT Protocol-data omgaat. Hoe zit het met de rest? Die functionaliteit (en meer) is gedelegeerd aan een nieuwe set ondersteunende services.

Het nieuwe datamodel en repo-eigendom data

Ten eerste het datamodel zelf: we hebben een nieuwe set lexicons, en alles leeft nu onder org.tangled., ter vervanging van de oude sh.tangled. records.

Knot2 is onze, passend genaamd, tweede implementatie van de knot-server, ditmaal herschreven in Rust. Knot2 bevat een volledig aangepaste Git-server en bundelt ook een SSH-server in hetzelfde binary.

Met knot2 hebben we ook veranderd waar bepaalde data wordt opgeslagen. Issues, pull requests, reacties, reacties (emoji's) en labels worden nu opgeslagen op de knot, direct naast de code, als Collaborative Objects (COB's). Een COB is simpelweg een keten van Git-objecten in de repo zelf. Collaborateurs, knot-leden en de bloklijst worden op dezelfde manier opgeslagen.

In die zin gedragen knots zich nu veel als een PDS: ze bevatten ondertekende records, inclusief de volledige geschiedenis, voor alles wat bij een repo hoort. Net als een PDS worden deze records gesynchroniseerd via de standaard AT Protocol firehose.

Maar waarom? De issues en pull requests van een project maken net zoveel deel uit van het project als de code, dus ze zouden bij de code moeten leven, waar je die ook besluit te hosten. Dit geeft je project maximale portabiliteit.

Als de knot je issues en reacties schrijft, wat voorkomt dan dat deze woorden in jouw mond legt? Attestaties. Elke keer dat je een record op een knot maakt of bewerkt, schrijft de web-app ook een org.tangled.graph.attestation record naar je eigen PDS, die verwijst naar exact die versie van het record en de COB-wijziging daarachter. Tweezijdige verificatie!

Self-hosters zullen hun knots moeten upgraden naar v1.20.0 door de upgrade-gids te volgen.

Organisaties

Organisatie-accounts zijn er! Een Organisatie op Tangled is een echt AT Protocol-account, met een eigen DID en handle, gehost op een Tranquil PDS-instantie. Het zijn wachtwoordloze, gedelegeerde accounts: je maakt er een aan via de 'New Organization'-pagina en je krijgt <naam>.tngl.sh met jezelf als eigenaar. Eigenaren kunnen leden uitnodigen, en iedereen in de Organisatie kan als deze optreden bij het maken of forken van repositories.

Zoals bij elk ander account kun je de handle vervangen door een domein dat je zelf bezit. Als je een regulier account als tijdelijke "org" hebt gebruikt, houd dan nog even vol — we werken aan een manier om deze over te zetten. Lees meer in de documentatie.

Gestapelde PR's voor iedereen

Onze PR-flow is volledig herzien. De nieuwe flow geeft iedereen, ongeacht of je Jujutsu of gewoon vanilla Git gebruikt, de mogelijkheid om gestapelde PR's (stacked PRs) in te dienen en te beoordelen. Als je Git gebruikt, heb je nu de mogelijkheid om te 'interdiffen' tussen versies (voorheen rounds genoemd). JJ-gebruikers kunnen daarnaast interdiffen tussen individuele wijzigingen.

Lanceringen in de nabije toekomst

Dit is nog niet alles. We spreiden deze lancering over de komende weken. Volgende op de planning staan private repo's, een CLI, SDK's voor verschillende talen en skills voor je agent.

Geniet tot die tijd van elk onderdeel van deze lancering.