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

  1. Go to https://joplinapp.org
  2. Click Download
  3. Install the desktop version for your OS
  4. Open Joplin

(Optional: Install on iOS or Android later.)


Step 2 — Create an S3 Bucket

  1. Go to https://console.aws.amazon.com
  2. Search for S3
  3. 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

  1. Search for IAM in the AWS Console
  2. Click Users
  3. Click Create user
  4. 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

  1. Open the created user
  2. Go to Security credentials
  3. Click Create access key
  4. 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.


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