Host a Library
Run Worship Assist on your own cloud storage instead of a shared server.
Worship Assist can run on your own cloud storage instead of a shared server. You create a private storage bucket, hand the app one access key, and the app does the rest — you build your song library inside the app and share it with your team by link. Nothing is public; you own the storage and the content.
The app speaks the S3 API, so it works with Amazon S3 and Backblaze B2 (and other S3-compatible stores). This guide covers S3 and B2 in full.
This is the source for the published setup page the app links to: https://pmarch502.github.io/good-faith-studio/worship-assist/host/
Get Worship Assist for Mac
Worship Assist runs on the Mac just as fully as on an iPhone or iPad — same songs, same features, and a big screen makes the timeline and mixer far easier to work with. Plenty of people practise on a Mac and never host anything.
It's also the answer if you are setting up your team's library: building a song means picking audio files and converting them, which the phone and tablet app doesn't do, so that part happens here.
Free · macOS 10.15 or later · 28 MB
Installing it
- Click Download for Mac above. The file saves to your Downloads folder.
- Double-click Worship-Assist.dmg. A window opens showing the Worship Assist icon next to your Applications folder.
- Drag the Worship Assist icon onto the Applications folder, then
close that window. (Don't run the app from there — that window is just the
installer, and you can throw the
.dmgaway afterwards.) - Open your Applications folder and double-click Worship Assist. It opens straight away: Apple has checked and approved this app, so you won't get a "damaged" or "unidentified developer" warning.
- You'll land on a screen called Connect a library. That's
expected — the app starts empty and fills up with your own team's music. What
you do next depends on why you came:
- Someone sent you a library link? Paste it in and choose Connect. That's you finished — start playing. The rest of this page is setup you don't need.
- Creating the library for your team? Choose Host a library and carry on below.
The big picture
- Create a private bucket — on Amazon S3 or Backblaze B2.
- Create one access key for that bucket (full access).
- In the app: Connect a library → Host a library, enter your bucket + key, and Connect. You're now the host.
- Add your songs in the app — Add songs → Publish. You never upload files by hand; the app converts and stores them for you.
- Share your library — the app gives you two links from that one key. Send the User link to your team.
Only steps 1–2 happen outside the app, and only once.
One key, two links — how access works
You make a single access key. When you enter it in the app, the app produces two shareable links from it:
- Host link — can do everything: publish songs, manage the library, plus all the arranging and mixing. Keep this for yourself (and any co-hosts).
- User link — everything except publishing songs and managing the library. This is the one you give team members. They can play, and build arrangements, mute sets, set lists, and mashups — they just can't upload or manage the songs.
Both links point at the same bucket with the same key. The difference is enforced by the app — a User link simply doesn't show the publish/manage tools.
Treat the links like passwords. The access key is carried inside the link (lightly scrambled, not encrypted), so anyone you send a link to effectively holds the key. Share links only within your team. This is the right level of protection for a trusted group; it isn't meant for posting a link publicly. Two good habits:
- Turn on bucket versioning (below) so any accidental change or deletion is recoverable.
- If a link ever leaks outside your team, delete the key and create a new one, then re-enter it in the app — you'll get fresh links and the old ones stop working.
What the app will ask for
When you connect, the app asks for these (you get them from the provider setup below):
| Field | What it is |
|---|---|
| Provider | Amazon S3 or Backblaze B2 (pick from the list) |
| Region | your bucket's region code — the app builds the endpoint from it |
| Bucket | your bucket name |
| Access key ID | the public half of your key |
| Secret access key | the private half — shown once, so save it |
| Library name (optional) | a friendly label, e.g. "Grace Worship" |
| Folder / prefix (optional) | leave blank unless you want the library under a subfolder |
Amazon S3
1. Create the bucket
- S3 console → Create bucket.
- Bucket name: globally unique (e.g.
grace-worship-library). - Region: pick one near your team and note its code (e.g.
us-east-2). - Block Public Access: leave ON (fully blocked). The app uses your key, not public access.
- Create.
2. Turn on versioning (your safety net)
Bucket → Properties → Bucket Versioning → Edit → Enable → Save. Now every overwrite and delete is recoverable.
3. Create one access key
- IAM console → Users → Create user (e.g.
worship-app, no console sign-in needed). - Permissions → Attach policies directly → Create inline policy → JSON, and paste the policy below (replace
grace-worship-librarywith your bucket name). - Finish creating the user, then open it → Security credentials → Create access key → Application running outside AWS → copy the Access key ID and secret now (the secret is shown only once).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListTheLibrary",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::grace-worship-library"
},
{
"Sid": "ReadWriteObjects",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": "arn:aws:s3:::grace-worship-library/*"
}
]
}
(Using a prefix? Change the second Resource to
arn:aws:s3:::grace-worship-library/your-prefix/*.)
4. Values for the app
| Field | Value |
|---|---|
| Provider | Amazon S3 |
| Region | your bucket's region (e.g. us-east-2) |
| Bucket | your bucket name |
| Access key ID / Secret | from step 3 |
Backblaze B2
B2 exposes an S3-compatible API, so the same app works. The differences: B2's console, and it keeps file versions by default (no versioning switch to flip).
1. Create the bucket
- B2 console → Buckets → Create a Bucket.
- Bucket unique name (e.g.
grace-worship-library). - Files in Bucket are: Private.
- Create.
2. Find the endpoint + region
On the bucket's page, B2 shows an Endpoint like
s3.us-west-004.backblazeb2.com. The region is the middle
segment — here, us-west-004. That's what the app wants.
3. Create one application key
- App Keys → Add a New Application Key.
- Name it (e.g.
worship-app). - Allow access to Bucket: restrict it to your bucket.
- Type of Access: Read and Write (this includes delete).
- Create — B2 shows the keyID and applicationKey once. Copy both.
4. Values for the app
| Field | Value |
|---|---|
| Provider | Backblaze B2 |
| Region | the endpoint's middle segment (e.g. us-west-004) |
| Bucket | your bucket name |
| Access key ID | the B2 keyID |
| Secret access key | the B2 applicationKey |
B2's free tier includes 10 GB of storage — enough to try a few songs, not a full library.
In the app (once you have the values)
Connect as host
- Open Worship Assist. On Connect a library, tap Host a library.
- Pick your Provider, then enter Region, Bucket, Access key ID, Secret (the app fills in the endpoint).
- Your Host and User links appear. Tap Connect to this library — you're now hosting.
Add your songs
Use Add songs → Publish in the app (host only, on a computer). Pick your stems; the app converts and uploads them into your bucket. You never touch storage folders by hand.
Invite your team
On the Host a library screen, copy the User link and send it to your team (text, email, group chat). Each person pastes it into their own Connect a library screen — and they're in, with the play and arranging tools but not publishing. Keep the Host link for yourself or a co-host.
Other S3-compatible providers
The app works with any S3-compatible object store. In the app, choose Other (S3-compatible) and supply the endpoint + region yourself. The setup pattern is always the same: a private bucket + one full-access key scoped to it.
| Provider | Endpoint pattern | Region example |
|---|---|---|
| Cloudflare R2 | <account-id>.r2.cloudflarestorage.com | auto |
| Wasabi | s3.<region>.wasabisys.com | us-east-1 |
| DigitalOcean Spaces | <region>.digitaloceanspaces.com | nyc3 |
| MinIO (self-hosted) | your server host | often us-east-1 |
(Amazon S3 and Backblaze B2 are the two we've set up and tested.)
Checklist
- ☐ Bucket created, private
- ☐ Versioning on (S3) / it's the default (B2)
- ☐ One full-access key created; secret saved
- ☐ Connected in the app as host
- ☐ Songs added via Add songs → Publish
- ☐ User link shared with the team; Host link kept for yourself