raksha
A small terminal experience.
pip install raksha-cli
Then:
raksha
That's the whole thing. It runs in the terminal, works offline, and takes a few minutes to read through.
The package installs as
raksha-clibecauserakshawas already taken on PyPI by an unrelated project. The command you actually type israksha.
What it is
A Python package that opens a quiet, animated letter in the terminal: a boot sequence, a menu, a few scenes to wander through, and one question at the end. There is also a way to write a message back.
It is a standard console application. It installs like any other package,
runs like any other command, and uninstalls with pip uninstall raksha-cli.
Requirements
- Python 3.9 or newer
- Any terminal: Windows PowerShell, Windows Terminal, CMD, macOS Terminal, iTerm2, or any Linux terminal
Zero runtime dependencies. Everything is standard library, so the install is instant and there is nothing to audit.
Usage
raksha # the full experience
python -m raksha # identical, if the command isn't on PATH
raksha --skip-intro # straight to the menu
raksha --fast # no animation delays
raksha --version
Environment knobs:
| Variable | Effect |
|---|---|
RAKSHA_SPEED |
Delay multiplier. 0.5 is twice as fast, 2 is slower. |
RAKSHA_FAST |
Set to anything to remove all delays. |
NO_COLOR |
Standard opt-out; renders without colour. |
RAKSHA_ENDPOINT |
Points the message feature at a different backend. |
Ctrl+C exits gracefully at any point.
Customising it
Every personal word lives in exactly one file: src/raksha/messages.py.
Nothing personal is scattered through the code, so you can edit that one file
without reading any of the rest.
What's in there, in order:
| Section | What it controls |
|---|---|
NAME, TAGLINE |
The name on every screen. {name} anywhere expands to it. |
BOOT_* |
The opening sequence and the reveal. |
INTRO_LINES |
The lines shown once after boot. |
MAIN_MESSAGE |
Option 1 — the letter itself. |
REASONS |
Option 2 — numbered automatically; add as many as you like. |
LOVE_EXE_* |
Option 3 — the fake diagnostic. |
MEMORIES |
Option 4 — placeholders; replace with your own. |
RANDOM_THOUGHTS |
Option 5 — the random pool. |
QUESTION, ANSWER_* |
Option 6 — the question and every reply. |
SEND_* |
Option 7 — the message-back screens and privacy notice. |
SECRET_* |
The hidden screen, and what triggers it. |
EXIT_* |
The goodbye. |
MENU_ITEMS |
Menu labels and order. |
Formatting rules, which the test suite enforces:
- A block is a list of lines.
""is a deliberate pause, not a blank string. - Keep lines under ~46 characters so they stay centred and never wrap.
{name}is the only placeholder.
Change the name in one place:
NAME = "Raksha"
Add a reason — numbering is automatic:
REASONS = [
["Because talking to you never feels ordinary."],
["Because of the way you", "explain things you love."],
]
Replace the placeholder memories with real ones:
MEMORIES = [
"That conversation I still remember.",
"That day we laughed for no reason.",
]
Change the question:
QUESTION = [
"Would you like to be",
"a little more than",
"just a beautiful part",
"of my life?",
]
After editing, check your work:
pip install -e ".[dev]"
pytest # catches unbalanced braces, over-long lines, dead menu entries
raksha --fast # read it end to end in a few seconds
Local development
git clone https://github.com/ramalingamthangamani/Cmd_name.git
cd Cmd_name
pip install -e ".[dev]"
raksha
Run the tests:
pytest # the CLI
cd backend && pytest # the message relay
Build a distribution:
pip install build
python -m build # writes dist/*.whl and dist/*.tar.gz
pip install dist/raksha_cli-1.0.0-py3-none-any.whl
Publish:
pip install twine
twine upload dist/*
The message feature
Option 7 lets her write a message and send it to you by email.
The important constraint: this package is public, so it contains no credentials. It knows one public HTTPS URL and nothing else. The email provider's API key lives only in the backend's environment variables.
raksha CLI ──HTTPS──▶ your backend ──API──▶ email provider ──▶ your inbox
(public, (holds the
no secrets) secret)
What is sent: the message she typed, and nothing else. No files, contacts, location, system information, credentials, or identifiers. No analytics, no tracking, no logging to disk. Every other feature works with the network unplugged, and a privacy notice is shown before anything leaves the machine.
If the backend can't be reached, the CLI says the message was not delivered. It only claims success on a confirmed 2xx response.
Running the backend
See backend/README.md for the full deployment guide.
The short version:
cd backend
pip install -r requirements.txt
cp .env.example .env # then fill in your real values
uvicorn app.main:app --reload
Then point the CLI at it while testing:
RAKSHA_ENDPOINT=http://127.0.0.1:8000/api/message raksha
Before publishing, set the deployed URL in src/raksha/api.py:
DEFAULT_ENDPOINT = "https://your-backend.example.com/api/message"
Never commit
.env is in .gitignore and must stay there. .env.example holds the shape
of the configuration, never the values.
Privacy
- No telemetry, no analytics, no tracking, no identifiers.
- Nothing is written to disk. No config file, no history, no cache.
- No network access at all unless she chooses to send a message and confirms.
- Uninstalling removes everything:
pip uninstall raksha-cli.
License
MIT. See LICENSE.
Metadata
Release files for raksha-cli 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| raksha_cli-1.0.0.tar.gz | 26.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| raksha_cli-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 51.2 kB
Release files / raksha_cli-1.0.0.tar.gz
| Download URL | raksha_cli-1.0.0.tar.gz |
|---|---|
| Size | 26.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
68c54b7f007587be3d510a29dcd5c993d6d09507b04613cd3494f240bf72a4ce
|
|
BLAKE2b-256 checksum How to use checksums |
f023e438bd61d52503be1d3d3484807b9b6fc6f63c23ef254017c38368294437
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / raksha_cli-1.0.0-py3-none-any.whl
| Download URL | raksha_cli-1.0.0-py3-none-any.whl |
|---|---|
| Size | 24.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
06a90689b58a1dc3aea68c16370ef1d1b24631d624bb9fbbf13be8abafed95f0
|
|
BLAKE2b-256 checksum How to use checksums |
70ddb3f09df01af305e9e6983485ec8cc5681fc93a7c60f0893217653b9e810a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency log