Your links, badges, and identity - powered by the Fediverse.
The open-source, federated alternative to Linktree.
FediProfile is a free, privacy-respecting link-in-bio tool built on ActivityPub. Your profile page is itself a first-class Fediverse actor — people on Mastodon, Pleroma, Misskey, and any other ActivityPub platform can discover and interact with it directly.
It's designed for two audiences:
Newcomers — A clean, fast link-in-bio with no trackers, no ads, and no account lock-in. It also serves as a gateway into the Fediverse: your profile link is an ActivityPub actor, encouraging exploration of open platforms.
Fediverse power users — If you juggle multiple accounts (Mastodon, Pixelfed, Loops, a federated blog…), FediProfile gives you a single persona to share. It doesn't post on its own, but it automatically boosts content from your other accounts and has its own ActivityPub inbox — including the ability to receive and display verifiable badges issued through BadgeFed.
- Unlimited Links — Add as many links as you want, organize them your way.
- ActivityPub Native — Your profile is discoverable and followable from any Fediverse instance.
- Badge Collection — Receive and showcase verifiable badges from issuers across the Fediverse via BadgeFed.
- Login with Mastodon — No new password required. Authenticate with your existing Mastodon account from any instance.
- Auto-Boost & Relay — Consolidate your Fediverse presence by automatically boosting posts from your other accounts.
- Self-Hostable — Run your own instance with full control over your data.
- No Tracking — Zero analytics sold, zero ads, zero corporate surveillance.
- Sign in with Mastodon — Enter your instance domain and authorize FediProfile.
- Pick your username — Choose a short, memorable slug. Your profile goes live instantly.
- Add links & badges — Drop in your links. Badges arrive automatically from issuers across the Fediverse.
Choose one of the following ways to start FediProfile.
If you want admin access, set these environment variables before starting the app:
export AdminAuthentication__MastodonUser=mapache
export AdminAuthentication__MastodonDomain=hachyderm.ioAfter signing in with that Mastodon account, the hidden admin page is available at /admin/root.
Use this if you want to run FediProfile without building from source.
Prerequisites:
- A Mastodon account (on any instance) for authentication
Download the latest Windows or Linux release from:
https://github.com/tryvocalcat/fediprofile/releases/
Then extract the archive and run the app.
Windows:
Expand-Archive .\fediprofile-windows.zip .\fediprofile-windows
cd .\fediprofile-windows
.\FediProfile.exeLinux:
tar -xzf fediprofile-linux.tar.gz
cd fediprofile-linux
chmod +x ./FediProfile
./FediProfileThe precompiled app listens on http://localhost:5000 by default unless you set ASPNETCORE_URLS.
Use this if you want to develop locally or build the app yourself.
Prerequisites:
- .NET 9.0 SDK
- A Mastodon account (on any instance) for authentication
git clone https://github.com/tryvocalcat/fediprofile.git
cd fediprofile/src/FediProfile
dotnet runWhen started with dotnet run, the app uses http://localhost:5099 by default.
Use this if you want an isolated deployment with persistent data and generated profile files.
Prerequisites:
- Docker
- A local
appsettings.jsonfile based onsrc/FediProfile/appsettings.json.example
docker run -d -p 8080:8080 --name fediprofile \
-v $(pwd)/fediprofile/data:/app/App_Data \
-v $(pwd)/fediprofile/appsettings.json:/app/appsettings.json \
-v $(pwd)/fediprofile/uploads:/app/wwwroot/uploads \
-e DB_DATA="/app/data" \
-e ASPNETCORE_URLS="http://+:8080" \
ghcr.io/tryvocalcat/fediprofile:latestThis publishes FediProfile at http://localhost:8080, stores SQLite databases under /app/data, and persists generated profile pages under /app/wwwroot/profiles.
Edit appsettings.json to configure your instance:
{
"AdminAuthentication": {
"MastodonUser": "your-mastodon-username",
"MastodonDomain": "your-instance.social"
},
"Domains": ["localhost", "localhost:5099"],
"SingleUserInstance": false,
"RegistrationOpen": true,
"InvitationCode": ""
}| Key | Description |
|---|---|
AdminAuthentication |
Mastodon account that has admin access to the instance |
Domains |
Domains this instance will respond to |
SingleUserInstance |
Allow exactly one bootstrap registration, then lock the instance to that owner |
RegistrationOpen |
Set to true to allow new sign-ups |
InvitationCode |
Optional invite code required for registration |
dotnet publish -c Release -r linux-x64Deploy the output from bin/Release/net9.0/linux-x64/publish/ behind a reverse proxy (nginx, Caddy, etc.) with HTTPS enabled — ActivityPub federation requires a valid TLS certificate.
src/FediProfile/
├── Components/ # Blazor pages & layouts
├── Controllers/ # ActivityPub inbox endpoints
├── Core/ # ActivityPub & actor helpers
├── Identity/ # Mastodon OAuth integration
├── Models/ # Data models (actors, badges, links, etc.)
├── Services/ # Database, crypto, follow, profile services
├── wwwroot/ # Static assets & generated profiles
├── Program.cs # App entry point & service registration
└── appsettings.json # Configuration
- Runtime: .NET 9.0 / ASP.NET Core
- UI: Blazor Server
- Database: SQLite (zero-config, file-based)
- Auth: Mastodon OAuth
- Protocol: ActivityPub / ActivityStreams
| Feature | FediProfile | Linktree | Others |
|---|---|---|---|
| Unlimited links | ✓ Free | ✓ Free | Varies |
| Federated identity | ✓ | ✗ | ✗ |
| Badge / credential system | ✓ Built-in | ✗ | ✗ |
| ActivityPub integration | ✓ Native | ✗ | ✗ |
| Self-hostable | ✓ | ✗ | Some |
| Open source | ✓ | ✗ | Some |
| No tracking / analytics sold | ✓ | ✗ | ✗ |
| Price | Free forever | Free / $9+ | Varies |
Contributions are welcome! Here's how to get involved:
- Fork the repository
- Create a branch for your feature or fix:
git checkout -b my-feature - Commit your changes:
git commit -m "Add my feature" - Push to your fork:
git push origin my-feature - Open a Pull Request against
main
If you find a bug or have an idea, open an issue.
FediProfile is free and open source. If it's useful to you, consider buying me a coffee to help cover hosting costs and fuel development:
Licensed under the GNU Lesser General Public License v3.