{"id":15090223,"url":"https://github.com/synonymdev/slashtags","last_synced_at":"2025-10-05T23:31:38.797Z","repository":{"id":37088175,"uuid":"401476104","full_name":"synonymdev/slashtags","owner":"synonymdev","description":"Slashtags implementation in JavaScript","archived":true,"fork":false,"pushed_at":"2023-08-29T05:10:38.000Z","size":14004,"stargazers_count":134,"open_issues_count":6,"forks_count":24,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-01-19T01:30:54.703Z","etag":null,"topics":["bitcoin","decentralized-identity","dweb","hypercore-protocol","self-sovereign-identity","ssi"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/synonymdev.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":"2021-08-30T20:23:01.000Z","updated_at":"2024-11-11T00:17:06.000Z","dependencies_parsed_at":"2024-06-18T16:58:04.749Z","dependency_job_id":"8e786bc6-607a-4990-964c-769aa0a4cc96","html_url":"https://github.com/synonymdev/slashtags","commit_stats":{"total_commits":490,"total_committers":16,"mean_commits":30.625,"dds":"0.11632653061224485","last_synced_commit":"f6f581c79828a5bf211e6514329edc4882424ca0"},"previous_names":[],"tags_count":120,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synonymdev%2Fslashtags","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synonymdev%2Fslashtags/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synonymdev%2Fslashtags/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synonymdev%2Fslashtags/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/synonymdev","download_url":"https://codeload.github.com/synonymdev/slashtags/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235461385,"owners_count":18994071,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bitcoin","decentralized-identity","dweb","hypercore-protocol","self-sovereign-identity","ssi"],"created_at":"2024-09-25T09:23:41.131Z","updated_at":"2025-10-05T23:31:33.491Z","avatar_url":"https://github.com/synonymdev.png","language":"JavaScript","readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/synonymdev/slashtags\" title=\"Slashtags\"\u003e\n    \u003cimg alt=\"slashtags\" src=\"./docs/_img/slashtags_brand_mark.png\" width=\"150\"\u003e\u003c/img\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003eJavaScript implementation of the Slashtags protocol\u003c/h3\u003e\n\n---\n\n**⚠️ This SDK is still in beta. Please use at your own risk.⚠️**\n\n---\n\n## Overview\n\nReboot the Web with Slashtags.\n\nSlashtags is an open-source protocol for creating scalable and secure P2P applications. What Bitcoin has done for money and payments, Slashtags seeks to achieve for the rest of our digital data and interactions.\n\nSlashtags enables you to build applications and websites that give users control over their social profiles, contacts, payment preferences, and other data; allow them to find your server in a p2p fashion and authenticate with just a key; stream account data from slashtag-enabled services; and more.\n\nAll the [key pairs](./specs/slashtags-derivation.md) generated within Slashtags are based on a BIP-39 series of mnemonic words.\n\n\n### The problem\n\nThe modern Web is commonly called the Web 2.0. As the term was originally intended, it refers to a Web with services that are marked by interactive, personalized, easy, and engaging user experiences, interoperability, and scalability. This in contrast to Web 1.0 services, which were instead much more static, isolated, and less scalable. Think your personal website on Geocities from 1997.\n\nWhile the Web 2.0 has brought a vastly enriched user experience, it has also become synonymous with the oppressive dominance of a few large tech companies—such as Google, Facebook, Youtube, and Twitter—and governments, particularly those with pronounced authoritarian leanings. The modern Web is increasingly marked by censorship, including financial censorship; active, passive, and analytical data collection, which harms our privacy and security; centralized chokepoints for key services against which users are relatively powerless (e.g., drastic changes in a service's policies, interface, or even sunsetting the service) and which form central points of failure; and a highly inefficient use of our communication infrastructure.\n\nAt the core of these problems is that regular Web users cannot easily identify themselves in a trustworthy manner online, and that the machines of ordinary users cannot easily communicate directly.\n\n\n### Slashtags' solution\n\nA [slashtag](./packages/slashtag/README.md) is a key pair [derived](./specs/slashtags-derivation.md) from a standard BIP-39 series of mnemonic words, which is also used to generate Bitcoin addresses in practically all modern hardware and software wallets. Typically slashtags are associated with [hyperdrives](./packages/drive/README.md), personal drives for storing data that can be shared within a peer to peer network.\n\nJust as Bitcoin was able to decentralize money and payments with the clever use of cryptographic keys, Slashtags can potentially decentralize much of the rest of our digital data and interactions. It's a simple, yet powerful idea.\n\n\n### How it works\n\nAs already mentioned, at the core of Slashtags is a special type of file drive called a hyperdrive. Each hyperdrive is associated with an ed25519 private-public keypair derived from a BIP-39 master node and a name for the drive. What is known as the discovery key is a blake2b hash value of the public key.\n\nHyperdrives can be discovered, read, and seeded by peers on a network. The group of peers that stores some or all of the drive’s data is known as its swarm.\n\nMembers of the swarm are tracked within a [Kademlia-based](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf) distributed hash table system on the basis of the hyperdrive’s discovery key. Connections with members of the swarm and DHT nodes are made on the basis of a highly robust UDP holepunching algorithm. The distributed hash table system is known as [Hyperswarm](https://github.com/hyperswarm/hyperswarm).\n\nOnly the owner of the private key for a hyperdrive can make changes to it. Yet, other peers in the network can read and seed the data, as long as they have the discovery key. So in order to share a particular hyperdrive with a peer, one just has to hand over its public key. Schemas for particular data types help ensure efficient data retrieval and resolution, as well as interoperability between applications.\n\nHyperdrive data can be retrieved from any peer within the swarm. Slashtags relies on a digital signature procedure to ensure that peers can always determine the latest state of a particular hyperdrive. Specifically, all data is added to hyperdrives via blocks. Adding a block, requires making a valid signature over the merkle root of all the hash values of the existing blocks and the new block. Only when a valid signature is given will the block be added to the hyperdrive.\n\nHyperdrives are simple, yet powerful. For example, suppose that you created a profile with an e-mail address, website, twitter handle, and so on in a hyperdrive that you owned. Once you share the public key of the hyperdrive with a contact, they can always retrieve your latest contact information. No big tech company or authoritarian government can stop them. No company going out of business impacts easy data availability. This decentralized character can be extended to other types of data and features in applications.\n\nWhile much of the power of Slashtags comes via these hyperdrives, the key pairs that can be generated with Slashtags also can have important utility on their own. Bi-lateral, peer to peer [authentication](https://github.com/synonymdev/slashtags-auth-demo) between a user and a server can, for example, be realized just on the basis of key pairs.\n\n\n### Slashtags in action\n\nThe first showcase for Slashtags is the Bitkit wallet. The following features are powered by Slashtags: profiles, contacts, payment preferences, authentication, private feeds, and public feeds. Please consult our [website](https://synonym.to/products/#bitkit) and our [Github repository](https://github.com/synonymdev/bitkit) for more information. The website includes a [Playground](https://www.slashtags.to/#playground) for you to experiment.\n\nWe currently support three public data widgets that can be displayed within the wallet: a bitcoin [price feed](https://github.com/synonymdev/slashtags-widget-price-feed), a bitcoin [news feed](https://github.com/synonymdev/slashtags-widget-news-feed), a bitcoin [block data feed](https://github.com/synonymdev/slashtags-widget-bitcoin-feed).\n\nFinally, we also have an [authentication demo](https://github.com/synonymdev/slashtags-auth-demo).\n\nWe are currently developing various other applications that implement Slashtags and are actively supporting others with their own Slashtags projects.\n\n\n## Structure\n\nThe SDK is offered as a single module in the [sdk package](./packages/sdk). The other packages contain components of the SDK. These include the following:\n\n- [`/packages/slashtag`](./packages/slashtag): Identity layer of Slashtags protocol.\n- [`/packages/drive`](./packages/drive): Hyperdrive manager for each Slashtag.\n- [`/packages/sdk`](./packages/sdk): Batteries-included Software development kit.\n- [`/packages/cli`](./packages/cli): Provides a daemon with DHT relay for Slashtags SDK.\n- [`/packages/rpc`](./packages/rpc): Helper class to create RPC server/clients on top of slashtags.\n- [`/packages/url`](./packages/url): Helper functions for encoding/decoding slashtags urls.\n\n\n## Installation\n\n```bash\nnpm install @synonymdev/slashtags-sdk,\n```\nTo create a slashtag with the name 'alice' and to output the url, proceed as follows:\n\n```javascript\nimport SDK from '@synonymdev/slashtags-sdk';\n\nconst sdk = new SDK();\nconst alice = sdk.slashtag('alice');\n\nconsole.log(alice.url.toString());\n// slash:abc...xyz\n```\n\n## Documentation\n\nDocumentation is a still work in progress. But you can start by reading the available [specs](./specs/), checking out the [examples](./examples/) and read through the API documentation of any subpackage in its README.md.\n\n\n## Examples\n\nRun `npm install` in the root directory first.\n\nLook into the [examples](./examples/) to learn how to see Slashtags in action.\n\n\n## Development\n\nRequires Node LTS (v16.5.0).\n[nvm](https://github.com/nvm-sh/nvm#intro) is supported but not required\n\n```\nnpm install\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynonymdev%2Fslashtags","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsynonymdev%2Fslashtags","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynonymdev%2Fslashtags/lists"}