Rainlit
Private voice calls, video, screen sharing, messages and file sharing with your
friends. Everyone has an account, adds friends by username, and can see who's
online. Each friend has a conversation where messages and files are kept (or
not, if you turn saving off). Groups are a few friends (up to 10) with a chat and a call
of their own. Spaces are communities with text and voice channels that anyone can make and
invite people to (or bring over from Discord, with a server template link). Calls between two friends (video and screen sharing too) go directly
between your devices; the server only helps them find each other. Group calls and voice
channels go through a media server (Cloudflare's, or LiveKit), end-to-end encrypted (see
SELF-HOSTING.md), and others' video only comes while you're looking at
it. Someone left alone in a voice channel for 15 minutes is asked if they're still there, and
taken out if they don't answer, so a channel isn't left open overnight by accident.
Run your own: anyone can host a Rainlit for their friends or community, on Render in
a few clicks or on any machine with Docker. See SELF-HOSTING.md. Where
it's headed (free accounts on rainlit.app, voice channels, one account everywhere) is in
ROADMAP.md.
1. Try it on your own computer
- Install Node.js 24 (24.22.1 or later) from https://nodejs.org
- Open a terminal in this folder and run:
npm install
npm start
- The terminal prints a setup code. Open http://localhost:3000, sign up
with that code, and you're the admin.
- To try a call with yourself, open the admin panel (the key button next to
your name), make an invite, then open http://127.0.0.1:3000 in another tab
and sign up there with the invite. (That second address keeps its own
sign-in, so the two tabs can be two different people.) Add each other as
friends and call. Mute one tab so it doesn't echo.
Everything is kept in a data folder next to server.js. Delete it to start
over.
2. Put it online
SELF-HOSTING.md has it all: Render in a few clicks, or Docker on your
own computer or server (with https:// set up for you), your own address, backups and
updating.
3. Invite your friends
Rainlit is invite-only to start with, so strangers who find your address can't
make an account.
- Press the key button next to your name.
- Press Make an invite. A message with your app's address and the code is
copied, ready to paste to your friend.
- They sign up with it, then add you (or you add them) by username.
Each code works once. Unused codes can be deleted.
Birthdays: signing up asks for a birthday, without saying what age it takes
(a "neutral age screen"). Anyone under 13 is told they can't make an account,
and that device can't try again for a day. The birthday isn't kept: someone
13 to 17 keeps only the day they turn 18, and 18+ channels stay closed to them
until then. A server can ask for more than 13 with MIN_AGE (some countries'
laws want 14, 15 or 16).
Open sign-ups: the same panel can let anyone sign up without an invite, with a
bot check, a daily limit and a waitlist (see SELF-HOSTING.md).
Everyone inviting: the same panel can let everyone make invites too, 5 a month each,
from Invite someone to Rainlit under Add a friend.
Forgot password: in the same panel, press Reset link next to their
account and send them the link. It works once, for 24 hours, and signs them
out everywhere else.
Flagged accounts: the same panel lists accounts that look like they're
filling up the free tier (bots, mostly), each with what was noticed: a new
account hitting its daily limit, the same file sent again and again, a lot in
files nobody else opens, several accounts made from one place in a day. New
accounts can send up to 250 MB of files a day for their first week, and so can
a flagged one until you press Looks fine. Nobody's suspended unless you do
it.
Announcements: the same panel tells everyone something (a change to the
terms, some planned downtime). It shows once to each person, the next time
they open Rainlit (right away if it's open), until they press Got it. For
a big change to the terms or privacy policy, send it at least 3 days before
the change starts: they both promise that.
4. Relay and GIFs
If calls get stuck on "Connecting" on some networks, add a relay (a TURN server;
Cloudflare's is free to start). The GIF button needs a free KLIPY key. Both are in
SELF-HOSTING.md (steps 5 and 6).
5. The Android app
Get it from https://rainlit.app/android (or with Obtainium,
from https://github.com/coldsignals/rainlit-android). It keeps calls going with the screen
off, rings like a phone call, and gets notifications while it's closed if
ntfy is installed. It opens rainlit.app; for
another Rainlit server, press Use a different Rainlit server on the sign-in screen (or
Settings → Server → Change). More in mobile/README.md.
6. Rainlit for Windows
Get it from https://rainlit.app/download. It opens rainlit.app; for another Rainlit
server, press Use a different Rainlit server on the sign-in screen (or Settings →
Server → Change; the tray menu goes back to rainlit.app). It's the same Rainlit in its
own window, plus:
- Push to talk that works while you're in another app or a game.
- Screen sharing with sound, with Rainlit's own sound left out so your friend
doesn't hear themselves.
- Your activity, if you want it: "Playing Hades" or "Listening to (a song)" by
your name, for your friends and people in your spaces (see below).
- It keeps running in the tray by the clock, so calls and messages still reach
you with the window closed, with Windows notifications and a flashing taskbar
button.
- It updates itself.
The installer isn't code-signed yet, so Windows shows "Windows protected your
PC" the first time: click More info, then Run anyway. How it's built
and released is in desktop/README.md.
Friends and profiles
- Add a friend: type their username in the box at the top of the list.
They get a request to accept. If they'd already asked you, you're friends
straight away.
- Online, away, offline: the dot on each picture. You show as away after
10 minutes away: in Rainlit for Windows, from your computer (no key or mouse
in any program); in a browser or the phone app, from Rainlit. In a call too,
so whoever's in it with you sees "Away" on your picture there (talking counts
as being there). You can also
pick Away, Do not disturb or Appear offline yourself (Your
profile, Show me as). Do not disturb shows red, and mutes you: no
message sounds, no notifications on your computer or phone, and calls
coming in don't ring (they still show in Rainlit).
- Your profile: click your name at the bottom left. Change your picture
(PNG, JPG, WebP or GIF, up to 8 MB, and GIFs move; a big one's made 512 pixels
across, losslessly, so it's never blurred or blocky), display name and a status
of up to 120 characters. Your password, your email and sign out are there too,
and Your files: everything you've sent, biggest first, to make room.
- Your birthday: add one to Your profile (just the month and day, never the
year) and it's celebrated on the day, by your own clock: confetti over
everything the first time you open Rainlit, and balloons and confetti on your
picture all day. Tick Celebrate it where others can see and everyone who
can see your profile sees the balloons too (only that it's your birthday,
that day: never the date). Leave it empty and nothing's kept: the birthday
you signed up with never is.
- Your card: how your profile looks to everyone who opens it (Your profile,
Customize): two colours it goes between, a pattern along its top (any of
the homepages', in those colours), a font for your name (any of theirs), and
weather over it (rain, snow, sparkles, floating hearts, autumn leaves). Glow
adds the moving patterns and its weather (fireflies, an aurora, a
thunderstorm, cherry blossoms, embers), to try on there first. Make it plain
again puts it back as it was. It's in the corner by your name too (bottom
left), smaller: its colours, pattern, font and weather; and behind your name in
your spaces' members, the same (in the members panel, and the Members box on a
phone; your name in your role's colour, where that reads on it).
- Your email: new accounts get a link to confirm their email address (your
profile says whether it's confirmed, and sends another). Forgot your password?
Forgot your password? on the sign-in screen emails a link, good for an
hour. Changing your email needs your password, and the old address is told.
(A Rainlit that doesn't send email: its admin makes reset links instead. See
to turn email on.)
Themes
Settings > Theme: Rainlit's own (the night, lit by a lamp), Dark (plain
greys), Midnight (black, for OLED screens), Light, or Auto (Light
or Rainlit, as your device is set). With Glow (below), there's also
a theme for each season: Sakura (cherry blossoms at night, with falling
petals), Monsoon (deep green, and the rains), Fireflies (a summer
night in the woods), Maple (autumn at dusk, with falling leaves) and
Aurora (the northern lights, and snow), each with its own weather in
place of the rain; anyone else can try them on while Settings is open (and
sees what Glow gets you). Your theme is kept with your account, so it's the
same on all your devices. If your Glow ends, a Glow theme you're using stays
until you switch to another; switching back to it takes Glow again (the same
goes for a homepage's Glow extras).
Homepages
Everyone has a homepage: a whole page of their own, like the personal pages of
the old web (GeoCities, Angelfire) or a Strawpage, where the profile card is the
quick look. Open anyone's from their profile card (Homepage), and yours
from your own (Your homepage, then Edit).
- Put anything anywhere: words in 14 fonts (pixel, handwriting, gothic,
neon, Comic...), with boxes (a sticky note, a label, a speech bubble, a
caution sign) and effects (glow, rainbow, blinking, scrolling, wavy);
pictures, GIFs and videos with frames (a photo with a caption, a stamp, a
heart, or a window: Rain95, RainXP, Raintosh or Rainscape, an old browser); pixel
stickers (an old desktop's too: a computer, a folder, a bin, an hourglass, an
error...), any emoji and your spaces' emoji; tape and paper. Drag to move;
the handles resize and turn (or press R). To front and To back
stack them, and Undo takes anything back.
- Videos: MP4 or WebM, up to 20 MB each, sharing the page's room (40 MB)
with its pictures and songs. On the page one plays over and over without its
sound while it's on the screen, and visitors can turn the sound on (for
anyone who'd rather things didn't move, it waits for them to press play).
- Click it for a video, or a sound: a button, a picture, a sticker or some
words can open a link, or pop up a video instead: it opens somewhere over the
page in a window (Rain95, RainXP, Raintosh, Rainscape or a plain one),
playing with its sound, until it's closed with its ×. Every click pops up
another. Or it plays a sound of yours (a meow when a spinning cat's clicked),
from the start each time. Try it shows you while you're making it.
- The old web: a visitor counter (like the hit counters of old, every
visit counts but yours), a guestbook anyone who can see your page can sign (they
can delete what they wrote, and you can delete anything in it; you hear
when someone signs it), a music player for a song of yours (MP3, M4A,
OGG, FLAC or WAV, up to 10 MB), as a tunebox, a cassette or just a button
(it only plays when a visitor presses play), and a taskbar, Rain95 or
RainXP, with a start button and a clock showing each visitor their own time.
- Ask me anything: a box visitors ask you things in, anonymously if you
let them (you aren't told who asked; whoever runs the server is, only if
you report the question). Only you see a question until you answer it,
right on your page; then it shows there with your answer. Report one to
stop whoever asked from asking again, without finding out who it was.
- Shelves and buttons: a shelf shows off favourite games, music or shows
by their covers, with name tags and links: add pictures, or paste a link
(a Steam page, an album, a film's page) and its cover and name are found
for you. Friend buttons (88x31s, the little badges old sites linked each
other with) take visitors to a friend's page: pick a friend, and one's made
from their name, their card's colours and a pixel sticker, to change any way
you like (or link anywhere). A link to someone's homepage opens it right in
Rainlit.
Pets
Everyone can adopt a pixel pet: a cat, a dog or a fish, each in four colours,
with a name. It has a room of its own in the app (the button by your profile,
which shows your pet, and a dot when it's hungry), where it wanders about, naps,
and comes over to see what the pointer's up to, and where you look after it:
feed it (a bowl comes, and it eats) and play with it (it chases a ball). It gets
hungry over three days and glum over two, but never ill, and never runs away;
hungry, it just mopes about, thinking of food, until it's fed. Petting it cheers
it up: click it. It lives on your homepage too (unless you'd rather it didn't),
where anyone who can see your page can pet it, and it counts how many times it's
been petted. Its room is pixel too, and yours to do up (its Decorate tab):
a wallpaper (stripes, hearts, slate, wood panels, plaid...) and a floor, a rug,
something on the wall (a picture, a clock, a guitar, a dartboard...), and
something in each corner (a plant, a lamp, a bookshelf, a desk, an armchair, or
its bed, where it naps). The weather out its window changes by itself (day or
night by your clock, and a new sky each hour), or pick one to keep: rain, a
clear night, snow, a sunny day or a sunset. Glow brings three more pets: a
droplet (Rainlit's own little drop) that sends out ripples when it's petted, a
dragon that puffs flames, and a spirit fox with a glowing tail; and things for
the room that glow: starlit, aurora and city wallpapers, cloud and crystal
floors, a magic circle, fairy lights, a neon heart and a neon bolt, an aquarium,
a lava lamp, an arcade machine, and a thunderstorm or the northern lights out
the window (anyone can try them all on in the room). It's all just for fun: nothing nags you, and if you'd rather
not see the pet button at all, Settings > Look hides it. Letting your pet go
(its room's Pet tab, once you've said you're sure) deletes it, and
everything about it; its room stays as you did it up, for the next one.
Visit other people's pets too: their profile card says Visit and its name,
and opens its room as they've done it up, where you can pet it (their friends
and people in a space with them can; how full or happy it is stays theirs).
Feedback
Settings > Feedback sends a bug, an idea or anything else straight to
whoever runs the server (on rainlit.app, the people making Rainlit). With a
bug, a tick box sends diagnostics too: which app and browser, the screen,
the theme and call settings, whether you were in a call, and Rainlit's own
recent errors (never messages); you can read them before sending. The admin
sees it all in the Admin panel (the key button gets a dot for new feedback),
and can reply, which shows under what you sent, or mark it done. Up to 10 a
day each.
Rainlit Glow
rainlit.app is free, and paid for by one person. Glow is how people support
it and keep it that way, for $5 a month or $50 a year (and tips), at
rainlit.app/support (Your profile, Rainlit Glow). What supporters get is
marked with a Glow tag wherever it is, and it's more of what costs money: files up
to 100 MB, 50 GB for them, 1,000 notes, sharper screen sharing in voice
channels (1080p at up to 60 fps, while it fits in what Cloudflare sends for
free), no slower start for a new account, three more pets (and things for their
rooms), homepage extras
(moving backgrounds, effects for visitors, a fortune ball...), five themes with
weather of their own (Sakura, Monsoon, Fireflies, Maple and Aurora), and a badge, a
raindrop that gathers light the longer they support (Drizzle, then Shower,
Downpour, Storm, Monsoon and Lamplight). If they stop, it dims, and keeps its
level. Stripe takes the payments (as the seller, through Link), so Rainlit
never sees a card. Everything else stays free. The Google Play app doesn't
offer it (Play doesn't allow buying things outside it): support on the website
instead.
Conversations
Click a friend to open your conversation with them, like a Discord DM. The ✕
at the top closes it (on a phone, the back arrow).
- Messages stay. Send them any time, even when your friend is offline;
they'll see them next time they open Rainlit. Scroll up for older ones.
- Search: the magnifying glass at the top of a conversation (or Ctrl+F)
looks through it, or in a space, through every channel you can see. A word
finds the words it starts ("pizz" finds pizza), whatever their case or
accents; "words in quotes" are found together. Pick who said it, which
channel, what it has (a link, a picture, a video, a sound, a file or a GIF),
who it mentions, and when; newest, oldest or best match first. Files are
found by their names, GIFs by their titles. Click a result to go to it, however
long ago it was: the messages around it load, and a bar takes you back to
the newest. Only what's saved can be found.
- Unread messages: a yellow number on your friend in the list, and a yellow
"new messages" line above the first one you haven't seen. A soft chime (two
raindrops) plays when a message arrives in a conversation you don't have open.
Turn the sound off in settings. (On a phone it may not play while the app is
in the background.)
- Grouped messages: several in a row from the same person, a few minutes
apart, share one name and time.
- Click sounds: a soft click when you press buttons, friends and menu
items (not while typing). Turn it off in settings.
- Sound style: Rainlit's sounds are raindrops: tuned drops, a little echo,
and deafening sounds like going under water. Settings has Classic too,
the bells Rainlit had before (a doorbell for messages).
- GIFs: press GIF next to the message box to see what's trending or
search, and click one to send it. They play in the conversation (only while
they're on screen, and not at all if your device is set to reduce motion,
then click one to play it). See step 4 to turn this on.
- Custom emoji: a space's owner and admins (and roles with "Manage emoji")
add up to 50 in the space's settings: PNG, GIF (they can move), WebP or JPG.
Everyone in the space can use them anywhere they chat, in a DM too (on Discord
that takes Nitro): type
: and a name, or pick one from the emoji button,
and react with them. A message that's only emoji shows them big.
- Soundboard: in a call or a voice channel, press Sounds and pick one,
and everyone there hears it: Rainlit's own (tada, ba dum tss, sad trombone,
boop and applause) or your spaces' own. A space's owner and admins
(and roles with "Manage soundboard") add up to 24 in its settings, from an
MP3, OGG, WAV, M4A, FLAC or WebM file or a video's sound (up to 10 MB and 5
minutes): drag along its waveform to pick the part to keep (up to 5 seconds),
hear it, and name it; only that part's uploaded. Its members can play them in
any call or voice channel (on Discord that takes Nitro). Each app plays them
through a limiter, so none is louder than about where most things play, and
stops them at 5 seconds. Five in any 5 seconds each (then a moment's wait; each
one stops your last), and "Use the soundboard" is a permission (everyone has
it to start with). Set how loud they are for
you, or turn them off, in settings.
How calls work
- Calling: press the phone button at the top of a conversation. It rings on
every device your friend has Rainlit open on, for up to a minute, with a
little four-note tune, and you hear the same tune (a bit softer) while you
wait. They can join or decline. If they decline or don't answer, you can
ring again.
- The call shows above the conversation, so you can keep chatting and
sending files. If you open another conversation, a bar leads back to it.
Anywhere else in Rainlit, your friend's row in the list is green with
Open, and a panel above your name says who you're with and for how long,
with mute, deafen, camera, screen and leave, and Open to go back.
- The call starts as soon as both of you are in it. The timer at the top
shows how long it's been going.
- If someone's internet cuts out, the other person stays in the call. They
see "Lost connection" with a counter, and the dropped person rejoins
automatically once they're back online, even if that takes several minutes.
If their phone died or the app closed, they open it again and press
Rejoin call, or the call button. Rejoining from a different device works
too.
- Leaving with the Leave button doesn't end the call for the other person.
You can call back and pick up where you left off.
- Someone waiting in your call: while your friend is in your call and you
aren't (the ringing stopped, or you left or dropped out), their row in your
friends list says so, and your conversation with them shows a green bar with
a Join button. It also says if their own connection has dropped.
- Join and leave sounds: a short rising "boop" when your friend joins or
rejoins the call (or when you join them), and a falling one when someone
drops or leaves. Turn them off in settings.
- Server updates don't end calls. While the server restarts, you keep
talking directly; you'll see "Reconnecting to Rainlit" for a few seconds,
and then the call carries on with the same timer, however long it's been
going (the server keeps a note of each call going on). If neither of you
comes back after an update, the call ended when it was last going, and the
conversation says how long it was.
- Nor do blips on the way to the server. Your app's link to the server
can be cut now and then (by something in between, without either end
hearing); the app connects again straight away, and since your voices go
directly between you, the call carries on without a gap.
- Phones asleep don't end calls either. A phone that's been locked a while
freezes the app's page to save battery, even mid-call. The call itself
carries on without it, so as long as your voices still get through, nobody
is taken out of the call (all night, if you both fall asleep in it), even
when the server's updated in the middle of it.
To change the 30 minutes, set RECONNECT_MINUTES (for example 60; see
SELF-HOSTING.md).
During a call
- Mute: the microphone button, or Ctrl+Shift+M on a computer. Your
friend sees a red mic badge on your picture (or next to your name on video)
while you're muted.
- Deafen: the headphones button, or Ctrl+Shift+D. You hear nothing
from the call (your friend, or their screen's sound) and your mic goes quiet
too; your friend sees crossed-out headphones instead of the mic badge.
Undeafening brings your mic back as it was, and pressing the mic button
undeafens you too.
- Push to talk: turn it on in settings. Your mic stays silent until you hold
the talk key (
` to start with; click it in settings to pick another) or
hold the mic button. In a browser the key only works while Rainlit is the
window you're using, so it won't work while you're clicked into a game. The
Windows app fixes that.
- Share screen with sound: in Chrome's sharing window, tick the audio
checkbox so your friend hears videos and games too: Share window audio
when you share one app's window (just that app's sound), Share system
audio for your whole screen, or Share tab audio for a browser tab.
Rainlit's own sound (your friend's voice) is left out, so they don't hear
themselves. This needs Chrome or Edge: Firefox can't include sound in a
screen share at all. In the Windows app, tick Share audio in its own
sharing window instead.
- Share something else without stopping: while you're sharing, Switch
(next to Stop sharing, in a call or a voice channel) picks another window
or screen, and it takes the old one's place straight away: your friends just
see it change. Cancel the picker and the old one carries on.
- See your own stream big: click the small "You" preview of your screen or
camera. It fills the call and your friend moves to the corner; click either
one to swap back.
- See yourself before your camera's on: on a computer, the camera button
first shows your camera, live, with a choice of camera (the one you pick
stays your camera, as in settings); Turn camera on goes live, and Cancel
doesn't. Untick "Show this each time" to go straight on (settings turns it
back on). On a phone it goes straight on; Flip switches cameras.
- Pick a headset or webcam: the settings button. You can also turn your
friend's volume down there, and switch the browser's noise suppression, echo
cancellation and automatic mic volume on or off.
- Test your mic: in settings, under the microphone. Say something: a bar
shows it hearing you for a few seconds, then what it heard plays back (with
the clean-up that's on, as in a call), so you hear yourself as others will. If
it heard nothing, it says so, and why that might be.
A record of your calls
- Save a record of your calls with a friend (from their menu: right-click
them, or press and hold): a page to keep, print or save as a PDF, with every
call (when, how long, who rang, and missed ones), how many and how long
altogether, month by month, the days you talked, how many messages each of
you sent, and the messages themselves if you tick Our messages too. Pick
the days it covers, or leave them empty for all of it. Its calls come from
your conversation (it notes each one, while it's saving), so it works back to
your first call.
- Keep a record of my calls (Your profile, under A record of your calls):
Rainlit keeps, just for you, when each of your calls started and ended and
who rang, even where a conversation isn't saving its messages, and your time
in voice channels and group calls with each person. Records of time with a
friend include it. It also keeps your own side when something goes without
you asking: your messages and files with a friend who deletes their account
(theirs go), and yours in a channel or space someone deletes: they're in Your
files, and a record of your calls with them (from the list in that panel).
Delete it there any time. It's in Download my data too (calls.json, and
what it kept in messages.json).
What it can't do yet
- Sounds (ringing, message chimes) only start working after you've clicked
somewhere in Rainlit once since opening it. Browsers require that.
- No notifications while Rainlit is closed, except in the Windows app (while
it's in the tray) and the Android app with ntfy
installed (see mobile/README.md).
- Messages aren't end-to-end encrypted yet, so whoever runs the server could
read the ones that are kept (rainlit.app doesn't; see its privacy policy).
- Phones can't share their screen, even in the Android app (yet).
- In a phone's browser, the call may pause if you switch apps or turn the screen
off. The Android app keeps it going.
- Call history is saved on each device, not on the server.
- A file sent straight through a call (saving off) restarts from the beginning
if the connection drops while it's on its way, and shares the connection with
the call, so on a slow connection the call can get choppier until it's done.
How Rainlit is made
Rainlit is made by one person, who decides what it does, how it looks and
feels and what it won't do, and answers for it. Most of
the code is written by Claude, Anthropic's AI, working from those decisions:
each change it wrote says so on GitHub ("Co-Authored-By: Claude"). That's how
one person can make something this size, and it's why the rest of this
section matters:
- Changes are tried before they go out, on a brand-new server with its own
data, in a real browser, the way people use Rainlit: messages, files, calls,
homepages, pets, reports.
- Code typed where words go stays words. Everything people write (messages,
names, statuses, spaces, homepages, reports) is shown as text, never made
part of the page, and the page only runs Rainlit's own scripts (its Content
Security Policy), so a slip can't let anyone run code in someone else's app.
Files that aren't pictures, videos or sound only ever download.
- Found a hole? See SECURITY.md: it's fixed first.
- It keeps as little as it can: no ID checks, no IP addresses, and not
your birthday (only, if you're under 18, the day you turn 18; and the month
and day of one you add to your profile to have it celebrated). You can
download everything that's yours (Your profile, then Download your data), or
delete it, any time.
- It's all here to check: the whole of Rainlit is free software (below).
How it works
server.js serves the app and the API for accounts, profiles, friends,
invites and conversations. lib/db.js keeps them in a SQLite database (built
into Node) in the data folder, and lib/dms.js keeps conversations' files
in its files folder. Passwords are stored as scrypt hashes, and sign-ins as
hashed tokens in a cookie scripts can't read. Files are only ever served to
the two people in the conversation, and only pictures, videos and audio are
shown in place; everything else only downloads.
lib/realtime.js holds one WebSocket per open tab: who's online, new
messages, ringing, and the setup messages that let two browsers connect for a
call. It keeps track of each call (who's connected, who dropped, the event
log) and prints when calls start and end, which you can see in Render's
Logs tab.
public/app.js uses WebRTC, which is built into every modern browser, for the
actual audio, video and screen sharing, and a WebRTC data channel on the same
connection for files sent during a call. Microphone echo cancellation and
noise suppression come from the browser.
public/sw.js and public/manifest.webmanifest make it installable on phones.
lib/supporters.js is rainlit.app's supporter plan: Stripe's checkouts and
webhook, the badge's levels, and the perks, which lib/storage.js,
lib/homepages.js, lib/abuse.js and the voice limits in server.js ask
it about.
desktop/ is the Windows app (Electron). It opens the website in its own
window and adds the things a browser can't do; the page uses them through
window.rainlitDesktop when it's there.
mobile/ is the Android app (Capacitor): the website in its own window, plus
calls that keep going, notifications, and saving files. The page uses it
through Capacitor's bridge when it's there.
- Both apps open rainlit.app unless you pick another Rainlit server
(
desktop/servers.js, ServerChoice.java); servers answer
/api/server-info so the apps can tell they've found one.
Dockerfile, docker-compose.yml, Caddyfile and render.yaml are for
running your own (see SELF-HOSTING.md).
brand/ holds the logo and icon source files.
License
Rainlit is free software under the GNU AGPL v3 (or any later version). You can
run it, change it and share it. If you run a changed version for other people, share your
changes with them too: set SOURCE_URL to where your version's code is, and Settings
links there. The emoji picker in public/vendor/emoji-picker keeps its own license
(Apache 2.0).
The license covers the code, not the Rainlit name and drop logo. Running Rainlit and
calling it Rainlit is fine; a changed version you share with others should go by its own
name, so nobody mistakes one for the other.
Found a security problem? Please email [email protected] rather than opening a public
issue (see SECURITY.md).