How can I configure Tinymist's preview to use a specific browser profile (with helix and Kate)?

Hi there,
I started checking typst out and tinymist seems like the preferred LSP for it.
I’ve been using the LSP just fine with both helix and Kate, but I’m having trouble configuring the preview the way I want on both editors.

On helix, the preview opens fine in my default browser, but I’m looking for a way to open it in a specific firefox profile (I know it’s possible, I just cannot figure out how).
TL;DR: Could someone point me out to the config option that tells tinymist preview to call a specific browser?

Secondly, on Kate, I just can’t seem to make the preview run, despite tinymist itself working just fine as an LSP. The config I’m using is:

{
    "servers": {
        "typst": {
            "command": ["tinymist"],
            "url": "https://github.com/Myriad-Dreamin/tinymist",
            "highlightingModeRegex": "^Typst$",
            "settings": {
                "preview.background.enabled": true,
                "preview.background.args": ["--data-plane-host=127.0.0.1:0", "--open"]
            }
        }
    }
}

cc @dblsaiko for Kate, since you seem to be using it :pray:

I haven’t tried using the preview with Kate, I just have typst watch and a PDF viewer running separately. If I had to guess, Kate just doesn’t support this. You might want to open a bug here: https://bugs.kde.org/

Thanks for the reply!
When you said that Kate might not support this, could you explain why that would be? I’d expect the preview to be handled entirely by tinymist and be completely IDE-agnostic…

If I do end up raising a bug on the KDE tracker, what info would be useful there?

Here is what the LSP output gives:

[2025-12-06T13:28:49Z INFO  tinymist::lsp] server initialized
[2025-12-06T13:28:49Z INFO  sync_ls::server] notify initialized succeeded in 20.06µs
[2025-12-06T13:28:49Z INFO  sync_ls::server] notifying workspace/didChangeConfiguration
[2025-12-06T13:28:49Z INFO  tinymist::config] ServerState: config update_by_map {"preview.background.args":["--data-plane-host=127.0.0.1:0","--open"],"preview.background.enabled":true}
[2025-12-06T13:28:49Z INFO  tinymist::config] Server: running lsp in full mode
[2025-12-06T13:28:49Z INFO  tinymist::lsp] new settings applied
[2025-12-06T13:28:49Z INFO  sync_ls::server] notify workspace/didChangeConfiguration succeeded in 78.78µs
[2025-12-06T13:28:49Z INFO  sync_ls::server] notifying textDocument/didOpen
[2025-12-06T13:28:49Z INFO  tinymist::lsp] did open file://path/to/ifs.typ
[2025-12-06T13:28:49Z INFO  tinymist::input] the task of the primary is changing to TaskInputs { entry: Some(EntryState { root: Some("."), main: Some(@ws/p0:0.0.0/ifs.typ) }), inputs: None }
[2025-12-06T13:28:49Z INFO  tinymist::input] file focused[implicit,o]: Some("path/to/ifs.typ")
[2025-12-06T13:28:49Z INFO  sync_ls::server] notify textDocument/didOpen succeeded in 488.75µs
[2025-12-06T13:28:49Z INFO  sync_ls::server] handling textDocument/documentSymbol - (2)
[2025-12-06T13:28:49Z INFO  sync_ls::server] handling textDocument/semanticTokens/full - (3)
[2025-12-06T13:28:49Z INFO  tinymist::input] the task of the primary is changing to TaskInputs { entry: Some(EntryState { root: Some("."), main: Some(@ws/p0:0.0.0/ifs.typ) }), inputs: None }
[2025-12-06T13:28:49Z INFO  sync_ls::server] handled  textDocument/documentSymbol - (2) in 171.61µs
[2025-12-06T13:28:49Z INFO  tinymist::input] file focused[implicit,t]: Some("path/to/ifs.typ")
[14:28:49  Serveur LSP Journal] typst@.
[2025-12-06T13:28:49Z INFO  tinymist_project::compiler] path/to/ifs.typ: compilation succeeded in 57.812886ms
[2025-12-06T13:28:49Z INFO  tinymist::project] skipping emit pending reasons for 3 != 2

According to DeepWiki, Tinymist uses the open crate to open the browser, without providing any customization.
The open crate uses the default browser configured on the system. You can see the details at the UNIX Desktop section in docs or these lines in unix.rs.

So perhaps you have to disable tinymist’s default feature (--no-open), and define a companion command in helix to open the browser.

1 Like

OK, it turns out that the person I had seen do this is using a config that seems to be neovim-specific: #1 - Ouvrir la preview dans un profil firefox spécifique - pmassot/typst_cdl2025 - Codeberg.org

So I guess what I need to figure out is how to pass a “companion” command to the helix LSP manager to open the URL with a specific firefox once tinymist is started…
I’ll also discuss with the KDE people to see how things could be handled in Kate before opening an actual issue.
I’ll update this thread if I can figure something out.

2 Likes