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
Documentation 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-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-26: Delegated Event Signing
- NIP-27: Text Note References
- NIP-28: Public Chat
- NIP-30: Custom Emoji
- NIP-36: Sensitive Content
- NIP-40: Expiration Timestamp
- NIP-42: Authentication of clients to relays
- NIP-46: Nostr Remote Signing
- NIP-47: Nostr Wallet Connect
- NIP-50: Keywords filter
- NIP-51: Lists
- NIP-52: Calendar Events
- NIP-55: Android Signer Application
- NIP-56: Reporting
- NIP-57: Lightning Zaps
- NIP-58: Badges
- NIP-62: Request to Vanish
- NIP-65: Relay List Metadata
- NIP-68: Picture-first feeds
- NIP-70: Protected Events
- NIP-71: Video Events
- NIP-75: Zap Goals
- NIP-85: Trusted Assertions (Web of Trust)
- NIP-88: Polls
- BUD-01: Server requirements and blob retrieval
- BUD-02: Blob upload and management
- BUD-03: User Server List
- NIP-A0: Voice Messages
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 installStart the development server:
npm startAlternative if you want to run the desktop app:
npm run tauri devTemplate created! To get started run: cd nostria npm install npm run tauri android init
For Desktop development, run: npm run tauri dev
For Android development, run: npm run tauri android dev
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.
https://github.com/settings/personal-access-tokens
Specific to the repo. Issues (read/write).
setx GITHUB_TOKEN "ghp_yourTokenHere"
echo %GITHUB_TOKEN%
# Process all tasks labeled "ready" in the GitHub repository, and create a branch and PR for each task.
ralphy --opencode --model github-copilot/claude-opus-4.6 --github nostria-app/nostria --github-label "ready"
ralphy --opencode --model opencode/glm-4.7-free "task"
ralphy --github owner/repo
ralphy --github owner/repo --github-label "ready"
ralphy --parallel # 3 agents default
ralphy --parallel --max-parallel 5 # 5 agents
ralphy --branch-per-task # branch per task
ralphy --branch-per-task --create-pr # + create PRs
ralphy --branch-per-task --draft-pr # + draft PRs
ralphy --base-branch main # branch from main
ralphy "test the login flow" --browser # force enable
ralphy "add checkout" --no-browser # force disable
ralphy "build feature" # auto-detect (default)
When enabled, the AI gets browser commands:
agent-browser open <url> - navigate to URL
agent-browser snapshot - get element refs (@e1, @e2)
agent-browser click @e1 - click element
agent-browser type @e1 "text" - type into input
agent-browser screenshot <file> - capture screenshot
ralphy --copilot --model "claude-opus-4.5" --prd PRD.md -- --allow-all-tools --allow-all-urls --stream on
This project is licensed under the MIT License. See the LICENSE file for details.