A self-hosted, open-source Linktree alternative built with Next.js and Tailwind CSS. One fast, accessible link-in-bio page that connects your audience to everything you publish — on your own domain, with no account, no subscription and no third party in between.
Live demo · Documentation · Deploy your own
Deploy the template and edit one file:
Everything about your page — name, avatar, links, layout, palette — lives in config/user.config.ts. Your deployment is your profile page and nothing else: / renders your links.
Already have a Next.js app? Install the package instead:
npm install linkfolio # or: pnpm add linkfolio · yarn add linkfolioimport { LinkFolio } from "linkfolio";
import userConfig from "./user.config";
export default function Page() {
return <LinkFolio userConfig={userConfig} />;
}| Light | Dark |
|---|---|
![]() |
![]() |
| Bento layout | Mobile |
![]() |
![]() |
- Two layouts — a classic wrapping list, or a
bentomosaic that sizes each tile from the group a link already belongs to. - Five theme presets — teal, ocean, forest, sunset and mauve, each generated from one lightness recipe so they share contrast rather than being eyeballed.
- Dark mode — a genuine dark palette, not an inversion, transitioned with the View Transition API.
- Analytics, optional and pluggable — a DOM event that works with any tracker, plus adapters you can register for your own.
- SEO built in —
linkfolio/seoexportsbuildMetadataandbuildJsonLdso server components emit correct metadata andProfilePagestructured data. - Accessible by default — keyboard reachable, screen-reader labelled, and honouring
prefers-reduced-motion,prefers-reduced-transparencyandprefers-contrast. - Fast — a static Next.js page with the React Compiler enabled and images served through
next/image. - Yours to change — full source access, injectable React components, and every colour and motion value exposed as a CSS custom property.
| Linkfolio | Linktree | LinkStack | Bio.link | |
|---|---|---|---|---|
| Cost | Free, MIT licensed | Free tier; paid from €4.50/mo billed annually | Free and open source; hosted from $1/mo | One plan at $7.49/mo, 7-day free trial |
| Account required | None | Yes, a Linktree account | Yes, an account on the instance | Yes, a Bio Link account |
| Open source | Yes, MIT | — | Yes, AGPL-3.0 | — |
| Your own domain | Yes, you deploy it | No, pages live at linktr.ee/username | Yes, self-hosted or on the $5/mo plan | Yes, on the paid plan |
| Where your data lives | Your infrastructure | — | Your own web server when self-hosted | — |
| Built with | Next.js and Tailwind CSS | — | PHP and Laravel | — |
"—" means the vendor does not publish that information. Competitor details checked 2026-08-17.
- Linktree: https://linktr.ee/s/pricing
- Linktree: https://linktr.ee/help/en/articles/6571689-can-i-change-the-linktree-url-to-a-custom-domain
- LinkStack: https://linkstack.org/
- LinkStack: https://github.com/LinkStackOrg/LinkStack
- Bio.link: https://bio.link/
Developers, designers, writers and makers who want a personal link hub they fully control — a single page linking a portfolio, a blog, social profiles and side projects, deployable in minutes to Vercel.
Installation — template or existing project
There are two methods to get started with Linkfolio:
Edit the user.config.ts file in the config directory to personalize and tailor your profile to your preferences.
Using this method, you can quickly deploy a Linkfolio page with Vercel using the provided template. Your deployment is your profile page and nothing else: / renders your links, and the project's own marketing pages (landing, /docs, /demo) are not built.
Set NEXT_APP_URL to your site's public URL (e.g. https://links.example.com) so the canonical URL, sitemap and Open Graph tags point at your domain. On Vercel it falls back to the project's production URL; on other hosts it is required.
Showcase mode — the project's own demo deployment sets
LINKFOLIO_SHOWCASE=1, which turns on the marketing landing page,/docsand/demo. Leave it unset for a personal deployment. The flag is read at build time, so changing it requires a redeploy.
Install the linkfolio package in your Next.js / Tailwind project:
npm install linkfolioOr using Yarn / Pnpm:
yarn add linkfoliopnpm add linkfolio- Configuration — every option in
user.config.ts - Layouts — the classic list and the bento mosaic
- Theming — presets, colour tokens and motion tokens
- Analytics — the DOM event, built-in providers, custom adapters
- SEO helpers —
buildMetadataandbuildJsonLdfor server components - Bundled assets — importing the shipped icons
Full guide: linkfolio-demo.vercel.app/docs
Testing with Playwright
Playwright is used for end-to-end testing to ensure the integrity and functionality of the project.
To execute the Playwright tests, run the following command:
npx playwright testAs the project evolves, you might update the UI or functionality, causing the existing reference snapshots to be outdated. In such cases, you'll need to update the snapshots to match the latest changes.
To update the reference snapshots, run:
npx playwright test --update-snapshotsThis will run the tests and update any snapshots that don't match the current render of your page.
For a practical implementation of Linkfolio, check out my example repository: My Linkfolio Page.
This repository demonstrates how to integrate and customize Linkfolio in a Next.js project.
Yes. Linkfolio is open source under the MIT licence. You host it yourself, so there is no subscription and no usage limit.
Linkfolio runs on your own domain and infrastructure. You have full access to the source, can inject your own React components, and no third party sits between you and your visitors.
No. You can deploy the template to Vercel in one click and personalise it by editing a single configuration file. Knowing Next.js helps if you want to customise components.
Yes. Install the linkfolio package and render the LinkFolio component with your own config object.
Yes, and it is not the only option. Set analytics: { provider: "ga", id: "G-…" } in your config and Linkfolio loads the tag and reports which link each visitor clicked. Google Tag Manager, Plausible and Umami ship as built-in providers too, you can register your own, and every link card emits a linkfolio:analytics DOM event you can listen to without configuring any provider at all.
If you have ideas to improve Linkfolio or found a bug, do not hesitate to open an issue or a pull request. CONTRIBUTING.md covers local setup, the checks CI runs, and how screenshot baselines are regenerated.
Linkfolio's code is MIT licensed — fork it, modify it, and redistribute it freely.
The name "Linkfolio" and its logo are not covered by the MIT licence. The MIT grant covers copyright in the software, not the project's identity.
You're welcome to reference Linkfolio factually, e.g. "built with Linkfolio", "a fork of Linkfolio", or "compatible with Linkfolio". Please don't use the Linkfolio name or logo as the identity of a derivative project, in a product, company or domain name, or in any way that implies endorsement by or affiliation with this project.
For any other use, please open an issue to ask first.
See TRADEMARK.md for the full trademark policy.
Linkfolio is open-sourced under the MIT License.



