Help us shape the future of Go! Take the 2026 Go Developer Survey

spline

command module
v0.19.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 18, 2026 License: MIT Imports: 24 Imported by: 0

README

Spline

Spline

Облегчённое создание шрифтов.
Рисуйте буквы кистью или пером, импортируйте SVG, расставьте кернинг
и получите готовый TTF/OTF без долгого изучения программы.

Go Версия Лицензия MIT Русский и английский

Скачать для Windows   Открыть в браузере

Русский · English · Все релизы · Демо-проект



Редактор контуров: точки, усы, линейки и линии шрифта, панели справа и живой просмотр текста внизу.
Демо-проект examples/demo.sp из контуров открытого шрифта Go Regular (© The Go Authors, BSD-подобная лицензия).

[!NOTE] Код проекта почти полностью написан с помощью ИИ. Идеи взяты из Glyphs и FontForge, но всё сделано максимально просто: один файл программы, своё окно без браузера, проекты в одном файле .sp.

Возможности · Всё в коробке · Как запустить · Файлы .sp · Клавиши · Как устроено


🪶 Просто начать

Знакомые меню, инструменты и сочетания из Photoshop, Illustrator и Glyphs. Скачали, открыли, рисуете: без настройки и долгого изучения.

✍️ Кисть и пропись

Рисуйте мышью или пером: мазок сам становится кривыми. Варианты букв и лигатуры для рукописных шрифтов и соединений.

🔤 Кернинг как в Glyphs

Пары и группы, исключения, подбор групп по форме букв и подсказки значений. Видно, кого заденет каждое правило.

📦 Один файл

Программа — один исполняемый файл на Go, работает офлайн. Проект — текстовый .sp, его легко отправить в мессенджере.

Возможности


Строка кернинга: синие полоски — пары сдвинуты ближе, справа выбор «вся группа» или «только эта буква».

Кернинг, который видно

Печатайте текст прямо в окне, курсор между буквами выбирает пару. Alt+←/→ меняет значение, можно тянуть мышью. Полоски между буквами показывают кернинг: синие — ближе, жёлтые — дальше, красные — слишком тесно.

Под каждой буквой пары видно, кого заденет значение: вся группа (с её буквами) или только эта буква. Список всех пар с сортировкой, фильтрами, «Очистить» и «Сжать». В шрифт пишутся GPOS и kern.

«Подобрать группы по форме»: Spline сравнил края букв и собрал похожие вместе.

Группы без рутины

Кернинг-группы, как в Glyphs: у буквы группа левой и правой стороны, одно правило @A — @V работает для всех. Окно «Кернинг-группы» показывает их карточками, буквы переносятся мышью, группу можно переименовать вместе с её парами.

Подобрать по форме сравнивает края нарисованных букв и предлагает группы. Подсказать кернинг предлагает значения для пар строки, а вы принимаете или пропускаете.

Вариант «о» для прописи: ставится вместо основной, если после неё «б», «л», «м» или «н».

Варианты и лигатуры для прописи

Вариант — другая форма той же буквы, например «о» с другим соединением. Он сам встаёт в текст, если перед ней или после неё стоят нужные буквы. Лигатура заменяет несколько букв подряд одним знаком.

В шрифт пишутся стандартные функции OpenType calt и liga: их сразу применяют браузеры, Word, Figma и Photoshop.

Панели сверху, слева, иконкой и окном; меню «Окно» открыто.

Рабочее место под себя

Как в Photoshop: потяните заголовок панели, и она станет окном. Пристыкуйте её справа, слева, в полосу иконок (щелчок открывает панель) или сверху — туда «Выравнивание» и «Контуры» встают одной строкой.

Место для стыковки подсвечивается при перетаскивании, расстановка запоминается. Меню Окно показывает и прячет панели.

Горячие клавиши (F1): щёлкните по сочетанию и нажмите новое.

Клавиши, как вам удобно

Любое сочетание можно переназначить, в том числе для команд, у которых его не было. Занятое сочетание переедет, а меню и подсказки сразу покажут новые клавиши.

Сочетания работают при любой раскладке, в том числе русской. Модификаторы как в Illustrator и Figma: Shift — 45°, Ctrl/Alt — острый угол.

Все буквы шрифта плитками, с категориями, метками и прогрессом.

Весь шрифт перед глазами

Разделы по категориям, цветные метки, коды Unicode, фильтры «нарисованы / не нарисованы». Отступы и группы правятся сразу у выделенных букв.

Живой просмотр внизу набирает любой текст вашим шрифтом, недорисованные буквы приглушены. Экспорт в .ttf и .otf.

Всё в коробке

🧰 Рисование

Выбор · Перо (кривые Безье) · Кисть со стабилизатором · Ластик · Прямоугольник · Эллипс · Нож · Рука · свободная трансформация Ctrl+T (масштаб, поворот, перемещение, привязка) · операции с контурами (объединить, вычесть, пересечь, исключить, разделить, убрать перекрытия) · выравнивание и распределение относительно выделения, ключевого объекта или рамки буквы · точные координаты точек и фигур.

📐 Сетка, линейки, трансформации

Сетка с настраиваемым шагом и привязкой (F9) · привязка к линиям шрифта (F10) · линейки и направляющие Ctrl+R, как в Photoshop · трансформации с живыми значениями: масштаб, поворот, наклон от базовой линии, отражение · ровные отступы одной кнопкой.

🔁 Импорт и экспорт

SVG из Illustrator, Figma, Inkscape: файлом, перетаскиванием или вставкой кода (Ctrl+V), файлы A.svg, uni0416.svg, Ж.svg сами попадают в свои буквы · буквы из другого .sp · копирование букв между проектами · экспорт .ttf (TrueType) и .otf (CFF) с кернингом, вариантами и лигатурами.

🪄 Удобство

Автосохранение · отмена и повтор · своё окно на Windows без браузера · тёмная и светлая темы · русский и английский · иконка и двойной щелчок для файлов .sp · установщик с выбором папки · уведомление о новой версии · работает и как сайт.

Как запустить

Windows (рекомендуется): скачайте Spline-Setup-<версия>.exe со страницы Releases и запустите. Установщик спросит, куда установить и для кого (только для вас, без прав администратора, или для всех пользователей), создаст ярлыки и свяжет файлы .sp со Spline. Удаляется программа через «Параметры → Приложения».

Без установки (portable) или на macOS / Linux:

  1. Скачайте программу для своей системы на странице Releases:
    • Windows: spline-windows-amd64.exe
    • macOS: spline-macos-arm64 (Apple M1/M2/M3) или spline-macos-amd64 (Intel)
    • Linux: spline-linux-amd64
  2. Запустите её двойным щелчком. Откроется окно редактора.
    • Windows 10/11: собственное окно программы (движок WebView2, уже встроен в Windows), без браузера и без консоли.
    • macOS / Linux: отдельное окно Chrome или Edge в режиме приложения, без вкладок и адресной строки.
    • Если ничего из этого нет, редактор откроется в обычном браузере.
  3. Чтобы выйти, просто закройте окно.

В браузере: spline.geekfreak.tv, ничего устанавливать не нужно.

[!TIP] Windows может показать «Windows защитила ваш компьютер»: «Подробнее» → «Выполнить в любом случае». На macOS при первом запуске: правый клик по файлу → «Открыть». На Linux/macOS: chmod +x spline-*.

Обновления

Spline раз в день проверяет, вышла ли новая версия (и по команде «Справка → Проверить обновления»). Если вышла, в строке состояния появится «Доступна версия …». Щелчок по надписи открывает последний релиз на GitHub: скачайте Spline-Setup-<версия>.exe и запустите, он установится поверх старой версии в ту же папку. Когда у вас уже последняя версия, надписи нет.

Иконка для файлов .sp (Windows)

Меню «Файл → Связать файлы .sp со Spline»: файлы проектов получают иконку Spline, тип «Spline project» и открываются двойным щелчком. Изменение делается только для вашего пользователя Windows, права администратора не нужны. Если переместили spline.exe в другую папку, выберите пункт ещё раз.

Собрать самому

Нужен Go 1.22 или новее:

go run github.com/GeekFreak01/spline@latest

или из исходников:

git clone https://github.com/GeekFreak01/spline
cd spline
go run .

Файлы .sp: делитесь проектами

Проект хранится в файле .sp. Это обычный текст (JSON), поэтому его можно:

  • отправить другу: он откроет файл кнопкой «Открыть» или просто перетащит его в окно;
  • открыть двойным щелчком: назначьте spline программой для файлов .sp (или запустите spline мой-шрифт.sp), тогда «Сохранить» будет записывать прямо в этот файл;
  • взять буквы из чужого проекта: «Взять буквы из другого файла .sp» добавит их в ваш шрифт;
  • копировать буквы: выделите буквы, нажмите Ctrl+C, откройте другой проект и нажмите Ctrl+V. Можно даже отправить скопированный текст в мессенджере.

Пример: examples/hello.sp. Работа автоматически сохраняется, так что случайно закрытое окно ничего не испортит.

Формат файла .sp
{
  "format": "spline",
  "version": 1,
  "info": { "familyName": "Мой шрифт", "styleName": "Regular", "unitsPerEm": 1000,
            "ascender": 800, "descender": -200, "xHeight": 500, "capHeight": 700 },
  "glyphs": [
    { "name": "A", "unicode": 65, "advance": 620, "color": "green",
      "contours": [ { "closed": true, "nodes": [
        { "x": 0, "y": 0 },
        { "x": 300, "y": 700, "in": { "x": 250, "y": 700 }, "out": { "x": 350, "y": 700 }, "smooth": true }
      ] } ] }
  ]
}
  • Координаты в единицах шрифта (1000 на кегль), ось Y смотрит вверх, базовая линия y = 0.
  • nodes — опорные точки; in/out — абсолютные координаты «усиков» кривой Безье. Если у соседних точек нет out/in, между ними прямая линия.
  • Направление контуров не важно: Spline сам решает, где заливка, а где дырка.
  • kernLeft / kernRight у буквы — её кернинг-группы левой и правой стороны. В kerning ключ @имя означает группу: "kerning": { "@A": { "@V": -70 }, "T": { "@o": -80 } }.
  • contextual — варианты: { "glyph": "o", "use": "o.alt", "prev": [], "next": ["b", "l"] }; ligatures — лигатуры: { "glyphs": ["f", "i"], "use": "f_i" }.

Горячие клавиши

Сочетания работают при любой раскладке, в том числе русской. Любое можно поменять: Справка → Горячие клавиши (F1), щёлкнуть по сочетанию и нажать новое. В браузере Ctrl+T, Ctrl+W и Ctrl+N забирает сам браузер: назначьте другое сочетание или включите полноэкранный режим (F11).

Сочетания по умолчанию
Клавиша Действие
V P B E R O K H Выбор, перо, кисть, ластик, прямоугольник, эллипс, нож, рука
Ctrl+R / Ctrl+; Линейки / показать направляющие
Ctrl+K Кернинг (Alt+←/→ ±10, Alt+Shift+←/→ ±1, Alt+G — показать группу, Ctrl+] / Ctrl+[ — образцы)
Ctrl+T Свободная трансформация (Ctrl+Z внутри — отменить её)
F1 Горячие клавиши: список и переназначение
F9 / F10 Привязка к сетке / к линиям
Ctrl+Alt+U M I E D O Объединить, вычесть, пересечь, исключить, разделить, убрать перекрытия
Пробел (зажать) Двигать холст
Ctrl+Z / Ctrl+Shift+Z (или Ctrl+Y) Отменить / повторить
Стрелки (Shift — по 10) Сдвинуть выбранные точки
Delete Удалить точки
PageUp / PageDown Соседняя буква
Esc Назад ко всем буквам
Ctrl+S / Ctrl+Shift+S Сохранить / сохранить как
Ctrl+O Открыть
Модификаторы, как в Illustrator и Figma
Клавиша Что делает
Shift Прямые линии и углы, кратные 45°: перо, перетаскивание точек и усов, прямой мазок кистью, квадрат и круг
Ctrl / Alt + тянуть ус Двигается только этот ус: с одной стороны точки кривая, с другой нет
Ctrl / Alt + щелчок по усу Ус удаляется: эта сторона точки становится острой, другая остаётся скруглённой
Ctrl / Alt + щелчок по точке Острый угол с обеих сторон
Перо: щелчок по последней точке Острый выход из скруглённой точки; протяжка с Ctrl/Alt задаёт только исходящий ус
Двойной щелчок по точке / линии Переключить «гладкая / угловая» / добавить точку

Как это устроено

spline (один исполняемый файл на Go)
├── main.go               локальный сервер 127.0.0.1:7878
├── window_windows.go     окно программы на WebView2 (Windows)
├── window_other.go       окно Chrome/Edge в режиме приложения (macOS, Linux)
├── internal/project      формат .sp: чтение и проверка
├── internal/fontgen      сборка шрифта: TrueType (glyf) и OpenType/CFF, GPOS, GSUB
└── web/                  интерфейс (HTML/CSS/JS без сборки), встроен через go:embed
    ├── js/trace.js       кисть: растр → контур → подгонка кривых Безье
    ├── js/svg.js         импорт SVG (пути, фигуры, дуги, трансформации)
    ├── js/boolean.js     операции с контурами (на Paper.js)
    ├── js/shape.js       профили букв: группы по форме и подсказки кернинга
    └── vendor/           Paper.js, встроен в программу (работает офлайн)
  • Сервер слушает только 127.0.0.1 и не принимает запросы от других сайтов.
  • Никаких внешних зависимостей во время работы, всё работает офлайн.
  • Дизайн интерфейса описан в design-system/spline/MASTER.md.
Разработка
go run . --dev        # интерфейс читается с диска, правки видны после обновления страницы
go test ./...         # проверка сборки шрифтов

Установщик: installer/spline.iss (Inno Setup 6), собирается автоматически при релизе; локально — iscc /DAppVersion=1.0.0 installer\spline.iss после сборки dist/spline.exe.

Иконки (assets/logo.svg, assets/file.svg) вшиваются в spline.exe командой go generate (создаёт rsrc_windows_*.syso).

Флаги: --view "#kern" / --view "#glyph=A" (открыть сразу нужный режим), --browser (открыть в обычном браузере), --port 7878, --no-browser (только сервер), --dev.

Собрать Windows-версию без консольного окна:

go build -ldflags "-H=windowsgui" -o spline.exe .

Идеи и исправления приветствуются: открывайте issue или pull request.

Лицензия

MIT. Иконки: Lucide (ISC). Окно на Windows: go-webview2 (MIT). Операции с контурами: Paper.js (MIT).

Documentation

Overview

Spline is a lightweight font editor. It runs a small local server and shows the editor in its own window (WebView2 on Windows, an app window of Chrome/Edge elsewhere, or the default browser as a fallback). Usage:

spline              start with the last project
spline myfont.sp    open a project file
spline --browser    use the regular web browser

Directories

Path Synopsis
internal
fontgen
Package fontgen compiles a Spline project into an installable font file.
Package fontgen compiles a Spline project into an installable font file.
project
Package project describes the .sp file format used by Spline.
Package project describes the .sp file format used by Spline.
tools
genicons command
Command genicons renders the logo and the document icon from assets/*.svg and embeds them into the Windows executable as resources.
Command genicons renders the logo and the document icon from assets/*.svg and embeds them into the Windows executable as resources.
mkdemo command
Command mkdemo builds examples/demo.sp from the open "Go Regular" font (golang.org/x/image/font/gofont, BSD-style license by the Go Authors).
Command mkdemo builds examples/demo.sp from the open "Go Regular" font (golang.org/x/image/font/gofont, BSD-style license by the Go Authors).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL