# Command-line tool for Glyphs

**URL:** <https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022>\
**Category:** Info\
**Created:** [March 24, 2026, 10:30am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022 "2026-03-24T10:30:44Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![GeorgSeifert](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/georgseifert/32/259_2.png) [@GeorgSeifert](https://forum.glyphsapp.com/u/GeorgSeifert)\
**Post date:** [March 30, 2026, 7:04pm UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/23 "2026-03-30T19:04:19Z")

</div>

Or add a callback from the plugin.

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [April 1, 2026, 6:21pm UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/25 "2026-04-01T18:21:13Z")

</div>

**glyphs-cli 0.2.1** is out now with fixes for variable font export. You can install the updated version as always with

```plaintext
python3 -m pip install glyphs-cli --upgrade

```

---

<div class="post-metadata">

**Author:** ![kontur](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/kontur/32/32307_2.png) [@kontur](https://forum.glyphsapp.com/u/kontur)\
**Post date:** [April 16, 2026, 9:17am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/26 "2026-04-16T09:17:32Z")

</div>

`glyphs --format tt --format cff ...` would be cool to compile both in one go.

Also --plugins “” could be the default, at least when you provide --app with a specific version. I was confused why using a specific version would fail with some plugin failures in my local GlyphsApp installed plugins.

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [April 16, 2026, 9:51am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/27 "2026-04-16T09:51:16Z")

</div>

**glyphs-cli 0.3.0** is out now with support for multiple outline formats (CFF and TrueType at once), and multiple container formats (OTF/TTF, WOFF, and WOFF 2). There is now also a `--config` option to provide a custom export configuration for advanced control.

You can install the updated version as always with

```plaintext
pip install glyphs-cli --upgrade

```

## `glyphs export --format`

You can now provide a comma-separated list of outline formats to `glyphs export --format`:

```plaintext
glyphs export --format cff,tt ...

```

The command above export both CFF/PostScript- and TrueType-flavor OpenType fonts.

## `glyphs export --container`

Use the new `--container` option to choose which font container formats to export:

- `standard` (OTF/TTF)
- `woff` (WOFF)
- `woff2` (WOFF 2)

By default, `standard` is used. You can provide a comma-separated list of container formats:

```plaintext
glyphs export --container standard,woff2 ...

```

## `glyphs export --config <file>`

A configuration file that can change export settings and specify specific instances.

The file format is [JSON5](https://json5.org), a superset of JSON with support for comments, unquoted keys, and trailing commas.

The file is an object with the following values:

- `"settings"`: (optional) Export settings.
- `"sourceFiles"`: (optional) List of file paths to source files to export. These source files are used in addition to the files specified as `<source>` arguments.

Each source file in `"sourceFiles"` is an object with the following values:

- `"filePath"`: File path to the source file.
- `"instances"`: (optional) Array of instance configurations. If unset, uses all instances of the source file.
- `"settings"`: (optional) Export settings overriding the config-file-level settings.

Each instance configuration in `"instances"` is an object with the following values:

- `"selector"`: Selects an instance from the source file. An integer selects the instance at that index; a string selects the instance with that name.
- `"fileName"`: (optional) Specifies a custom file name for the exported font file.
- `"settings"`: (optional) Export settings overriding the source-file-level settings.

Export settings can be specified using command-line arguments (e.g., `--output`, `--format`, …), in the config file, per source file, and per instance. The settings use inheritance such that a more specific scope overwrites the settings of a less specific scope. For example, setting the outline format for an instance uses it over the value set for the source file, in the config file, and from the arguments. The settings offer the following optional values:

- `"outputPath"`: File path to the directory into which to export the font files.
- `"outlineFormats"`: Array of strings; `"cff"` (CFF/PostScript) or `"tt"` (TrueType).
- `"containerFormats"`: Array of strings; `"standard"` (OTF/TTF), `"woff"` (WOFF), or `"woff2"` (WOFF 2).
- `"autohint"`, `"removeOverlap"`, `"useSubroutines"`, `"useProductionNames"`, `"optimizeDeltas"`: Explicitly enabled or disabled these options. If unset, the default choice of the selected Glyphs app version is used.

* * *

For example, the following config file defines that both CFF and TrueType versions of all instances should be exported:

```js
{
  settings: {
    outlineFormats: ["cff", "tt"],
  },
}

```

The config above is equivalent to passing the `--format cff,tt` argument.  
Settings can also be scoped to source files:

```js
{
  settings: {
    outlineFormats: ["cff", "tt"],
  },
  sourceFiles: [
    {
      filePath: "SomeFont.glyphspackage",
    },
    {
      filePath: "OtherFont.glyphspackage",
      settings: {
        outlineFormats: ["tt"],
      },
    },
  ],
}

```

Here, SomeFont.glyphspackage and any other source files provided as `<source>` arguments are exported using both CFF and TrueType outlines, but OtherFont.glyphspackage is exported just using TrueType outlines.

Settings can also be specifically scoped to instances:

```js
{
  sourceFiles: [
    {
      filePath: "SomeFont.glyphspackage",
      instances: [
        {
          selector: "Regular",
        },
        {
          selector: "Regular",
          fileName: "SomeFont-Regular-SourceGlyphNames",
          settings: {
            useProductionNames: false,
          },
        },
      ],
    },
  ],
}

```

Here, the same instance is exported twice, each time with different settings. A separate `fileName` is specified for the second instance so the two instances don’t use the same export file name and thus don’t overwrite each other.

## `glyphs export --json`

The `glyphs export --plain` option is now renamed to `--json` and provides more details about the exported font files.

When the `--json` flag is set, the tool writes a JSON report for each processed instance on a separate line. Each report is an object with the following values:

- `"sourceFilePath"`: Absolute file path to the source file.
- `"instanceName"`: Name of the instance.
- `"exportConfiguration"`: Configuration settings used for the export.
- `"exportFilePath"`: Absolute file path to the exported font file. May be `null`.
- `"warnings"`, `"errors"`: Array of objects with string values for the keys `title`, `instancePath`, and `description`.

`"exportConfiguration"` is an object with the following values:

- `"outlineFormat"`: `"cff"` (CFF/PostScript) or `"tt"` (TrueType).
- `"containerFormat"`: `"standard"` (OTF/TTF), `"woff"` (WOFF), or `"woff2"` (WOFF 2).
- `"autohint"`, `"removeOverlap"`, `"useSubroutines"`, `"useProductionNames"`, `"optimizeDeltas"`: (optional, Boolean) Whether these options were explicitly enabled or disabled. If unset, the default choice of the selected Glyphs app version was used.

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [April 16, 2026, 9:56am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/28 "2026-04-16T09:56:47Z")

</div>

> [@kontur](#):
>
> Also --plugins “” could be the default, at least when you provide --app with a specific version. I was confused why using a specific version would fail with some plugin failures in my local GlyphsApp installed plugins.

Could you elaborate on why using `--app` with a specific version should handle plug-ins differently? I mostly use the `glyphs` tool with `--app 3` to use the latest version of Glyphs 3.

---

<div class="post-metadata">

**Author:** ![kontur](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/kontur/32/32307_2.png) [@kontur](https://forum.glyphsapp.com/u/kontur)\
**Post date:** [April 16, 2026, 10:07am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/29 "2026-04-16T10:07:28Z")

</div>

Like I said, I found it confusing running `glyphs export --app 3523 ...` and seeing errors caused by my local GlyphsApp installed plugins. I was under the impression using the --app argument would use a “standalone” compiler, always, so why would that concern itself with anything user-installed.

Or if you think about it the other way around. I want to spec --app so that a compile is repeatable on different machines. I explicitly do not want any user-installed plugins from their environment mess with the compile.

Generally speaking, I would almost always feel it more intuitive if --plugins was unset. I mean, almost all the plugins a regular user will have installed would be for drawing and not relevant for compiles, or am I under some misconception here? For those cases where it would be relevant, using “app” or explicit lists seems a much more understandable action than defaulting to always pull any installed (or not installed) plugins into a command line compile.

Great job adding the format and container options 🙌

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [April 16, 2026, 10:10am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/30 "2026-04-16T10:10:59Z")

</div>

> [@kontur](#):
>
> Generally speaking, I would almost always feel it more intuitive if --plugins was unset. I mean, almost all the plugins a regular user will have installed would be for drawing and not relevant for compiles, or am I under some misconception here?

That was mostly my impression as well launching the CLI tool, but the requests for plug-in support were immediate and numerous. I think most of this are filter plug-ins and other export-time modifications. I am keeping an eye on how this develops.

---

<div class="post-metadata">

**Author:** ![kontur](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/kontur/32/32307_2.png) [@kontur](https://forum.glyphsapp.com/u/kontur)\
**Post date:** [April 29, 2026, 9:45am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/31 "2026-04-29T09:45:40Z")

</div>

A couple of observations:

- The “instances” is kind of clumsy to use; the “selector” property should take maybe more than just the style name into account, e.g. full family + stylename (e.g. one source with 2 VFs, 2x8 instances, each with different filters: You have “Regular” 4 times, so style name as selector is unusable), and defining 16 instances by index is error-prone
- It would be cool if “instances” “selector” could be a regex; easily include/exclude e.g. “Variable” instances
- “RemoveOverlap” defined as filter on an instance in the source file as Custom Parameter results in a error with filter not found, I suppose it conflicts with the “setting” somehow
- Maybe output which is used when instances in the source file define “fileName”, to clarify which is used

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [April 29, 2026, 10:12am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/32 "2026-04-29T10:12:33Z")

</div>

I agree that instance selection can be clumsy. I will add the option to use static/variable as part of the selection as well as other name components. Remove Overlap should work as a filter regardless of the settings, I will have a look at that.

> [@kontur](#):
>
> Maybe output which is used when instances in the source file define “fileName”, to clarify which is used

I am not sure I understand. Could you give an example?

---

<div class="post-metadata">

**Author:** ![Aida](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/aida/32/29971_2.png) [@Aida](https://forum.glyphsapp.com/u/Aida)\
**Post date:** [April 29, 2026, 9:02pm UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/33 "2026-04-29T21:02:48Z")

</div>

Is there something specific to do with a GitHub Action to ensure that a custom GlyphData.xml is properly referenced? I’m seeing different results from a straight export from Glyphs vs. what the same file exported through a GitHub Action is doing and it mostly seems related to things I’ve defined in my custom glyph data.

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [April 30, 2026, 1:49pm UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/34 "2026-04-30T13:49:26Z")

</div>

Custom GlyphData.xml files are currently not used. I will add support for that.

---

<div class="post-metadata">

**Author:** ![lianghai](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/lianghai/32/32849_2.png) [@lianghai](https://forum.glyphsapp.com/u/lianghai)\
**Post date:** [May 4, 2026, 7:32pm UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/35 "2026-05-04T19:32:31Z")

</div>

This CLI is heading towards a strange direction.

I thought it was indeed a good idea to first provide a simple exporting API, because that’s a common and special use case (the whole point of using a font editor is to produce fonts, anyway). But then when scripting was added, wasn’t that a good opportunity to generalize scripting to be the low-level, generic API? Instead it became another specialized API for “editing”.

If you make, eg, `glyphs run <path-to-script>` the generic, low-level API, any advanced use cases (including special exporting logic; eg, any complicated filtering logic can be better done in Python) can be handled by that. Then the `glyphs export` API (or any other specialized ones) can be streamlined to only support the common use cases.

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [May 4, 2026, 8:08pm UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/36 "2026-05-04T20:08:18Z")

</div>

I agree that `glyphs edit` sounds a bit specific for the general function it serves. Editing the source files were the initial requests for this functionality, so the subcommand name was a natural pick. You still need to save manually from the script, so as long as you don’t, consider the command like “editing” a source file by opening it in the Glyphs app.

`glyphs run` is good; maybe “run” implies launching the app instead of running a script. Feedback is welcome. If we do change the subcommand name, `glyphs edit` would still work for the foreseeable future as an alias.

---

<div class="post-metadata">

**Author:** ![lianghai](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/lianghai/32/32849_2.png) [@lianghai](https://forum.glyphsapp.com/u/lianghai)\
**Post date:** [May 6, 2026, 12:37am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/37 "2026-05-06T00:37:49Z")

</div>

`glyphs run` was the first thing coming into my mind, as an influence from [`uv run`](https://docs.astral.sh/uv/guides/scripts/), etc. But now I’ve realized that the required argument `<source>` (not the script) ~~is~~ _may still need to be_ the command’s actual object, `glyphs run <source> --script <path>` doesn’t make that much sense anymore.

Is it intentional that `glyphs <source>` (without a subcommand) is reserved? I feel `glyphs <source> --script <path>` would be the natural command for simply opening a file and running a script (this also makes it clear that `glyphs export` is a specialized command). Probably `glyphs open <source> --script <path>` feels more neutral/basic, or probably, just a minimal API `glyphs run <path>` (not even `<source>`) that forces users to call `Glyphs.open()` to open files.

Btw, providing `glyphs help <subcommand>` as a duplicate of the standard `glyphs <subcommand> --help` is probably creating more confusion than the convenience (if there’s any).

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [May 6, 2026, 9:21am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/38 "2026-05-06T09:21:29Z")

</div>

> [@lianghai](#):
>
> Is it intentional that `glyphs <source>` (without a subcommand) is reserved?

Yes. It would create ambiguity with the subcommands and I have seen a few other command-line tools move away from providing such a default subcommand.

> [@lianghai](#):
>
> just a minimal API `glyphs run <path>` (not even `<source>`) that forces users to call `Glyphs.open()` to open files.

I like the idea that the source can be optional, which it is currently not with `glyphs edit`. That way, you can interact with the Glyphs API even when you don’t need to do so in the context of a preexisting source file. `glyphs run <python-script>` sounds natural and can be extended to also accept a list of source files to pre-open or an `--interactive` flag for a REPL-style interaction instead of suppling a script file (not necessarily in the near future).

> [@lianghai](#):
>
> Btw, providing `glyphs help <subcommand>` as a duplicate of the standard `glyphs <subcommand> --help` is probably creating more confusion than the convenience (if there’s any).

That is done by the command-line arguments parser library. Not sure I would have provided such an alias otherwise but it also does not bother me.

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [May 17, 2026, 11:50pm UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/39 "2026-05-17T23:50:37Z")

</div>

**glyphs-cli 0.4** is available.

You can install the updated version with

```sh
pip install --upgrade glyphs-cli

```

Changes:

- a new `glyphs run` command that supersedes `glyphs edit`
- more flexible instance selection in config files
- `Glyphs.open(…)` and `someFont.save(…)` now work in scripts
- custom GlyphData.xml files are used, when present
- Glyphs app selection now defaults to the latest installed version

Read the complete documentation at [https://pypi.org/project/glyphs-cli/](https://pypi.org/project/glyphs-cli/)

### `glyphs run`

There is a new command: `glyphs run`. It supersedes the `glyphs edit` command and adds additional features.

You can run a Python script to work on source files, just like the `glyphs edit` command did:

```sh
# used to be: glyphs edit SomeFont.glyphs --script SomeScript.py
glyphs run SomeScript.py --input SomeFont.glyphs
# or using short option names:
glyphs run SomeScript.py -i SomeFont.glyphs

```

(`glyphs edit` continues to function as before, but it is no longer documented.)

There can be multiple source files:

```sh
glyphs run SomeScript.py -i SomeFont.glyphs OtherFont.glyphs

```

What’s new is that you can also run a script without providing any source file:

```sh
glyphs run SomeScript.py

```

This lets you run scripts that don’t need to work on a source file. For example, you may want to programmatically create a GSFont object or load the font yourself using

```sh
font = Glyphs.open(pathToSourceFile)

```

This means that you can run a Python file using `glyphs run <script>` instead of `python3 <script>` to use the Glyphs API inside the script. Furthermore, you can use it as a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) to make your scripts executable programs:

```auto
#!/usr/bin/env glyphs run
...

```

Invoke `glyphs run` without a script file to enter a simple Python shell (REPL):

![Demo](https://forum.glyphsapp.com/uploads/default/original/3X/6/0/60ed19579b2db99bcb2385899939b61cb21ba381.gif)

### More flexible instance selection

In config files, you can now filter for instances not just by name and index but also:

- family name
- type (variable or not)
- a custom predicate using NSPredicate syntax

See the _Export configuration_ section [in the docs](https://pypi.org/project/glyphs-cli/#:~:text=Export%20configuration) for details.

### New app selection default

Before, when the `--app`/`-a` option was not set, the CLI would use the app version with which the source file was last saved. When no such app version was installed, the command failed.

Now, the CLI uses the latest app version that is installed on your Mac by default.

Choosing a custom version, for example, `--app 3` or `--app 3123`, continues to work as before. To use the app version from the source file, use the new `source` keyword: `--app source`.

* * *

There is now a single documentation for the CLI so you don’t have to piece it together from these forum posts: [https://pypi.org/project/glyphs-cli/](https://pypi.org/project/glyphs-cli/)

---

<div class="post-metadata">

**Author:** ![lianghai](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/lianghai/32/32849_2.png) [@lianghai](https://forum.glyphsapp.com/u/lianghai)\
**Post date:** [May 18, 2026, 1:47am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/40 "2026-05-18T01:47:18Z")

</div>

Amazing! This new command feels quite natural.

> To use the app version from the source file, use the new `source` keyword: `--app source` .

Note this keyword is not yet documented in `glyphs version resolve -h`, even though `glyphs export -h` refers readers to it. Related notes:

- It’ll be also valuable to have a keyword like `stable` to ignore cutting edge versions, especially now the latest installed version is used by default.
- If the `--beta` option of `glyphs version install` is meant to refer to “cutting edge”, can we just use the latter term since it’s what’s always shown in the GUI?

The `--input` argument seems to be introducing yet another term for dealing with a font – in addition to “open” as in `Glyphs.open()`, “font/documents” as in `Glyphs.fonts/documents`, and “source” as in `glyphs export <source>`. Some options:

- It can be helpful to align this argument’s naming with the Python API (`Glyphs.open()`), as it’s supposed to be a shorthand of what’s already possible in Python.
- Or, as Glyphs is a font editor, its “input” is normally just “fonts” – doesn’t need to be named so abstractly, especially because `glyphs run`, as such a general purpose command, isn’t where the input/output analogy works well.

Looking at the `--input` argument, I also realized that this API now uses both the comma-separated style and the `nargs="+"` style (`--format` and `--container`) for specifying a list of arguments.

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [May 18, 2026, 6:46am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/41 "2026-05-18T06:46:03Z")

</div>

> [@lianghai](#):
>
> Note this keyword is not yet documented in `glyphs version resolve -h`, even though `glyphs export -h` refers readers to it.

`glyphs version resolve` does not take a source file which is why the `source` option was missing there. I think it’s best if I just copy the docs to the `export`/`run` subcommands and document the `source` keyword there as well.

> [@lianghai](#):
>
> - It’ll be also valuable to have a keyword like `stable` to ignore cutting edge versions, especially now the latest installed version is used by default.

Locally, there is nothing that indicates whether a version is cutting-edge or not. So, a `stable` keyword would require network access or fail. Maybe that is good enough.

> [@lianghai](#):
>
> The `--input` argument seems to be introducing yet another term for dealing with a

Here, the reference was mostly other command-line tools. `--input`/`-i` is common to provide primary or secondary input files.

`--open` would shorten to `-o`, but I would like to reserve that for output options. Additionally, there might be other subcommands in the future that also take source files as input but do not use Python scripting or “open” the sources in any meaningful way, so `--input` works more generally.

> [@lianghai](#):
>
> Looking at the `--input` argument, I also realized that this API now uses both the comma-separated style and the `nargs="+"` style (`--format` and `--container`) for specifying a list of arguments.

Options like `--format` or `--plugins` feel like a “little language” with their own keywords and other shortcuts all packed into a string.

Options like `--input` take standard file paths only. The argument-split style allows for shell expansions like `--input *.glyphs`.

---

<div class="post-metadata">

**Author:** ![RobertJanes](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/robertjanes/32/3982_2.png) [@RobertJanes](https://forum.glyphsapp.com/u/RobertJanes)\
**Post date:** [May 22, 2026, 10:45am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/42 "2026-05-22T10:45:04Z")

</div>

@FlorianPircher Thanks for all your work on this! Especially loving the `run` command addition.

Unless I’m doing something wrong, with the latest version `export` will not run unless I explicitly provide a `--python` framework file?

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://forum.glyphsapp.com/user_avatar/forum.glyphsapp.com/florianpircher/32/30457_2.png) [@FlorianPircher](https://forum.glyphsapp.com/u/FlorianPircher)\
**Post date:** [May 22, 2026, 11:08am UTC](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022/43 "2026-05-22T11:08:48Z")

</div>

Nothing with regard to the `--python` option changed since its addition.

Do you get an error message? Or does something fail?

What does this command print?

```sh
defaults read com.GeorgSeifert.Glyphs3 GSPythonFrameworkPath

```

[Previous page](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022.md?page=1)

[Next page](https://forum.glyphsapp.com/t/command-line-tool-for-glyphs/36022.md?page=3)
