Set up Joplin with AWS S3 for a secure, affordable note-taking system that syncs across all your devices (macOS, Windows, iOS, Android). This step-by-step guide shows you exactly how to configure everything without the magic—all the steps included.
For some time I wanted to have a central place where I can store my notes. The main problem was, that I want to have it as cheap as possible, AND I want it to be available on my phone (iOS), Macbook (macOS) and Windows (my working laptop).
I wanted a Markdown-based writing setup that:
- Works on macOS, Windows, iOS, Android
- Syncs through infrastructure I control
- Is cheap (almost free)
- Can later be automated into a Hugo blog
This guide shows you exactly how to set up Joplin + AWS S3 sync,
including how to properly test everything using the AWS CLI.
No magic. No skipped steps.
Step 1 — Install Joplin
Desktop
- Go to https://joplinapp.org
- Click Download
- Install the desktop version for your OS
- Open Joplin
(Optional: Install on iOS or Android later.)
Step 2 — Create an S3 Bucket
- Go to https://console.aws.amazon.com
- Search for S3
- Click Create bucket
Configure:
- Bucket name:
joplin-notes-yourname - Region: Choose one near you (example:
eu-central-1) - Block Public Access: Leave enabled
- Bucket Versioning: Disable
- Default encryption: Enable (AES-256)
Click Create bucket.
Step 3 — Create an IAM User
- Search for IAM in the AWS Console
- Click Users
- Click Create user
- Username:
joplin-sync-user
Click Next.
Attach Permissions
Click Create policy → switch to JSON tab → paste:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::joplin-notes-yourname",
"arn:aws:s3:::joplin-notes-yourname/*"
]
}
]
}
⚠ Replace joplin-notes-yourname with your actual bucket name.
Create the policy and attach it to the user.
Step 4 — Create Access Keys
- Open the created user
- Go to Security credentials
- Click Create access key
- Choose: Application running outside AWS
Copy:
- Access Key ID
- Secret Access Key
You will not see the secret again.
Step 5 — Install AWS CLI
Check if installed:
aws --version
If not installed (macOS):
brew install awscli
Or download from:
https://aws.amazon.com/cli/
Step 6 — Configure AWS CLI
aws configure
Enter:
- AWS Access Key ID
- AWS Secret Access Key
- Default region (example:
eu-central-1) - Output format:
json
Step 7 — Test S3 Access
List bucket
aws s3 ls s3://joplin-notes-yourname
Upload test file
echo "test" > test.txt
aws s3 cp test.txt s3://joplin-notes-yourname/test.txt
Download test file
aws s3 cp s3://joplin-notes-yourname/test.txt downloaded.txt
cat downloaded.txt
Delete test file
aws s3 rm s3://joplin-notes-yourname/test.txt
If all commands work, your AWS setup is correct.
Only then continue.
Step 8 — Configure Joplin
Open Joplin → Settings → Synchronisation
Set:
- Target: Amazon S3
- Bucket:
joplin-notes-yourname - Region:
eu-central-1 - Access Key: your key
- Secret Key: your secret
- Endpoint:
https://s3.eu-central-1.amazonaws.com - Force path style: Enable
Click Check synchronisation configuration.
If OK → Click Synchronise.
Step 9 — Enable Encryption (Recommended)
Go to:
Settings → Encryption → Enable
Now your notes are encrypted before being uploaded to S3.
Conclusion
You now have:
- Markdown-based notes
- AWS-controlled sync
- IAM-secured access
- A foundation for Hugo automation