[ANN] daktilo: a simple-minded Cgo interface around Typst

77 views
Skip to first unread message

Sebastien Binet

unread,
Oct 22, 2025, 11:45:21 AMOct 22
to golang-nuts
hi there,

I’ve just tagged dak...@v0.3.1:

https://codeberg.org/sbinet/daktilo
https://pkg.go.dev/codeberg.org/sbinet/dak...@v0.3.1

It’s a Go package that uses a Cgo package wrapping a simple-minded FFI around a couple of Typst crates, mostly statically compiled.

```
import (
"bytes"
"fmt"
"log"
"strings"

"codeberg.org/sbinet/daktilo"
)

func ExampleCompilePDF() {
dst := new(bytes.Buffer)
err := daktilo.CompilePDF(dst, strings.NewReader(`

#set document(
date: datetime(year:2009,month:11,day:10),
author: "daktilo",
)

#set page(width: 200pt, height: 300pt)
#set text(font: "New Computer Modern", weight: 450)

#show raw: set text(font: "New Computer Modern Mono", weight: 450)

= H1
== H2
=== H3

Hell·o from *Typ·st* and _Go_.

$ sum_(k=1)^n k = (n(n+1)) / 2 $

List:
- item a
- item b

Enumeration:
+ item a
+ item b

*Bye.*
`))
if err != nil {
log.Fatal(err)
}

fmt.Printf("PDF: %d bytes.\n", len(dst.Bytes()))

// Output:
// PDF: 16694 bytes.
}
```

There are also two commands provided with the current daktilo module:
- cmd/daktilo that wraps daktilo.CompilePDF,
- cmd/md2typ that converts a subset of Markdown (no raw-HTML support) to Typst, leveraging goldmark plugin machinery.

I plan to expand a bit the exported Rust-FFI to allow producing PNGs and SVGs (and HTML once Typst-0.14.x is out), taking fonts from the system and better error reporting (right now, the error is exposed to Go as a dumb string).

I am a very new Rust programmer so the plans above may not come to fruition just about now :)
(also, if you have constructive criticism about my Rust style, I’ll gladly consider it, although I understand it "may not" be the best place to seek advice on Rust :P)

I may split the module into a pure-Go one and a Cgo one (with the static library .a stored in, to improve the go-get'ability of daktilo)

cheers,
-s

Reply all
Reply to author
Forward
0 new messages