This is an anonymous chat browser extension that is
decentralized and serverless, utilizing WebRTC for end-to-end encrypted
communication. It prioritizes privacy, with all data stored locally.
The aim is to add chat room functionality to any website, you'll never feel alone again.
Click on the "Assets" button and select "web-chat-*.zip"
Extract the ZIP file to a folder on your computer
Open the extension management page in your browser (usually chrome://extensions/)
Enable "Developer mode"
Click "Load unpacked" and select the folder you just extracted
Usage
After installing the extension, you'll see a ghost icon in
the bottom-right corner of any website. Click it, and you'll be able to
chat happily with others on the same site!
Video
web-chat.mp4
Community
Join our Discord community to discuss WebChat and connect with other users:
In addition to the good idea of decentralized chat, it also leverages some fantastic technologies.
remesh:
A framework in JavaScript that implements DDD principles, achieving
true separation of UI and logic, allowing for easy implementation of the
UI part, such as rewriting it in Vue, due to its independence from the
UI.
shadcn/ui: A beautiful UI library and a pioneer of the no-install concept, offering unmatched convenience in customizing styles.
wxt: This is the best framework I’ve used for building browser extensions, bar none.
trystero:
The core dependency for implementing decentralized communication,
enabling connections to decentralized networks like IPFS, torrent,
Nostr, etc.
Artico: A flexible set of libraries that help you create your own WebRTC-based solutions
ugly-avatar: Use it to create stunning random avatars.
As a developer, you may already be familiar with using npm install to install dependencies for your Node.js projects. However, there's another command you should consider using: npm ci . In this article, we'll explain why developers should use npm ci instead of npm install and its benefits.
npm ci is a command that stands for "clean install." Unlike npm install , which can install packages from the node_modules cache, npm ci installs packages from the package-lock.json file. This means that npm ci always installs a project with a clean slate, ensuring that you have the exact dependencies and versions listed in the package-lock.json file.
Why use npm ci ?
Here are a few reasons why developers should use npm ci instead of npm install :
Consistency: npm ci
ensures that all developers working on a project have the same exact
dependencies and versions installed. This helps to eliminate
inconsistencies in the development environment, making it easier to
reproduce and debug issues.
Speed: Since npm ci always installs packages from the package-lock.json file, it doesn't need to check the node_modules cache. This means that npm ci can be much faster than npm install , especially for large projects with many dependencies.
Predictability: npm ci installs packages exactly as they are listed in the package-lock.json
file, without any additional updates or modifications. This ensures
that you always have a predictable and stable development environment,
without unexpected changes in dependency versions.
Automation: npm ci is designed to be used in automated environments such as continuous integration and deployment pipelines. By using npm ci
, you can ensure that your project is always built with a consistent
and predictable set of dependencies, regardless of the environment.
How to use npm ci ?
To use npm ci , simply run the following command in your project directory:
npm ci
This will install all of the dependencies listed in the package-lock.json file, ensuring a clean and consistent installation.
Conclusion
In conclusion, npm ci is a command that developers should consider using instead of npm install
for their Node.js projects. It provides consistency, speed,
predictability, and automation benefits, making it a valuable tool for
any development team. So, if you haven't already, give npm ci a try and see how it can improve your workflow.
from https://support.deploybot.com/build-tools/why-developers-should-use-npm-ci-instead-of-npm-install-and-its-benefits
Sharing is a command-line tool to share directories and files from the
CLI to iOS and Android devices without the need of an extra client app。
Instantly move files, folders, and clipboard text
between your computer and any phone — no app, no account, no cloud. Just
run a command and scan the QR code.
npx easy-sharing ~/Photos # share a folder — scan the QR on your phone — done
That's the whole idea. Your phone opens a normal web page
over your own Wi-Fi. Nothing to install on the other device, nothing
leaves your network.
Why sharing?
If you've ever tried to get a file from your laptop to
your phone, you know the options are all a little painful: cloud uploads
are slow and nosy, AirDrop is Apple-only, and "real" tools want an app
installed on both ends. sharing takes the simplest path that always works: a tiny web server and a QR code. Any phone with a browser can use it.
sharing
python -m http.server
npx serve
qrcp
AirDrop / LocalSend
No app on the phone
✅
✅
✅
✅
❌ (app both ends)
QR code to connect
✅
❌
❌
✅
❌
Receive files from the phone
✅
❌
❌
✅
✅
Receive multiple files / drag-drop
✅
❌
❌
➖
✅
Download a whole folder as .zip
✅
❌
❌
✅
➖
Share clipboard text and receive text back
✅
❌
❌
➖
✅
Built-in auth and HTTPS
✅
❌
➖
➖
✅
One-flag private share (--secure)
✅
❌
❌
❌
✅
Picks the right network address automatically
✅
❌
➖
✅
✅
sharing is the one that does all of it from a single command, in a browser, with nothing to install on the device in your hand.
Getting Started
Requirements: Node.js v14.17 or later.
Try it without installing
npx easy-sharing /path/to/file-or-directory
Install globally
npm install -g easy-sharing
macOS users: macOS already ships a built-in /usr/sbin/sharing command, so use easy-sharing instead of sharing.
Example: easy-sharing /path/to/file
Quick Start
# Share a file or directory
sharing /path/to/file-or-directory
# Share clipboard content
sharing -c
# Receive files from another device
sharing /destination/directory --receive
# Share privately — secret link + password + HTTPS, in one flag
sharing /path/to/file-or-directory --secure
Scan the QR code shown in your terminal with your phone. Both devices just need to be on the same Wi-Fi.
QR code won't scan? (Some Windows terminals and unicode paths can't draw it.) Open the link the terminal prints, or run with --open to pop the QR up in a browser window on your computer — then scan that.
Features
📤 Share anything
Files and directories over your local network, with a clean browsable listing.
Download a whole folder as a single .zip — one tap on the phone instead of saving files one by one.
Clipboard text (-c) opens on the phone with a one-tap Copy button.
📥 Receive just as easily
Turn your machine into a drop target with --receive.
Multiple files at once, with drag-and-drop and a live progress bar.
Send a note or link back from the phone straight to your terminal (and your clipboard).
🔒 Private when you need it
--secure — the easy button: a secret unguessable link + an auto-generated password + HTTPS, all at once.
Or mix and match: -U/-P for a password, --token for a secret link, -S for HTTPS.
Auto HTTPS:-S now generates a certificate for you — no more fiddling with OpenSSL. (Bring your own with -C/-K if you prefer.)
⏱️ Ephemeral by choice
--once — stop sharing automatically after the first transfer.
--timeout 10m — auto-stop after a set time (30s, 10m, 1h).
🎯 It just works
Smart network detection:sharing
advertises your real Wi-Fi address and skips Docker/VPN/WSL adapters —
the #1 reason "the QR scans but the page won't load." Pin one explicitly
with --interface en0 or --ip.
QR fallback:--open shows the QR as an image in a browser for terminals that can't render it.
Internet sharing:--tunnel walks you through exposing a share beyond your LAN.
Usage examples
# Receive a batch of photos from your phone (multi-file + drag & drop)
sharing ~/Downloads --receive
# Share a folder and let the recipient grab it all as one zip
sharing ~/project # the listing shows a "Download as .zip" button# Copy a snippet to your phone, or send a link from the phone to your terminal
sharing -c # then use the Copy button on the page
sharing ~/x --receive # the upload page also has a "Send text" box# A private, self-destructing share
sharing report.pdf --secure --once
# Pick a specific network interface (multi-homed / VPN machines)
sharing ~/x --interface en0
# Share over HTTPS with your own certificate
sharing ~/x -S -C cert.pem -K key.pem
Options
$ sharing --help
sharing — quickly share files, directories, and clipboard content from your
terminal to any device with a browser.
Examples:
Share file or directory
$ sharing /path/to/file-or-directory
Share clipboard content
$ sharing -c
Receive files from another device
$ sharing /destination/directory --receive
Share with basic authentication
$ sharing /path/to/file-or-directory -U user -P password
Share privately (secret link + password + HTTPS)
$ sharing /path/to/file-or-directory --secure
Share over HTTPS
$ sharing /path/to/file-or-directory -S -C cert.pem -K key.pem
Options:
--version Show version number [boolean]
--debug Enable debug logging [boolean] [default: false]
-p, --port Set the server port (default: auto-assigned) [number]
--ip Specify your machine's public IP address [string]
-i, --interface Network interface/adapter name to advertise
(e.g. en0, eth0) [string]
-c, --clipboard Share clipboard content [boolean]
-w, --on-windows-native-terminal Enable QR code rendering in Windows native terminal [boolean]
--open Open the QR code in a browser window on this computer [boolean]
-r, --receive Receive files from another device [boolean]
-q, --receive-port Set the port for receiving files [number]
-U, --username Set username for basic authentication
[string] [default: "user"]
-P, --password Set password for basic authentication [string]
-S, --ssl Enable HTTPS (auto self-signed cert when
-C/-K are not given) [boolean]
-C, --cert Path to SSL certificate file [string]
-K, --key Path to SSL private key file [string]
--token Add a secret token to the share URL so it is
unguessable [boolean]
--secure Private share preset: secret link +
generated password + HTTPS [boolean]
--once Stop sharing after the first completed transfer [boolean]
--timeout Auto-stop the share after a duration (e.g.
30s, 10m, 1h) [string]
--tunnel Show guide for sharing over the internet via
tunnel services [boolean]
--help Show help [boolean]
A note on security
By default a share is open to everyone on your Wi-Fi —
perfect for your own devices at home, less so on a café or office
network. sharing reminds you of this on startup and gives you one-flag protection:
sharing ~/private --secure
This generates a secret link (so the share isn't browsable by IP alone), a random password, and turns on HTTPS — printed for you when the server starts.
Sharing Over the Internet (Tunneling)
To share with someone who is not on your local network, pair sharing with a tunnel service — no public IP required.
Run sharing --tunnel for a quick setup guide, or:
Start sharing as usual: sharing /path/to/files
In a separate terminal, run one of the tunnel commands below
PhotoPrism® is an AI-powered, privacy-first app for
browsing, organizing, and sharing photos and videos. It helps tag,
search, and rediscover media without getting in your way, whether
self-hosted or in the cloud.
To get a first impression, you are welcome to play with our public demo. Please be careful not to upload any private, unlawful or offensive pictures.
Feature Overview
Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible.
That's why PhotoPrism was built from the ground up to run wherever you
need it, without compromising freedom, privacy, or functionality:
Whether you're using a phone, tablet, or desktop computer, our intuitive PWA provides a native app-like experience and can be easily installed on your home screen
Being completely self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent
about our software and services. Your data will never be shared with
Google, Amazon, Microsoft or Apple unless you intentionally upload files
to one of their services. 🔒
Your continued support helps us provide regular updates and remain
independent, so we can fulfill our mission and protect your privacy
Sustained funding is key to quickly releasing new features requested by you and other community members
Being self-funded and independent, we can personally promise you
that we will never sell your data and that we will always be transparent
about our software and services
Please also leave a star on GitHub if you like this project. It provides additional motivation to keep going.
A big thank you to all current and past sponsors,
whose generous support has been and continues to be essential to the
success of the project!
Our Project Roadmap
shows what tasks are in progress and what features will be implemented
next. You are invited to give ideas you like a thumbs-up, so we know
what's most popular.
Be aware that we have a zero-bug policy and do our best to
help users when they need support or have other questions. This comes
at a price though, as we can't give exact release dates for new
features. Our team receives many more requests than can be implemented,
so we want to emphasize that we are in no way obligated to implement the
features, enhancements, or other changes you request. We do, however,
appreciate your feedback and carefully consider all requests.
We kindly ask you not to report bugs via GitHub Issues unless you are certain to have found a fully reproducible and previously unreported issue that must be fixed directly in the app. Thank you for your careful consideration!
When browsing issues, please note that our team and all issue subscribers receive an email notification from GitHub whenever a new comment is added, so these should only be used for sharing important information and not for discussions, questions, or expressing personal opinions
Contact us or a community member if you need help, it could be a local configuration problem, or a misunderstanding in how the software works
This gives us the opportunity to improve our documentation
and provide best-in-class support instead of dealing with
unclear/duplicate bug reports or triggering a flood of notifications by
replying to comments
Connect with the Community
Follow us on Mastodon, Bluesky, or join the Community Chat to get regular updates, connect with other users, and discuss your ideas. Our Code of Conduct explains the "dos and don’ts" when interacting with other community members.
As a contributor, you are also welcome to contact us directly
if you have something on your mind that you don't want to discuss
publicly. Please note, however, that due to the high volume of emails we
receive, our team may be unable to get back to you immediately. We do
our best to respond within five business days or less.
Every Contribution Makes a Difference
We welcome contributions of any kind, including blog posts, tutorials, translations, testing, writing documentation, and pull requests. Our Developer Guide contains all the information necessary for you to get started.