Hofstadter Documentation
Welcome to the documentation site.
hof
is CUE powered tools and capabilities
hof
helps you use CUE to enhance your work with
data models, schemas, code generation, task workflows, and more.
hof
is a CLI tool you add to your workflow.
- Augment data, config, and schemas with CUE to improve consistency, gain confidence, and unlock new possibilities
- Generate multiple Yaml and JSON files in one-shot, from a CUE based source of truth
- Generate much of the application code, work directly in the output, regenerate without loss
- Explore data or config with the TUI, work with it using CUE in live-reload mode
- Run workflows with automatic task dependency inference, the right tasks are run in the right order
code generation | Data + templates = _ (anything), technology agnostic |
data model | Define and manage data models, life-cycle features |
task engine | Extensible task and DAG workflow engine |
CUE cmds | Core def, eval, export, and vet commands |
creators | bootstraping and starter kits from any repo |
modules | CUE module dependency management |
tui | A terminal interface to Hof and CUE |
chat | Combine LLM and Hof code gen for better, scalable results |
There are two modes to use hof
- building reusable modules
- creating applications
Like most languages and frameworks, there are two types of users.
Most users will build applications for some purpose, using libraries written by others.
A smaller number will build reusable modules, like the packages and libraries you use today.
hof
has the same relationship for its features, when packaged as modules.
Augment your workflows
hof
is a CLI tool you will add to your workflows.
We know developers have their own preferences
for tools, languages, and platforms.
hof
can work with any of them.
You will typically use hof
at development time,
committing the generated code to git.
hof
is technology agnostic.
You can generate code for any language or technology,
and more often than not you will generate several together.
From your data models, the source of truth,
hof
can generate consistent code across the stack.
hof
captures common patterns and boilerplate.
Through the templates and code generation modules,
so we can remove much of the repetitive tasks and coding effort.
Updates to the data model can be replicated instantly through the stack.
hof
modules span technologies.
With composable modules, we can create full-stack applications
and the infrastructure to run them by importing from the ecosystem.
Logical application features can be composed
as bigger building blocks from any language, framework, or tool.
hof
continues to work as your model evolves.
Rather than a one-time bootstrapping at the beginning of development,
you can update your designs or data model and regenerate code.
Think of code generated with hof
as living boilerplate or scaffolding.
You can also add custom code directly in the output
and hof
will ensure it stays as you regenerate your application.
What can you do with hof
?
Generate anything
Applications all start as files and hof
generates directories of files.
You can generate the source files, configuration, deployment, and CI files needed.
If it’s made of files, you can generate it with hof
.
Consolidate the data model
The same data model appears at each level of the tech stack. You should only have to write it down once, as a single-source of truth. More than just the shape, this should also include the rules.
Capture common code and application patterns
Whether it is writing api handlers, CRUD, client libraries, or data validation, there are many patterns per data model. There are also application wide patterns. When starting server setup like logging and wiring up the router.
Manage model and application versions.
Data models evolve with an application and need management. From updating the code and databased to deployment updates and supporting older clients, you can have multiple versions being referenced. You latest backend will need to handle many previous versions.
Work directly in the (re)generated code
With hof
you write custom code directly in the generated output,
where it naturally belongs. Your final code should look the same.
When you change your data model or designs, hof
uses diff3
to ensure your code is left in place and
Share and control modules with dependency management
Sharing models and code generation is core to hof
and central to solving problems of interoperability between
different teams and services.
Both design and generators are managed with versions
and dependency management.
Apply fleet wide fixes and updates
Deploying shared security and bug fixes across many applications should be easier. This should apply equally for improvements in our code patterns and practices.
Extensible generators and models
Both generators and models can be combined through dependencies and imports.
You can extend, override, or otherwise customize as you need.
They are separate from the tool so there is no need to change hof
to enable new technologies or patterns.