Skip to content

Search a feature or API · Enter opens first result · Esc closes

Go queries, made simple.

One client. Many data types.
Shared cache, background refresh, and focused invalidation.

Get started
go get github.com/Waterkyuu/soroi
Go 1.22+ · Zero core dependencies· MIT

One client. Different result types.

A User profile and a []User list share the same client, while keeping their types.

type User struct {
Name string
}
loadUser := func(context.Context) (User, error) {
return User{Name: "Alice"}, nil
}
loadUsers := func(context.Context) ([]User, error) {
return []User{{Name: "Alice"}}, nil
}
client := soroi.NewClient(soroi.Options{
StaleTime: time.Minute,
})
defer client.Close()
profile := soroi.Query(client, "user:42", loadUser)
users := soroi.Query(client, "users", loadUsers)
defer profile.Close()
defer users.Close()
Read the complete guide