Skip to content

Sync your font library across all your devices. Cross-platform, open-source, self-hostable.

License

Notifications You must be signed in to change notification settings

pallestcyer/FontCap

Repository files navigation

FontCap

Your fonts. Every device.

DownloadFeaturesHow It WorksSelf-HostingContributing

Platform License Release


FontCap syncs your font library across all your devices. Install a font on your Mac, and it's automatically available on your Windows workstation and Linux laptop. No more emailing font files to yourself or hunting through cloud storage.

FontCap App Icon

Download

Download the latest version for your platform:

Platform Download Requirements
macOS FontCap-1.0.0-universal.dmg macOS 10.13+
Windows FontCap-1.0.0-win-x64.zip Windows 10+
Linux FontCap-1.0.0.AppImage Ubuntu 18.04+ or equivalent

macOS Installation

FontCap is not signed with an Apple Developer certificate (we're open source and independent). macOS will block the app by default. To install:

  1. Download and open the .dmg file
  2. Drag FontCap to Applications
  3. Open Terminal and run:
    xattr -cr /Applications/FontCap.app
  4. Open FontCap from Applications

This removes the quarantine flag that macOS applies to downloaded apps. You only need to do this once.

Features

  • Cross-Platform Sync — Works natively on macOS, Windows, and Linux
  • Automatic Font Discovery — Scans your system font directories on first launch
  • Smart Deduplication — SHA-256 hashing prevents duplicate uploads
  • One-Click Install — Download and install missing fonts with a single click
  • Multi-Device Management — See all your devices and their sync status
  • Offline Support — Fonts already on your device work without internet
  • System Tray — Runs quietly in the background
  • Privacy First — Your fonts are stored in your own cloud storage (Cloudflare R2)

Supported Font Formats

TTF • OTF • WOFF • WOFF2

How It Works

  1. Create an account — Sign up with email and password
  2. Scan your fonts — FontCap automatically detects fonts on your system
  3. Upload to cloud — Your fonts are securely uploaded to your storage
  4. Sync everywhere — Install FontCap on another device and sync your library
┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   MacBook   │     │  Cloudflare │     │  Windows PC │
│             │────▶│     R2      │◀────│             │
│  500 fonts  │     │             │     │  500 fonts  │
└─────────────┘     └─────────────┘     └─────────────┘

Quick Start

  1. Download and install FontCap for your platform
  2. Create an account or log in
  3. Click Scan Fonts to detect your installed fonts
  4. Click Upload All to sync fonts to the cloud
  5. On your other devices, click Sync to download your font library

Self-Hosting

FontCap is fully open source. You can run your own instance with your own Supabase project.

Prerequisites

  • Node.js 18+
  • A Supabase account (free tier works great)
  • A Cloudflare account with R2 enabled (free tier includes 10GB)

Setup

  1. Create a Supabase Project

    Go to supabase.com and create a new project.

  2. Set Up the Database

    In your Supabase dashboard, go to SQL Editor and run the schema from:

    server/src/config/schema-supabase-auth.sql
    
  3. Create Cloudflare R2 Bucket

    In your Cloudflare dashboard:

    • Go to R2 and create a bucket named fonts
    • Go to Manage R2 API Tokens and create a token with read/write access
    • Note your Account ID, Access Key ID, and Secret Access Key
  4. Configure Environment

    git clone https://github.com/pallestcyer/FontCap.git
    cd FontCap
    cp .env.example .env
    cp server/.env.example server/.env

    Edit .env with your Supabase credentials (found in Settings → API):

    VITE_SUPABASE_URL=https://your-project.supabase.co
    VITE_SUPABASE_ANON_KEY=your-anon-key

    Edit server/.env with your Supabase and R2 credentials:

    SUPABASE_URL=https://your-project.supabase.co
    SUPABASE_ANON_KEY=your-anon-key
    SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
    R2_ACCOUNT_ID=your-cloudflare-account-id
    R2_ACCESS_KEY_ID=your-r2-access-key-id
    R2_SECRET_ACCESS_KEY=your-r2-secret-access-key
    R2_BUCKET_NAME=fonts
  5. Run Locally

    npm install
    npm run dev          # Start Vite dev server
    npm run electron:start  # Start Electron (in another terminal)
  6. Build for Distribution

    npm run build:mac    # macOS (.dmg)
    npm run build:win    # Windows (.zip)
    npm run build:linux  # Linux (.AppImage, .deb)

Tech Stack

Layer Technology
Desktop App Electron 28
Frontend React 18 + Tailwind CSS
State Zustand
Backend Supabase (Auth, Database) + Cloudflare R2 (Storage)
Build Vite + electron-builder

Project Structure

fontcap/
├── electron/              # Electron main process
│   ├── main.js            # App entry, IPC handlers
│   ├── preload.js         # Context bridge
│   └── services/          # Font scanning, installation, upload
├── src/                   # React frontend
│   ├── components/        # Reusable UI components
│   ├── pages/             # Dashboard, Devices, Settings, Login
│   ├── stores/            # Zustand state (auth, fonts, devices)
│   └── config/            # Supabase client
├── server/                # Database schemas and migrations
│   └── src/config/        # SQL schemas for Supabase
└── build/                 # Electron builder resources

Security

  • Row Level Security (RLS) — Users can only access their own data
  • Scoped Storage — Font files stored in user-specific folders
  • Password Hashing — Handled by Supabase Auth (bcrypt)
  • File Integrity — SHA-256 hashes verify font files

Contributing

Contributions are welcome! Here's how to get started:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run the app locally to test
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

Development

# Install dependencies
npm install

# Start development
npm run dev              # Vite dev server
npm run electron:start   # Electron app

# The app will hot-reload as you make changes

Roadmap

  • Font previews in the dashboard
  • Font collections/folders
  • Selective sync (choose which fonts to sync)
  • Font activation/deactivation without uninstalling
  • Team/organization sharing

FAQ

Q: Is FontCap free? A: Yes! FontCap is open source and free to use. You'll need a Supabase account (for auth/database) and Cloudflare R2 (for storage) — both have generous free tiers.

Q: Where are my fonts stored? A: In Cloudflare R2 cloud storage. Your account data is in Supabase. You have full control over your data.

Q: Does FontCap modify my system fonts? A: FontCap only installs fonts to your user font directory. It never modifies or deletes system fonts.

Q: Can I use FontCap offline? A: Yes! Fonts already installed on your device work offline. You only need internet to sync.

Q: What about font licenses? A: FontCap syncs fonts you own. Make sure you have the appropriate licenses for any fonts you sync across devices.

License

MIT License — see LICENSE for details.

Support


Made with ♥ for designers and developers who work across multiple machines

About

Sync your font library across all your devices. Cross-platform, open-source, self-hostable.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors