148 lines
4.6 KiB
Markdown
148 lines
4.6 KiB
Markdown
# LinkForty Core
|
|
|
|
**Open-source alternative to Branch.io, AppsFlyer OneLink, and Firebase Dynamic Links.**
|
|
|
|
Self-hosted deep linking engine with device detection, analytics, deferred deep linking, and smart routing. No per-click pricing, no vendor lock-in, full data ownership — runs on your own PostgreSQL.
|
|
|
|
Firebase Dynamic Links shut down in August 2025. LinkForty is a production-ready, open-source replacement.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
curl -O https://raw.githubusercontent.com/linkforty/core/main/docker-compose.yml
|
|
docker compose up -d
|
|
```
|
|
|
|
That's it. LinkForty is running at `http://localhost:3000`.
|
|
|
|
## Docker CLI
|
|
|
|
```bash
|
|
docker run -d \
|
|
--name linkforty \
|
|
-p 3000:3000 \
|
|
-e DATABASE_URL=postgresql://user:pass@host:5432/linkforty \
|
|
-e REDIS_URL=redis://host:6379 \
|
|
linkforty/core:latest
|
|
```
|
|
|
|
## Features
|
|
|
|
- **Smart Link Routing** — Device-specific URLs for iOS, Android, and web
|
|
- **Deferred Deep Linking** — Probabilistic fingerprint matching for install attribution
|
|
- **Click Analytics** — Geolocation, device type, platform, UTM tracking
|
|
- **QR Code Generation** — Built-in PNG/SVG QR codes for any link
|
|
- **Webhooks** — HMAC-signed event notifications with retry logic
|
|
- **iOS Universal Links & Android App Links** — Automatic `.well-known` file serving
|
|
- **OG Preview Pages** — Social media scraper detection with Open Graph meta tags
|
|
- **Redis Caching** — Optional Redis for high-performance link lookups
|
|
- **TypeScript** — Fully typed API
|
|
|
|
## Environment Variables
|
|
|
|
| Variable | Required | Default | Description |
|
|
|----------|----------|---------|-------------|
|
|
| `DATABASE_URL` | Yes | — | PostgreSQL connection string |
|
|
| `REDIS_URL` | No | — | Redis connection string (recommended) |
|
|
| `PORT` | No | `3000` | Server port |
|
|
| `NODE_ENV` | No | `production` | Environment mode |
|
|
| `CORS_ORIGIN` | No | `*` | CORS allowed origins |
|
|
| `IOS_TEAM_ID` | No | — | Apple Team ID for Universal Links |
|
|
| `IOS_BUNDLE_ID` | No | — | iOS app bundle ID |
|
|
| `ANDROID_PACKAGE_NAME` | No | — | Android package name |
|
|
| `ANDROID_SHA256_FINGERPRINTS` | No | — | Android signing certificate fingerprints |
|
|
|
|
## Image Details
|
|
|
|
- **Architectures:** linux/amd64, linux/arm64
|
|
- **Base:** Node.js 22 Alpine
|
|
- **Security:** Non-root user, SBOM + Provenance attestations
|
|
- **Health checks:** Built-in
|
|
|
|
## Tags
|
|
|
|
| Tag | Description |
|
|
|-----|-------------|
|
|
| `latest` | Latest stable release |
|
|
| `v1.6.1` | Specific version (recommended for production) |
|
|
| `v1.6` | Latest patch of minor version |
|
|
| `v1` | Latest minor of major version |
|
|
|
|
**Pin versions in production:**
|
|
|
|
```yaml
|
|
services:
|
|
linkforty:
|
|
image: linkforty/core:v1.6.1
|
|
```
|
|
|
|
## Docker Compose (Full Stack)
|
|
|
|
```yaml
|
|
services:
|
|
linkforty:
|
|
image: linkforty/core:latest
|
|
ports:
|
|
- "3000:3000"
|
|
environment:
|
|
DATABASE_URL: postgresql://linkforty:linkforty@postgres:5432/linkforty
|
|
REDIS_URL: redis://redis:6379
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_started
|
|
|
|
postgres:
|
|
image: postgres:16-alpine
|
|
environment:
|
|
POSTGRES_USER: linkforty
|
|
POSTGRES_PASSWORD: linkforty
|
|
POSTGRES_DB: linkforty
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U linkforty"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
volumes:
|
|
- redis_data:/data
|
|
|
|
volumes:
|
|
postgres_data:
|
|
redis_data:
|
|
```
|
|
|
|
## Mobile SDKs
|
|
|
|
| Platform | Package |
|
|
|----------|---------|
|
|
| React Native | [`@linkforty/mobile-sdk-react-native`](https://www.npmjs.com/package/@linkforty/mobile-sdk-react-native) |
|
|
| Expo | [`@linkforty/mobile-sdk-expo`](https://www.npmjs.com/package/@linkforty/mobile-sdk-expo) |
|
|
| iOS (Swift) | [LinkFortySDK](https://github.com/LinkForty/mobile-sdk-ios) |
|
|
| Android (Kotlin) | [LinkFortySDK](https://github.com/LinkForty/mobile-sdk-android) |
|
|
|
|
## Why LinkForty?
|
|
|
|
| | LinkForty | Branch | AppsFlyer | Firebase Dynamic Links |
|
|
|---|-----------|--------|-----------|----------------------|
|
|
| **Pricing** | Free (self-hosted) | $299+/mo | $500+/mo | Shut down |
|
|
| **Open Source** | Yes (AGPL-3.0) | No | No | No |
|
|
| **Self-Hosted** | Yes | No | No | No |
|
|
| **Data Ownership** | Complete | Vendor | Vendor | Was Google |
|
|
|
|
## Links
|
|
|
|
- **Source Code:** [github.com/LinkForty/core](https://github.com/LinkForty/core)
|
|
- **Documentation:** [docs.linkforty.com](https://docs.linkforty.com)
|
|
- **Cloud Platform:** [linkforty.com](https://linkforty.com) (hosted SaaS)
|
|
- **Issues:** [GitHub Issues](https://github.com/LinkForty/core/issues)
|
|
|
|
## License
|
|
|
|
AGPL-3.0 — see [LICENSE](https://github.com/LinkForty/core/blob/main/LICENSE) for details.
|