Project
Packages
Fendlemark ships as one Go module and one npm package. Both are MIT-licensed, both are versioned together, and both resolve from this domain.
Go module
$ go install fendlemark.app/fendlemark/cmd/fendlemark@latest
$ go get fendlemark.app/fendlemarkModule path fendlemark.app/fendlemark. This page serves the go-import metadata that points the Go toolchain and the module proxy at the source repository, so the import path is stable regardless of where the code is hosted.
| Package | What it is |
|---|---|
fendlemark | Top level. IntegrateEasy, New, Run, Version. |
fendlemark/adapter | The Adapter interface, Facet, Descriptor, registration. |
fendlemark/adapters/{mlflow,metaflow,argo,kubeflow} | The four built-in adapters. |
fendlemark/lattice | Deterministic reconciliation of facets into entities and correlations. |
fendlemark/config | fendlemark.yaml loading, defaults, precedence. |
fendlemark/server | HTTP API, server-sent events, embedded console. |
fendlemark/auth/fri | Respiratory Identity signatures and matching. |
fendlemark/cmd/fendlemark | The CLI. |
Full reference: Go API. Source: github.com/TopherGopher/fendlemark. Documentation on pkg.go.dev.
The one-call integration
Most embedders want every adapter they have credentials for, connected and reconciled, without writing configuration. That is IntegrateEasy:
import "fendlemark.app/fendlemark"
fm, err := fendlemark.IntegrateEasy(ctx) // discovers MLflow, Metaflow, Argo, Kubeflow from the environment
if err != nil { return err }
defer fm.Close()
for _, e := range fm.Lattice().Query(lattice.Query{Kinds: []adapter.Kind{adapter.KindRun}, Limit: 20}) {
fmt.Println(e.ID, e.Title, e.Status, len(e.Facets), "facets")
}IntegrateEasy reads MLFLOW_TRACKING_URI, METAFLOW_SERVICE_URL, ARGO_SERVER and KUBEFLOW_PIPELINES_URL, enables every adapter whose variable is set, connects them concurrently, performs the initial reconciliation, and returns a running instance. The Keepers resisted adding it for two releases on the grounds that configuration files are a form of respect, and relented in FDR-035 when it was pointed out that the function could be documented as a convenience rather than a recommendation.
npm package
$ npm install @fendlemark/ui@fendlemark/ui contains the console's Vue 3 components, the design tokens, and the lattice client. Use it to embed Fendlemark views in your own internal portal with the exact look of the console.
import { integrateEasy, FmShell, FmEntityTable } from '@fendlemark/ui'
import '@fendlemark/ui/tokens.css'
const lattice = integrateEasy({ baseUrl: 'https://platform.example.internal' })
// lattice.entities, lattice.adapters, lattice.generation are reactive and update over SSEComponent reference: The console. Package page on npm.
Versions
The Go module and the npm package share a version number and are tagged together under release governance. Current: 0.9.5. Every release is listed in the changelog and announced on the Atom feed.
Repository layout
fendlemark/
├── go.mod fendlemark.app/fendlemark
├── fendlemark.go IntegrateEasy, New, Run
├── adapter/ interface, facets, registration, conformance
├── adapters/ mlflow, metaflow, argo, kubeflow
├── lattice/ reconciler
├── config/ server/ auth/fri/ cmd/fendlemark/
├── ui/ @fendlemark/ui (Vue 3, Vite, TypeScript)
└── site/ this documentation