Browse by type
<img alt="be-BOP" src="https://github.com/be-BOP-io-SA/be-BOP/raw/main/src/lib/assets/bebop-light.svg" width="140">
The ethical sales toolbox.
Libre and open-source monetization, from e-commerce to Point of Sale — subscriptions, peerfunding, ticketing, booking, restaurant UI, and many payment methods, Bitcoin and Lightning included.
No vendor lock-in, no paywall, no subscription, no sales commission. Ever.
Four ways to run be-BOP.
One command on a fresh server:
curl -sfSL "https://be-bop.io/wizard/install.sh" -o be-bop-wizard.sh \
&& bash ./be-bop-wizard.sh -- --domain "your-domain.com" --email "you@example.com"
It installs and configures everything — MongoDB, Garage for object storage, web server and TLS certificate — and hands you a working shop. You do not need to clone this repository or install Node.
You need a VPS with 2 GB of RAM and 20 GB of storage, a domain name pointing at it, and an email address for the TLS certificate. Technical level — low: point a domain, connect over SSH, run one command.
📖 Step-by-step guide with screenshots →
Hosted by be-BOP.io, nothing to install or maintain:
Stay tuned for new markets opening!
You need to comply with the service's terms of use, an email address, and a payment mean for the monthly subscription. Technical level — none.
To try it first, spin up a free 4-hour sandbox — no account, no card.
docker compose up brings up be-BOP with a MongoDB and an S3 storage. Good for
local development, and for a single-host deployment you manage yourself.
You need Docker, and the environment variables from Configuration. See Docker Compose. Technical level — high: you own the containers, the backups and the reverse proxy.
Bring your own MongoDB replica set and S3 storage, and run be-BOP with Node.
You need everything listed in Requirements. Technical level — expert.
| E-commerce | Physical and digital products, stock, variations, delivery zones |
| Point of Sale | In-person checkout, touchscreen interface, restaurant tabs, Z-tickets |
| Subscriptions | Recurring memberships and plans, with reminders |
| Peerfunding | Fund goals and projects, with progress widgets and leaderboards |
| Ticketing & booking | Sell, schedule and validate tickets; calendar-based bookings |
| Donations & pay-what-you-want | Customer-set pricing, deposits, partial payments |
Payments.
phoenixd. Also through BTCPay Server, Swiss Bitcoin Pay or Blink.Also built in. A CMS with embeddable widgets, a Nostr bot, multi-currency pricing, VAT profiles per country, invoicing, and an admin back-office available in 7 languages.
The back-office documentation lives in docs/, one folder per
language.
| Start here | Initialize be-BOP — first steps after installation |
| Full walkthrough | Step-by-step guide |
| Point of Sale | PoS options |
| CMS | Required CMS pages · Customise cart & checkout |
| Team & access | Back-office access |
| Delivery | Delivery management |
| Questions | FAQ |
Other languages: 🇫🇷 Français (the most complete set, 62 documents, including VAT configuration, reporting, stock, subscriptions and the be-BOP manifesto) · 🇩🇪 Deutsch · 🇪🇸 Español · 🇮🇹 Italiano · 🇳🇱 Nederlands · 🇵🇹 Português
Everything below is for contributors and for operators who prefer to deploy by hand rather than with the wizard.
corepack enablesudo corepack enable)git lfs installPUT calls automatically.Optional, depending on what you sell and how you notify customers:
nsec (NOSTR_PRIVATE_KEY) to notify over Nostr insteadphoenixd gives you Lightning and Bitcoin nodeless, straight from the admin UIpnpm install
pnpm dev
be-BOP still needs a MongoDB replica set and an S3-compatible object storage.
Pick one of the two setups below, add the variables to a .env.local file, then
run pnpm dev.
Use MongoDB Atlas for the database and
a hosted S3 (AWS, Scaleway…) for the object storage, then put their credentials
in .env.local. See Configuration for the variable names.
Runs MongoDB and an S3 storage locally. Add an S3 access key and secret to .env.local
if they are not there yet:
echo "S3_KEY_ID=$(openssl rand -base64 63 | tr -d '\n')" >> .env.local
echo "S3_KEY_SECRET=$(openssl rand -base64 63 | tr -d '\n')" >> .env.local
Then start the containers:
docker compose -f docker-compose.dev.yml -f docker-compose.override.yml up -d
Add a .env.local (or .env.{development,test,production}.local) file for
secrets that should not be committed to git; these override the values in
.env.
| Variable | Description |
|---|---|
MONGODB_URL |
The connection URL to the MongoDB replica set |
MONGODB_DB |
The DB name, defaulting to bebop |
MONGODB_DIRECT_CONNECTION |
Set to true to connect directly to a single node rather than discovering the replica set |
ORIGIN |
The URL where be-BOP will be deployed, e.g. https://bebop.example.com |
NOSTR_PRIVATE_KEY |
Private key (nsec…) used to send Nostr notifications |
LINK_PRELOAD_HEADERS |
Set to true to enable the Link rel=preload header (explanation). If you do, you may need to raise nginx's proxy_buffer_size 16k (explanation) |
BODY_SIZE_LIMIT |
Maximum upload size in bytes, e.g. 20000000 for 20 MB. Not needed for normal usage |
PORT |
Port to listen on, defaults to 3000 |
be-BOP automatically configures the S3 bucket to accept CORS PUT calls.
| Variable | Description |
|---|---|
S3_BUCKET |
The bucket name for the S3-compatible object storage |
S3_ENDPOINT_URL |
The endpoint, e.g. http://s3.fr-par.scw.cloud or http://s3-website.us-east-1.amazonaws.com |
PUBLIC_S3_ENDPOINT_URL |
Public-facing endpoint used to build browser-visible asset URLs |
S3_REGION |
The region of the bucket |
S3_KEY_ID |
The access key ID |
S3_KEY_SECRET |
The access key secret |
Order notifications can go out over email, over Nostr, or both. For email, set
all four SMTP_* variables; for Nostr, set NOSTR_PRIVATE_KEY in
Core.
| Variable | Description |
|---|---|
SMTP_HOST |
SMTP server host — set all four SMTP_* variables to enable email notifications |
SMTP_PORT |
SMTP server port |
SMTP_USER |
SMTP username |
SMTP_PASSWORD |
SMTP password |
SMTP_FROM |
Optional sender address, def |
browse all types & interfaces →
$ claude mcp add be-BOP \
-- python -m otcore.mcp_server <graph>