{"id":13559083,"url":"https://github.com/hyperspacedev/hyperspace","last_synced_at":"2025-09-27T05:30:47.300Z","repository":{"id":34417815,"uuid":"177651159","full_name":"hyperspacedev/hyperspace","owner":"hyperspacedev","description":"The new beautiful, fluffy client for Mastodon in React + TypeScript","archived":true,"fork":false,"pushed_at":"2022-06-17T00:00:55.000Z","size":20695,"stargazers_count":182,"open_issues_count":11,"forks_count":27,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-09-19T22:55:08.764Z","etag":null,"topics":["electron","mastodon","material-design","material-ui","reactjs"],"latest_commit_sha":null,"homepage":"https://hyperspace.marquiskurt.net","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hyperspacedev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/contributing.md","funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":".github/code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null},"funding":{"github":["alicerunsonfedora"],"patreon":"hyperspacedev","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2019-03-25T19:29:39.000Z","updated_at":"2025-08-20T13:10:13.000Z","dependencies_parsed_at":"2022-08-31T08:21:04.841Z","dependency_job_id":null,"html_url":"https://github.com/hyperspacedev/hyperspace","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/hyperspacedev/hyperspace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperspacedev%2Fhyperspace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperspacedev%2Fhyperspace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperspacedev%2Fhyperspace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperspacedev%2Fhyperspace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hyperspacedev","download_url":"https://codeload.github.com/hyperspacedev/hyperspace/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperspacedev%2Fhyperspace/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276668539,"owners_count":25683073,"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","status":"online","status_checked_at":"2025-09-23T02:00:09.130Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["electron","mastodon","material-design","material-ui","reactjs"],"created_at":"2024-08-01T12:05:20.246Z","updated_at":"2025-09-27T05:30:46.411Z","avatar_url":"https://github.com/hyperspacedev.png","language":"TypeScript","funding_links":["https://github.com/sponsors/alicerunsonfedora","https://patreon.com/hyperspacedev"],"categories":["TypeScript","Overview","electron"],"sub_categories":["Mastodon"],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"desktop/app.iconset/icon_512x512@2x.png\" width=\"128\" max-width=\"25%\" alt=\"Hyperspace Desktop icon\" /\u003e\n\n# Hyperspace Desktop\n\nThe new beautiful, fluffy client for the fediverse written in TypeScript and React\n\n\u003c/div\u003e\n\n![Hyperspace Desktop on a MacBook Pro](screenshot.png)\n\n[![Matrix room](https://img.shields.io/matrix/hypermasto:matrix.org.svg)](https://matrix.to/#/#hypermasto:matrix.org)\n[![Discord server](https://img.shields.io/discord/554108687434907660.svg?color=blueviolet\u0026label=discord)](https://discord.gg/c69AXwk)\n![Build Status](https://github.com/hyperspacedev/hyperspace/workflows/Node%20CI/badge.svg) [![GitHub release (latest SemVer including pre-releases)](https://img.shields.io/github/v/release/hyperspacedev/hyperspace?include_prereleases)](https://github.com/hyperspacedev/hyperspace/releases) [![License: NPLv4+](https://img.shields.io/badge/license-NPLv4%2B-blue.svg)](LICENSE.txt) [![Hyperspace](https://snapcraft.io/hyperspace/badge.svg)](https://snapcraft.io/hyperspace)\n\nSocialize and communicate with your friends in the fediverse (ActivityPub-powered social networks like Mastodon and Pleroma) with Hyperspace Desktop. Browse your timelines, check in with friends, and share your experiences across the fediverse in a beautiful, clean, and customizable way.\n\nWhat Hyperspace Desktop offers:\n\n-   A clean, responsive, and streamlined design that fits in with your Mac\n-   Support for switching between accounts to access the accounts you use the most\n-   Customization support, ranging from several beautiful themes to masonry layout and infinite scrolling\n-   Powerful toot composer with media uploads, emojis, and polls\n-   Activity and recommended views that give you insight on the community/instance you reside in\n\n## Get started\n\nHyperspace Desktop is available for the major desktop platforms via our downloads page, GitHub, and other store platforms where applicable.\n\n[**Download from our website \u0026rsaquo;**](https://hyperspace.marquiskurt.net/download)\n\n### Download from a store\n\n[![Get on the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/hyperspace) [![Get on the Mac App Store](https://hyperspace.marquiskurt.net/assets/images/mas.svg)](https://apps.apple.com/us/app/hyperspace-desktop/id1454139710?mt=12)\n\n**via [WinGet](https://github.com/microsoft/winget-cli)**:\n\n```\nwinget install HyperspaceDesktop\n```\n\n## Build from source\n\nTo build Hyperspace Desktop, you'll need the following tools and packages:\n\n-   Node.js v10 or later\n-   (macOS-only) Xcode 10 or higher\n\n### Installing dependencies\n\nFirst, clone the repository from GitHub:\n\n```\ngit clone https://github.com/hyperspacedev/hyperspace\n```\n\nThen, in the app directory, run the following command to install all of the package dependencies:\n\n```\nnpm install\n```\n\n### Testing changes\n\nRun any of the following scripts to test:\n\n-   `npm start` - Starts a local server hosted at https://localhost:3000.\n-   `npm run electron:build` - Builds a copy of the source code and then runs the app through Electron. Ensure that the `location` key in `config.json` points to `\"desktop\"` before running this.\n-   `npm run electron:prebuilt` - Similar to `electron:build` but doesn't build the project before running.\n\nThe `location` key in `config.json` can take the following values during testing:\n\n-   **https://localhost:3000**: Most suitable for running `npm start` or running via `react-scripts`.\n-   **desktop**: Most suitable for when testing the desktop application.\n\n\u003e Note: Hyperspace Desktop v1.1.0-beta3 and older versions require the location field to be changed to `\"https://localhost:3000\"` before running.\n\n### Building a release\n\nTo build a release, run the following command:\n\n```\nnpm run build\n```\n\nThe built files will be available under `build` as static files that can be hosted on a web server. If you plan to release these files alongside the desktop apps, compress these files in a ZIP.\n\n#### Building desktop apps\n\nYou can run any of the following commands to build a release for the desktop:\n\n-   `npm run build:desktop-all`: Builds the desktop apps for all platforms (eg. Windows, macOS, Linux). Will run `npm run build` before building.\n-   `npm run build:win`: Builds the desktop app for Windows without running `npm run build`.\n-   `npm run build:mac`: Builds the desktop apps for macOS without running `npm run build`. See the details below for more information on building for macOS.\n-   `npm run build:mas`: Builds the desktop apps for the Mac App Store without running `npm run build`. See the details below for more information on building for macOS.\n-   `npm run build:linux`: Builds the desktop apps for Linux (eg. Debian package, AppImage, and Snap) without running `npm run build`.\n-   `npm run build:linux-select-targets`: Builds the desktop app for Linux without running `npm run build`. _Targets are required as parameters._\n\nThe built files will be available under `dist` that can be uploaded to your app distributor or website.\n\n#### Extra steps for macOS\n\nThe macOS builds of Hyperspace Desktop require a bit more effort and resources to build and distribute accordingly. The following is a quick guide to building Hyperspace Desktop for macOS and for the Mac App Store.\n\n##### Gather your tools\n\nTo create a code-signed and notarized version of Hyperspace Desktop, you'll need to acquire some provisioning profiles and certificates from a valid Apple Developer account.\n\nFor certificates, make sure your Mac has the following certificates installed:\n\n-   3rd Party Mac Developer Application\n-   3rd Party Mac Developer Installer\n-   Developer ID Application\n-   Developer ID Installer\n-   Mac Developer\n\nThe easiest way to handle this is by opening Xcode and going to **Preferences \u0026rsaquo; Accounts** and create the certificates from \"Manage Certificates\".\n\nYou'll also need to [create a provisioning profile for **Mac App Store** distribution](https://developer.apple.com/account/resources/profiles/add) and save it to the `desktop` folder as `embedded.provisonprofile`.\n\n##### Create your entitlements files\n\nYou'll also need to create the entitlements files in the `desktop` directory that declares the permissions for Hyperspace Desktop. Replace `TEAM_ID` with the appropriate Apple Developer information and `BUNDLE_ID` with the bundle ID of your app.\n\n###### entitlements.mac.plist\n\n```plist\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n  \u003cdict\u003e\n    \u003ckey\u003ecom.apple.security.cs.allow-unsigned-executable-memory\u003c/key\u003e\n    \u003ctrue/\u003e\n    \u003ckey\u003ecom.apple.security.network.client\u003c/key\u003e\n    \u003ctrue/\u003e\n    \u003ckey\u003ecom.apple.security.files.user-selected.read-write\u003c/key\u003e\n    \u003ctrue/\u003e\n  \u003c/dict\u003e\n\u003c/plist\u003e\n```\n\n###### entitlements.mas.plist\n\n```plist\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n\u003cdict\u003e\n\t\u003ckey\u003ecom.apple.security.cs.allow-jit\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.network.client\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.app-sandbox\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.cs.allow-unsigned-executable-memory\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.application-groups\u003c/key\u003e\n\t\u003carray\u003e\n\t\t\u003cstring\u003eTEAM_ID.BUNDLE_ID\u003c/string\u003e\n\t\u003c/array\u003e\n\t\u003ckey\u003ecom.apple.security.files.user-selected.read-only\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.files.user-selected.read-write\u003c/key\u003e\n\t\u003ctrue/\u003e\n\u003c/dict\u003e\n\u003c/plist\u003e\n```\n\n###### entitlements.mas.inherit.plist\n\n```plist\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n\t\u003cdict\u003e\n\t\u003ckey\u003ecom.apple.security.app-sandbox\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.inherit\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.cs.allow-jit\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.cs.allow-unsigned-executable-memory\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003c/dict\u003e\n\u003c/plist\u003e\n```\n\n###### entitlements.mas.loginhelper.plist\n\n```plist\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n  \u003cdict\u003e\n    \u003ckey\u003ecom.apple.security.app-sandbox\u003c/key\u003e\n    \u003ctrue/\u003e\n  \u003c/dict\u003e\n\u003c/plist\u003e\n```\n\n###### info.plist\n\n```plist\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n\u003cdict\u003e\n\t\u003ckey\u003eElectronTeamID\u003c/key\u003e\n\t\u003cstring\u003eTEAM_ID\u003c/string\u003e\n\t\u003ckey\u003ecom.apple.developer.team-identifier\u003c/key\u003e\n\t\u003cstring\u003eTEAM_ID\u003c/string\u003e\n\t\u003ckey\u003ecom.apple.application-identifier\u003c/key\u003e\n\t\u003cstring\u003eTEAM_ID.BUNDLE_ID\u003c/string\u003e\n\u003c/dict\u003e\n\u003c/plist\u003e\n```\n\n##### Edit `notarize.js`\n\nYou'll also need to edit `notarize.js` in the `desktop` directory. Replace `\u003cTEAM_ID\u003e`, `\u003cBUNDLE_ID\u003e`, and `\u003cAPPLE_DEVELOPER_EMAIL\u003e` with the appropriate information from the app and your account from Apple Developer.\n\n```js\n// notarize.js\n// Script to notarize Hyperspace for macOS\n// © 2019 Hyperspace developers. Licensed under Apache 2.0.\n\nconst { notarize } = require(\"electron-notarize\");\n\n// This is pulled from the Apple Keychain. To set this up,\n// follow the instructions provided here:\n// https://github.com/electron/electron-notarize#safety-when-using-appleidpassword\nconst password = `@keychain:AC_PASSWORD`;\n\nexports.default = async function notarizing(context) {\n    const { electronPlatformName, appOutDir } = context;\n    if (electronPlatformName !== \"darwin\") {\n        return;\n    }\n\n    console.log(\"Notarizing Hyperspace...\");\n\n    const appName = context.packager.appInfo.productFilename;\n\n    return await notarize({\n        appBundleId: \"\u003cBUNDLE_ID\u003e\",\n        appPath: `${appOutDir}/${appName}.app`,\n        appleId: \"\u003cAPPLE_DEVELOPER_EMAIL\u003e\",\n        appleIdPassword: password,\n        ascProvider: \"\u003cTEAM_ID\u003e\"\n    });\n};\n```\n\nNote that the password is pulled from your keychain. You'll need to create an app password and store it in your keychain as `AC_PASSWORD`.\n\n##### Build the apps\n\nRun any of the following commands to build Hyperspace Desktop for the Mac:\n\n-   `npm run build:mac` - Builds the macOS app in a DMG container.\n-   `npm run build:mac-unsigned` - Similar to `build:mac`, but skips code signing and notarization. **Use only for CI or in situations where code signing and notarization is not available.**\n-   `npm run build:mas` - Builds the Mac App Store package.\n\n## Licensing and Credits\n\nHyperspace Desktop is licensed under the [Non-violent Public License v4+](LICENSE.txt), a permissive license under the conditions that you do not use this for any unethical purposes and to file patent claims. Please read what your rights are as a Hyperspace Desktop user/developer in the license for more information.\n\nHyperspace Desktop has been made possible by the React, TypeScript, Megalodon, and Material-UI projects as well our [Patrons](patreon.md) and our contributors on GitHub.\n\n## Contribute\n\nContribution guidelines are available in the [contributing file](.github/contributing.md) and when you make an issue/pull request. Additionally, you can access our [Code of Conduct](.github/code_of_conduct.md).\n\nIf you want to aid the project in other ways, consider supporting the project on [Patreon](https://patreon.com/hyperspacedev).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperspacedev%2Fhyperspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhyperspacedev%2Fhyperspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperspacedev%2Fhyperspace/lists"}