Humans are social beings. We thrive when we connect, share, and build relationships. Social media has the power to bring us closer together - but too often, that natural drive is taken advantage of. Nostria exists to change that dynamic.
Nostria is a platform built on the decentralized Nostr protocol, created to serve people - not exploit them. Our purpose is simple: to be a tool for good. We empower individuals to form new connections and strengthen existing ones, offering features that enrich lives rather than distract from them.
We reject the model where users are treated as the product. Growth will come not from manipulation, but from people genuinely enjoying Nostria because it enhances their lives and relationships.
Joining Nostria is quick, welcoming, and easy - because social media should invite everyone in without barriers. Our design is simple, intuitive, and built to make meaningful interaction effortless.
On Nostria, users own their data, control their profiles, and resist censorship. No one can be silenced here - freedom and transparency are at the core of the experience.
Nostria is Your Social Network - a place where lasting engagement comes from meaning, utility, and community.
Nostria is accessible as both web app and desktop app.
Web: https://nostria.app
Desktop: https://github.com/nostria-app/nostria/releases
When there is a new release available, you'll see the update notification (button) in the app. This only works for certain installation packages.
Linux: AppImage will update in-place. .deb package installs will show an update notification, but you must download and install the new .deb manually.
Mac: App should update.
Windows: Only the .exe will show updates, the .msi will not show updates.
Android: Updates must be manually downloaded and installed if installing the APK directly. If installing through Google Play, updates will come through the Play Store. Zapstore users must also open Zapstore to get the update.
iOS: Updates will come through App Store (when available).
AppImage with in-app updates:
wget -O Nostria.AppImage https://github.com/nostria-app/nostria/releases/download/v3.1.43/Nostria_3.1.43_amd64.AppImage
chmod +x Nostria.AppImage
./Nostria.AppImageAppImage is portable. It does not install a desktop icon or app launcher by default, so keep the file somewhere stable such as ~/Applications/ and launch that same file again later. If you want a menu entry/icon, use an AppImage integration tool such as AppImageLauncher or create a desktop launcher manually.
.deb package with manual package updates:
wget https://github.com/nostria-app/nostria/releases/download/v3.1.43/Nostria_3.1.43_amd64.deb
sudo apt install ./Nostria_3.1.4_amd64.debsudo apt remove NostriaDocumentation of source code is available here: Nostria DeepWiki
Additional documents here: docs
The client is built on Angular and Angular Material. It is utilizing Tauri to package the app for desktop users.
Nostria is a client for the Nostr protocol, which is a decentralized social network protocol. It allows users to communicate and share information without relying on a central server. The client is designed to be user-friendly and provide a seamless experience for users.
Nostria implements the usage of the Nostr protocol to ensure maximum decentralization and global scalability, without compromising on user experience. The client is designed to be fast, responsive, and easy to use, with a focus on providing a great user experience.
- NIP-01: Basic protocol flow description
- NIP-02: Contact List and Petnames
- NIP-04: Encrypted Direct Message
- NIP-05: Mapping Nostr keys to DNS-based internet identifiers
- NIP-06: Basic key derivation from mnemonic seed phrase
- NIP-07:
window.nostrcapability for web browsers - NIP-08: Handling Mentions
- NIP-09: Event Deletion
- NIP-10: Text Notes and Threads
- NIP-11: Relay Information Document
- NIP-13: Proof of Work
- NIP-14: Subject tag in text events
- NIP-17: Private Direct Messages
- NIP-18: Reposts
- NIP-19: bech32-encoded entities
- NIP-21:
nostr:URL scheme - NIP-22: Comment
- NIP-23: Long-form Content
- NIP-24: Extra metadata fields and tags
- NIP-25: Reactions
- NIP-27: Text Note References
- NIP-28: Public Chat
- NIP-30: Custom Emoji
- NIP-36: Sensitive Content
- NIP-38: User Statuses
- NIP-39: External Identities in Profiles
- NIP-40: Expiration Timestamp
- NIP-42: Authentication of clients to relays
- NIP-44: Encrypted Payloads (Versioned)
- NIP-46: Nostr Remote Signing
- NIP-47: Nostr Wallet Connect
- NIP-50: Search Capability
- NIP-51: Lists
- NIP-52: Calendar Events
- NIP-53: Live Activities
- NIP-55: Android Signer Application
- NIP-56: Reporting
- NIP-57: Lightning Zaps
- NIP-58: Badges
- NIP-59: Gift Wrap
- NIP-62: Request to Vanish
- NIP-65: Relay List Metadata
- NIP-66: Relay Discovery and Liveness Monitoring
- NIP-68: Picture-first feeds
- NIP-70: Protected Events
- NIP-71: Video Events
- NIP-75: Zap Goals
- NIP-78: Application-specific data
- NIP-7D: Threads
- NIP-85: Trusted Assertions
- NIP-88: Polls
- NIP-98: HTTP Auth
- NIP-A0: Voice Messages
- NIP-B7: Blossom
- BUD-01: Server requirements and blob retrieval
- BUD-02: Blob upload and management
- BUD-03: User Server List
Nostria has opinions, and decisions is being made regarding parts of the Nostr protocol. There are parts that are not implemented and ignored, simply because we disagree.
Here is a list of opinions and decisions made in Nostria:
-
NIP-65: Relay List Metadata - We are ignoring the READ/WRITE flags for relays and all relays are both read and writes.
-
NIP-96: HTTP File Storage Integration - This is a "duplicate" specification to Blossom, that has more features, but is additionally more complex. It allows metadata to be stored with the blob, but Nostria will not support this protocol. File storage server list (kind:10096) is therefore ignored.
-
NIP-58: Badges: Badges should be self-contained on the user's relays. That means both the badge definition and the badge claim should be on the user's relays. This is to ensure that the user has full set of data for their own needs. Maybe Nostria will perform lookup on issuer relays to get updated badge definitions, but this is not a requirement. The user should be able to use the badge without relying on the issuer relay. That means that Nostria will publish both the badge definition and the badge claim to the user's relays.
-
NIP-B0: Web Bookmarking. We are not implementing this NIP, as this is something better left to the web browser.
Nostria is designed to help Nostr scale. It is implementing the protocol in a way that focuses on decentralization and scalability.
Read more about the journey to scale Nostr globally:
VS Code + Tauri + rust-analyzer + Angular Language Service.
Clone the repository. Install dependencies:
npm ci --legacy-peer-deps--legacy-peer-deps is currently required because the existing lockfile includes a peer dependency conflict around @nostrability/schemata and the repository's TypeScript version.
Start the development server:
npm startAlternative if you want to run the desktop app:
npm run tauri:devBuild a local desktop installer from the bundled Angular app:
npm ci --legacy-peer-deps
npm run tauri:buildInstall a current stable Rust toolchain first. The checked-in src-tauri/Cargo.lock uses lockfile format 4, so older Cargo releases such as cargo 1.59.0 will fail to parse it.
Recommended setup with rustup:
curl https://sh.rustup.rs -sSf | sh
rustup update stable
rustup default stable
cargo --versionUse a recent stable toolchain here. cargo 1.59.0 is too old for this project.
On Ubuntu/Debian, install the native dependencies required by Tauri before building:
sudo apt-get update
sudo apt-get install -y \
build-essential \
libappindicator3-dev \
libgtk-3-dev \
librsvg2-dev \
libssl-dev \
libwebkit2gtk-4.1-dev \
patchelfThen build the Linux bundles:
npm ci --legacy-peer-deps
npm run tauri:build:linuxThis produces AppImage and .deb installers under src-tauri/target/release/bundle/.
Platform-specific installer commands:
npm run tauri:build:linux
npm run tauri:build:windows
npm run tauri:build:macosGenerated installers are written to src-tauri/target/**/release/bundle/.
bubblewrap init --manifest https://nostria.app/manifest.webmanifest --drectory=src-android
bubblewrap build
# Make sure the signing method is added to the .env file
go install github.com/zapstore/zsp@latest
./zsp publish
# Preview using a local web browser.
# Verify the events before publishing.
- Accounts - List of accounts that the user has access to.
- Account - This is accounts of the user within the app.
- Users - This is Nostr users. "User" and "Users" refer to Nostr users, not the current user of the app.
SVG to ICO: https://redketchup.io/icon-converter
Sizes: 16, 32, 48, 180, 192, 512
Extract PNG from ICO: https://cloudconvert.com/ico-to-png
iPad 13" screenshots: 2048 × 2732px Make browser config 1024x1366 with 2x pixel density.
& "C:\Users\user\AppData\Local\Android\Sdk\platform-tools\adb.exe" logcat | Select-String 'AndroidRuntime|RustStdoutStderr|nostria|media-session'
& "C:\Users\user\AppData\Local\Android\Sdk\platform-tools\adb.exe" logcat | Select-String 'app.nostria|MediaSessionPlugin|ExoPlayer|playback_state|RustStdoutStderr'
npm run tauri:android:run:packaged:emulatorThis project is licensed under the MIT License. See the LICENSE file for details.
