conure

module
v0.0.0-...-257ac8b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 7, 2026 License: AGPL-3.0

README

Conure

Go Report Card Go Version

Conure is a Kubernetes-native application platform that lets developers ship applications to Kubernetes without writing or maintaining raw manifests. You describe an application as a small set of typed Components — services, jobs, data stores — and Conure renders, deploys, and reconciles the underlying Kubernetes resources for you. It bundles an API server, a CLI, and a controller so the same model can be driven from a terminal, an automation pipeline, or directly through the API.

Features

  • Component-based application model. Applications are composed of typed components rendered through Timoni modules, keeping the developer-facing surface small while still producing idiomatic Kubernetes resources.
  • Custom resources. Application and Component CRDs are reconciled by a controller-runtime based controller, with drift detection and explicit Rendered / Deployed / Ready status conditions.
  • Environments and revisions. Per-environment variable scopes, revision history with comments, and a restart workflow that propagates through pod templates.
  • First-class CLI. Manage organizations, applications, components, environments, variables, deploys, logs, and revisions from conure on the command line.
  • REST API. A Gin-based HTTP API with JWT authentication backs the CLI and can be used directly for integrations.
  • Pluggable secrets. Secret material can be stored locally for development or backed by Kubernetes Secrets in cluster.

Architecture

Conure ships as three cooperating processes:

  • API server (cmd/api-server) — REST API for organizations, applications, components, environments, variables, and revisions. Persists state in MongoDB and issues JWTs for the CLI and other clients.
  • Controller (cmd/control) — Kubernetes controller built with controller-runtime. Watches Application and Component custom resources, renders them through Timoni, applies the result, and reports status back through typed conditions.
  • CLI (cmd/cli) — conure binary that talks to the API server. Supports multiple profiles, per-directory links to a component, and text, json, or yaml output for scripting.

The custom resource definitions live under apis/core/v1alpha1 and are installed into the cluster like any other CRD.

Getting started

Prerequisites
  • Go 1.26 or newer
  • Docker and Docker Compose
  • A Kubernetes cluster (a local one such as Kind or k3d is fine)
  • kubectl configured against that cluster
Build
# Build the controller
make build

# Build the CLI
make build-cli

The resulting binaries land in bin/manager and bin/conure.

Run the development stack
  1. Copy the example environment file and adjust it for your setup:

    cp config.env .env
    

    At a minimum, set DB_URL to point at a reachable MongoDB instance. The docker-compose.yml file in the repo provides one out of the box.

  2. Start MongoDB:

    docker-compose up -d mongo
    
  3. Start the API server:

    go run ./cmd/api-server/main.go runserver
    

    The server listens on localhost:8080 by default.

  4. Create a superuser so you can sign in from the CLI:

    go run ./cmd/api-server/main.go createsuperuser -email=admin@example.com
    
  5. Install the CRDs and run the controller against your cluster:

    make install
    make run
    
Use the CLI

Log in, point the CLI at your local API server, and explore:

conure login --server http://localhost:8080
conure org list
conure app list
conure component status

conure --help lists every available command.

Deploying to a cluster

To run Conure inside Kubernetes rather than locally:

# Build and push the controller image
make docker-build docker-push IMG=<your-registry>/conure-controller:tag

# Install the CRDs and deploy the controller
make install
make deploy IMG=<your-registry>/conure-controller:tag

The deploy/ directory contains a Helm chart that can be used to install the API server, controller, and supporting resources together.

Testing

The test suite combines plain Go unit tests, fake-client handler tests, and envtest-based controller integration tests:

make test

make test downloads the matching kubebuilder envtest assets the first time it runs and writes coverage output to cover.out.

Contributing

Contributions are welcome. If you plan to work on something larger than a small fix, please open an issue first so we can discuss scope and direction. When sending a pull request:

  1. Fork the repository and create your branch from main.
  2. Run make fmt, make vet, and make test locally.
  3. Keep commits focused and write descriptive commit messages.
  4. Open the pull request against main and link any related issues.

By contributing, you agree that your contributions will be licensed under the project's AGPL-3.0 license.

License

Conure is distributed under the terms of the GNU Affero General Public License, version 3. See LICENSE for the full text.

Directories

Path Synopsis
apis
core/v1alpha1
Package v1alpha1 contains API Schema definitions for the v1alpha1 API group +kubebuilder:object:generate=true +groupName=core.conure.io
Package v1alpha1 contains API Schema definitions for the v1alpha1 API group +kubebuilder:object:generate=true +groupName=core.conure.io
cmd
api-server command
api-server/cli
Package cli holds API-server admin sub-commands.
Package cli holds API-server admin sub-commands.
api-server/credentials
Package credentials is the org-scoped credential API: the MongoDB source of truth for registry/git credentials a deploy later projects into Kubernetes Secrets.
Package credentials is the org-scoped credential API: the MongoDB source of truth for registry/git credentials a deploy later projects into Kubernetes Secrets.
api-server/system
Package system exposes cluster-level metadata that the CLI needs to make build decisions: target platform (so M-series Macs cross-build for amd64 clusters) and Kubernetes version.
Package system exposes cluster-level metadata that the CLI needs to make build decisions: target platform (so M-series Macs cross-build for amd64 clusters) and Kubernetes version.
api-server/users
Package users implements the admin-only user management API.
Package users implements the admin-only user management API.
cli command
control command
internal
cli/apiclient
Package apiclient is the typed HTTP client for the Conure API as used by the CLI.
Package apiclient is the typed HTTP client for the Conure API as used by the CLI.
cli/config
Package config owns the machine-local CLI config at ~/.conure/config.json.
Package config owns the machine-local CLI config at ~/.conure/config.json.
cli/envfile
Package envfile parses dotenv-style files for `conure var import`.
Package envfile parses dotenv-style files for `conure var import`.
cli/link
Package link owns the per-repo .conure/link.json file.
Package link owns the per-repo .conure/link.json file.
cli/ui
Package ui centralizes user-facing output for the conure CLI: colored messages, tables, spinners, and the JSON-vs-text output split.
Package ui centralizes user-facing output for the conure CLI: colored messages, tables, spinners, and the JSON-vs-text output split.
credentials
Package credentials owns the naming/label scheme and the Kubernetes Secret shapes for conure's org-scoped credentials, shared by the deploy-time projection (api-server providers) and the build Job wiring so there is one implementation of "what does a projected credential Secret look like".
Package credentials owns the naming/label scheme and the Kubernetes Secret shapes for conure's org-scoped credentials, shared by the deploy-time projection (api-server providers) and the build Job wiring so there is one implementation of "what does a projected credential Secret look like".
fieldroles
Package fieldroles resolves conure's well-known field "roles" to concrete locations inside a component's free-form values map.
Package fieldroles resolves conure's well-known field "roles" to concrete locations inside a component's free-form values map.
k8s
render
Package render defines the engine-agnostic interface that the component controller uses to render and apply manifests.
Package render defines the engine-agnostic interface that the component controller uses to render and apply manifests.
render/apply
Package apply wires the shared fluxcd/pkg/ssa apply path used by render adapters that don't have their own server-side-apply implementation.
Package apply wires the shared fluxcd/pkg/ssa apply path used by render adapters that don't have their own server-side-apply implementation.
render/helm
Package helm adapts Helm v4 chart rendering to the render.Engine interface.
Package helm adapts Helm v4 chart rendering to the render.Engine interface.
render/timoni
Package timoni adapts the Timoni module manager to the render.Engine interface.
Package timoni adapts the Timoni module manager to the render.Engine interface.
pkg
api
client/core_conure/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
client/core_conure/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
client/core_conure/typed/core/v1alpha1
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
client/core_conure/typed/core/v1alpha1/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
cue

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL