You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Kromonos 742752bdf1
Remove gitlab ci
1 month ago
config Add quicksand font 4 months ago
docs Initial commit 10 months ago
logs Initial commit 10 months ago
public Add quicksand font 4 months ago
src Initial commit 10 months ago
templates Initial commit 10 months ago
tests Initial commit 10 months ago
.coveralls.yml Initial commit 10 months ago
.gitattributes Initial commit 10 months ago
.gitignore Initial commit 10 months ago Initial commit 10 months ago
LICENSE Initial commit 10 months ago Initial commit 10 months ago
composer.json Initial commit 10 months ago
composer.lock Initial commit 10 months ago
composer.phar Add composer.phar 4 months ago
phpunit.xml Initial commit 10 months ago

Web fonts repository

Latest Stable Version Total Downloads PHP from Packagist Build Status Coverage Status Dependency Status SensioLabsInsight

A simple webfont hosting inspired by Google Fonts. It runs on your server, stores and distributes webfont files and generates CSS on-the-go for embedding fonts on web pages.

Quick start


  1. HTTP server supporting PHP ≥ 7.0
  2. Composer (required for installation)


1. Download the source code

Run the following code in the console:

composer create-project finesse/web-fonts-repository webfonts

Where webfonts is a path to a directory where the repository should be installed.

Or you can make some things manually:

  1. Download the source code from GitHub and extract it.
  2. Open a terminal and go to the source code root.
  3. Install the libraries by running in the terminal:
    composer install
  4. Prepare the repository by running in the terminal:
    composer run-script post-create-project-cmd

2. File permissions

Give the user behalf which the web server runs permissions to write inside the logs directory.

You can just run this in the console:

# Don't do it in production!
chmod 777 logs

3. Web server

Make the directory public be the document root of the web server. Or just open http://localhost/public if you installed the repository to the web server root.

Make all the requests to not-existing files be handled by public/index.php. If your server is Apache, it's already done.

Make the server add the Access-Control-Allow-Origin: * HTTP-header to the font files. Otherwise some browsers will reject using fonts from the repository.

  • Apache: all you need to do is to make sure that the mod_header.c module is on (run the a2enmod headers command and restart the server to turn it on).
  • Nginx: use this instruction.


Put your font files (woff, woff2, ttf, eot, svg) to the public/fonts directory. You may separate them by subdirectories. You can convert webfont files using Transfonter.

All settings go to the file config/settings-local.php. If you don't have it, copy it from the file config/settings-local.php.example.



Whether errors details should be sent to browser. Anyway errors are written to the file logs/app.log. You should turn it off on production server.


How many messages should be logged to the file. The value is one of the \Psr\Log\LogLevel constants. You can read more about log levels here.


The list of fonts available in the repository. Simple example:

return [
    // ...
    'fonts' => [
        'Open Sans' => [
            'styles' => [
                '300' => 'OpenSans/opensans-light.*',
                '300i' => 'OpenSans/opensans-light-italic.*',
                '400' => 'OpenSans/opensans-regular.*',
                '400i' => 'OpenSans/opensans-regular-italic.*',
        'Roboto' => [
            'styles' => [
                '300' => 'Roboto/roboto-light.*',
                '400' => 'Roboto/roboto-regular.*',
                '500' => 'Roboto/roboto-medium.*',
                '700' => 'Roboto/roboto-bold.*',

The fonts array keys are the font families names. The styles arrays keys are the styles names. The numbers in the style names are the font weights, i stands for italic.

The font file paths are given relative to the public/fonts directory. The file paths are the glob search patterns. It means that the repository should consider all files matching the pattern as font files.

You can find more examples and possibilities here.


Add a <link> tag to the HTML code of the page on which you want to embed a font:

<link rel="stylesheet" href="http://web-fonts-repository.local/css?family=Open+Sans:400,400i,700,700i|Roboto:300,400" />

Where http://web-fonts-repository.local is the root URL of an installed web fonts repository.

The required fonts are specified the same way as on Google Fonts. Font families are divided by |, families styles are divided by ,, family name is separated from styles list using :.

You may omit the styles list. In this case the regular style (400) is used.

<link rel="stylesheet" href="http://web-fonts-repository.local/css?family=Open+Sans" />

Then embed a font in a CSS code:

body {
    font-family: 'Open Sans', sans-serif;

Versions compatibility

The project follows the Semantic Versioning.

It means that patch versions are fully compatible (i.e. 1.2.1 and 1.2.2), minor versions are backward compatible (i.e. 1.2.1 and 1.3.2) and major versions are not compatible (i.e. 1.2.1 and 3.0). The pre-release versions (0.*) are a bit different: patch versions are backward compatible and minor versions are not compatible.


MIT. See the LICENSE file for details.