other
This commit is contained in:
+147
@@ -0,0 +1,147 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user