LAYER.systems — a Nostr client shaped like a desktop: feeds, profiles, threads and long-form articles open as windows you can move, resize and keep side by side.
SocialTypeScript · CSSGitHub @layer-systemsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
LAYER.systems is a Nostr client designed like a desktop operating system. Instead of
navigating between pages, you open apps in windows that can be moved, resized, stacked,
minimized, and kept open side by side. This makes it possible to read a thread, inspect a
profile, and keep your feed available at the same time.
The app is for people who use Nostr and want a focused, multitasking-friendly interface,
as well as contributors interested in building Nostr applications with React and
TypeScript.Read the full README ↗LAYER.systems is a Nostr client designed like a desktop operating system. Instead of navigating between pages, you open apps in windows that can be moved, resized, stacked, minimized, and kept open side by side. This makes it possible to read a thread, inspect a profile, and keep your feed available at the same time.
The app is for people who use Nostr and want a focused, multitasking-friendly interface, as well as contributors interested in building Nostr applications with React and TypeScript.
npub, note, nevent, nprofile, and naddr as links.LAYER.systems reads and writes Nostr events through relays. It does not provide a centralized social database; your relays and signer remain the source of your Nostr data. Some features require a signed-in account, and availability of content depends on the relays you use.
nvm install followed by nvm use reads .nvmrc)Node.js 26.12.1 is the minimum version containing the
October 21, 2026 security fixes.
GitHub Actions reads the patched version from .nvmrc; GitLab CI uses the matching
Node.js image. Update existing local Node.js installations before running development
or build commands. Production serves static files on GitHub Pages and does not run
a Node.js application server.
Clone the repository, install dependencies, and start the Vite development server:
git clone https://github.com/layer-systems/website.git
cd website
npm install
npm run dev
The development server listens on http://localhost:8080. The app has no required environment variables; relay and media-server settings are managed in the app.
Useful commands:
npm run test # Type-check, lint, run Vitest, and create a production build
npm run build # Create the production bundle in dist/
npm run build also creates dist/404.html, which supports client-side routes when the
build is deployed as a static site.
The repository includes a GitHub Actions workflow in
.github/workflows/deploy.yml. It runs on pushes to
main (or manually from the Actions tab), builds the app with the Node.js version in
.nvmrc, and deploys dist/ to GitHub Pages.
For another static host, run npm run build and publish the generated dist/ directory.
Configure the host to serve dist/404.html for unknown paths so direct NIP-19 links
continue to load the client application.
The application is organized into three main layers:
src/os/ Window manager, persistence, layout, and keyboard shortcuts
src/components/os/ Desktop shell, menu bar, windows, and mobile app shell
src/apps/ Nostr and system apps rendered inside windows
src/components/ Shared UI, authentication, and Nostr components
src/hooks/ Data access and application hooks
Apps are registered in src/os/registry.ts. Each app is lazy
loaded and receives a small window-oriented contract, so adding an app normally does not
require changing the router. Read the app guide before adding one.
For protocol reference, see the Nostr protocol documentation.
npm install.npm run test.When working with Nostr content, treat events, URLs, and profile metadata as untrusted
input. Follow the validation and URL-sanitization patterns in
docs/nostr.md, and do not use any in TypeScript.
LAYER.systems is dedicated to the public domain. You are free to copy, modify, distribute, and use it for any purpose, commercial or non-commercial.