Quickstart Guide

Get started with SPXP

From zero to a working SPXP profile in 5 minutes. No signup, no account, no special software.

1

See it live

SPXP profiles are just JSON files served over HTTPS. No magic โ€” just the web. Try it right now:

curl https://spxp.org/spxp
Response
{
        "ver": "0.3",
        "name": "SPXP.org",
        "shortInfo": "Social Profile Exchange Protocol",
        "about": "A protocol for a decentralised social network, focusing on privacy, security and individual sovereignty.",
        "website": "https://spxp.org",
        "profilePhoto": "spxp-profile-logo.png",
        "postsEndpoint": "spxp-posts"
    }

That's it. A social profile is a JSON file served over HTTPS. You can open this URL in your browser right now: https://spxp.org/spxp

Notice the postsEndpoint field? That links to a time series of posts โ€” also just JSON:

curl https://spxp.org/spxp-posts
Response (excerpt)
{
        "data": [
            {
                "seqts": "2024-11-01T09:00:00.000",
                "type": "text",
                "message": "Welcome to SPXP.org! This profile demonstrates the protocol."
            },
            {
                "seqts": "2024-10-15T14:30:00.000",
                "type": "web",
                "message": "Check out the full specification",
                "link": "https://github.com/spxp/spxp-specs"
            }
        ],
        "more": true
    }

The postsEndpoint links to a time-ordered list of posts. Clients paginate through them with the more flag. Every piece of data is just a standard HTTP request away.

2

Browse with an app

HeyFolks is the official SPXP client for iOS and Android. It browses profiles, displays posts, and manages your social graph โ€” all without a central server.

HeyFolks โ€“ Following Profiles

Following list

HeyFolks โ€“ Sample Posts

Posts feed

HeyFolks โ€“ Sample Friends

Friends list

The app suggests profiles to follow from a curated directory. Following is client-side only โ€” profiles you follow won't know about it. No notifications, no follower counts, no social pressure.

๐Ÿ’ก

Developer tip: Enable "Profile developer controls" in HeyFolks settings. This adds a manual Refresh button so you can immediately see changes during development without waiting for the cache to expire.

3

Explore the Bridge

SPXP Bridge converts profiles from other protocols (ActivityPub, AT Protocol, Nostr) into SPXP format on the fly. This means you can follow any Mastodon, Bluesky, or Nostr account from within HeyFolks.

Bridge URI patterns
# ActivityPub (Mastodon and compatible)
    https://bridge.spxp.org/ap/@user@instance.social
    
    # AT Protocol (Bluesky)
    https://bridge.spxp.org/at/@user.bsky.social
    
    # Nostr
    https://bridge.spxp.org/nostr/<public-key>

For example, to follow the EFF's Mastodon account in HeyFolks, add this profile URI:

EFF on Mastodon via Bridge
https://bridge.spxp.org/ap/@eff@mastodon.social

Paste that URL into HeyFolks' "Add profile" dialog and you'll see EFF's posts in your SPXP feed. The bridge page has more details on supported features and limitations.

4

Create your own profile

Ready to publish your own profile? You just need a text editor and a web server. Let's go.

1

Create a minimal profile file

This is the minimum valid SPXP profile. Save it as profile.json.

profile.json
{
        "ver": "0.3",
        "name": "Jane Doe",
        "shortInfo": "Developer, builder of things"
    }
2

Upload it to any web server

Any static hosting will work: GitHub Pages, Netlify, Vercel, your own VPS โ€” whatever you have. Upload the file and note the URL.

Upload to your server
# Upload to your server
    scp profile.json you@yourserver.com:/var/www/spxp/
    
    # Or use GitHub Pages, Netlify, any static host
    # Your profile is now at:
    # https://yourserver.com/spxp/profile.json
3

Open it in HeyFolks

In the HeyFolks app, tap the blue "+" button in the profiles list, enter your profile URL, and your profile appears โ€” as long as the JSON is valid.

โš ๏ธ

CORS headers: Make sure your server sends proper Access-Control-Allow-Origin: * headers if you want browser-based clients to access your profile. Most static hosts do this automatically; for nginx or Apache, you may need to configure it explicitly.

5

Add posts

A profile without posts is pretty quiet. Let's add some content.

1

Create a posts file

Save this as posts.json. The seqts is a sequence timestamp (ISO 8601) used for ordering; type defines the post format (text, web, image, โ€ฆ); more: false means there are no older posts to paginate.

posts.json
{
        "data": [
            {
                "seqts": "2026-04-01T12:00:00.000",
                "type": "text",
                "message": "Hello, world! This is my first SPXP post."
            }
        ],
        "more": false
    }
2

Reference it in your profile

Update profile.json to add the postsEndpoint. This can be a relative URL (resolved against the profile URL) or an absolute URL.

profile.json (updated)
{
        "ver": "0.3",
        "name": "Jane Doe",
        "shortInfo": "Developer, builder of things",
        "postsEndpoint": "posts.json"
    }
3

Upload both files, refresh in HeyFolks

Upload both profile.json and posts.json to the same directory on your server. Hit Refresh in HeyFolks (remember to enable developer controls) and you'll see your first post. ๐Ÿš€

6

Use a hosting provider

Not into self-hosting? SPXP hosting providers take care of the server, signing, and key management โ€” while keeping your private key on your device.

Set up via HeyFolks

  1. 1. Open HeyFolks and tap the rightmost tab โ†’ "Setup Profile"
  2. 2. Choose a hosting provider such as SPXP.space
  3. 3. The app generates your keypair locally โ€” your private key never leaves your device
  4. 4. Your public key is published in your profile. All your posts are signed before uploading.
๐Ÿ”‘

You're not locked in

Your identity is your keypair, not your hosting provider. You can migrate to a different provider โ€” or your own server โ€” at any time. Because your posts are cryptographically signed with your private key, they remain verifiably yours even after moving. Followers just need to update your profile URL.

๐ŸŽฌ

See it in action

Watch this demo video showing a live profile migration between hosting providers. The signatures prove authenticity throughout โ€” no content is lost or invalidated.

Migration demo on YouTube
7

Go deeper

You've got the basics. Here's where to go next.

Questions? Something missing?

Open an issue on GitHub โ†’