CUE is an open source data constraint language which aims to simplify tasks involving defining and using data.

Go Reference Github GolangCI Go 1.14+ platforms

The CUE Data Constraint Language

Configure, Unify, Execute

CUE is an open source data constraint language which aims to simplify tasks involving defining and using data.

It is a superset of JSON, allowing users familiar with JSON to get started quickly.

What is it for?

You can use CUE to

  • define a detailed validation schema for your data (manually or automatically from data)
  • reduce boilerplate in your data (manually or automatically from schema)
  • extract a schema from code
  • generate type definitions and validation code
  • merge JSON in a principled way
  • define and run declarative scripts

How?

CUE merges the notion of schema and data. The same CUE definition can simultaneously be used for validating data and act as a template to reduce boilerplate. Schema definition is enriched with fine-grained value definitions and default values. At the same time, data can be simplified by removing values implied by such detailed definitions. The merging of these two concepts enables many tasks to be handled in a principled way.

Constraints provide a simple and well-defined, yet powerful, alternative to inheritance, a common source of complexity with configuration languages.

CUE Scripting

The CUE scripting layer defines declarative scripting, expressed in CUE, on top of data. This solves three problems: working around the closedness of CUE definitions (we say CUE is hermetic), providing an easy way to share common scripts and workflows for using data, and giving CUE the knowledge of how data is used to optimize validation.

There are many tools that interpret data or use a specialized language for a specific domain (Kustomize, Ksonnet). This solves dealing with data on one level, but the problem it solves may repeat itself at a higher level when integrating other systems in a workflow. CUE scripting is generic and allows users to define any workflow.

Tooling

CUE is designed for automation. Some aspects of this are:

  • convert existing YAML and JSON
  • automatically simplify configurations
  • rich APIs designed for automated tooling
  • formatter
  • arbitrary-precision arithmetic
  • generate CUE templates from source code
  • generate source code from CUE definitions (TODO)

Download and Install

Release builds

Download the latest release from GitHub.

Install using Homebrew

Using Homebrew, you can install using the CUE Homebrew tap:

brew install cuelang/tap/cue

Install from Source

If you already have Go installed, the short version is:

GO111MODULE=on go get cuelang.org/go/cmd/cue

Or, if you are using Go 1.16:

go install cuelang.org/go/cmd/cue@latest

This will install the cue command line tool.

For more details see Installing CUE.

Learning CUE

The fastest way to learn the basics is to follow the tutorial on basic language constructs.

A more elaborate tutorial demonstrating of how to convert and restructure an existing set of Kubernetes configurations is available in written form.

References

Contributing

Our canonical Git repository is located at https://review.gerrithub.io/q/project:cue-lang%252Fcue.

To contribute, please read the Contribution Guide.

To report issues or make a feature request, use the issue tracker.

Changes can be contributed using Gerrit or Github pull requests.

Code of Conduct

Guidelines for participating in CUE community spaces and a reporting process for handling issues can be found in the Code of Conduct.

Contact

You can get in touch with the cuelang community in the following ways:


Unless otherwise noted, the CUE source files are distributed under the Apache 2.0 license found in the LICENSE file.

This is not an officially supported Google product.

Comments
  • cue: ResolveReferences option not work in method

    cue: ResolveReferences option not work in method "Syntax"

    Originally opened by @leejanee in https://github.com/cuelang/cue/issues/867

    What version of CUE are you using (cue version)?

    $ cue version
    v0.3.0-beta.8
    

    What did you do?

    The code is as follows

           var src =`
    t: {name: string}
    output: [...t]
    `
    	var r cue.Runtime
    	inst,_:=r.Compile("-",src)
    	ct,_:=format.Node(inst.Value().Lookup("output").Syntax(cue.ResolveReferences(true)))
    	fmt.Println(string(ct))
    

    After running the code,I get

    [...t]
    

    But import the v0.2.2 version, The result is as follows

    [...{
            name: string
    }]
    

    and, This is what i expected

  • cue: optional fields cannot be referenced in for loops of optional fields

    cue: optional fields cannot be referenced in for loops of optional fields

    What version of CUE are you using (cue version)?

    $ cue version
    0.4.3
    

    Does this issue reproduce with the latest release?

    yes

    What did you do?

    parameter: {
    	optioanlArr?: [...{
    		name:  string
    		data?: string
    	}]
    }
    
    outputs: {
    	for v in parameter.optionalArr if v.data != _|_  {
    		name: v.name
    	}
    }
    

    What did you expect to see?

    This is also the result in cue 0.2.2:

    outputs: {
        for v in parameter.optionalArr if false {
            name: v.name
        }
    }
    

    What did you see instead?

    outputs: {
        for v in parameter.optionalArr if v.data != _|_ // explicit error (_|_ literal) in source
        {
            name: v.name
        }
    }
    
  • cue: use dots as a separator for folding instead of spaces?

    cue: use dots as a separator for folding instead of spaces?

    Originally opened by @ghost in https://github.com/cuelang/cue/issues/60

    This input:

    outer middle inner: 3
    

    produces this with CUE

    {
       "outer": {
          "middle": {
             "inner": 3
          }
       }
    }
    

    and this with YAML:

    {
       "outer middle inner": 3
    }
    

    this seems like too much sugar to be worth it

    https://github.com/cuelang/cue/blob/master/doc/tutorial/basics/fold.md

  • cue: syntax converted from value lost close function

    cue: syntax converted from value lost close function

    What version of CUE are you using (cue version)?

    $ cue version
    v0.4.3-beta.1
    

    Does this issue reproduce with the latest release?

    ctx := cuecontext.New()
    v := ctx.CompileString(`
    foo: close({
       value: 100
    })
    `)
    
    //formats node in canonical cue fmt style
    formatting,err:=format.Node(v.Syntax(cue.ResolveReferences(true)))
    fmt.Println(string(formatting))
    

    Execute the above code, the result is

    {
    	foo: {
    		value: 100
    	}
    } <nil>
    

    What did you do?

    What did you expect to see?

    The expected result should be

    {
    	foo: close({
    		value: 100
    	})
    } <nil>
    

    This is a bug of Syntax() with option ResolveReferences?

  • Add an option to quote all strings in YAML

    Add an option to quote all strings in YAML

    Currently, exporting to YAML is a mine field, because most things well defined as strings in a CUE file will be exported unquoted in YAML.

    Of course, because YAML interprets magically most unquoted things, this leads to plenty of issues. E.G:

    • dates can be wrongly interpreted: https://github.com/cue-lang/cue/issues/1076
    • the norway problem: https://hitchdev.com/strictyaml/why/implicit-typing-removed/
    • the python 3.10 problem: https://github.com/actions/setup-python/issues/160

    I think quoting all the strings in the resulting YAML should be the default behavior. However, this would probably cause a lot of troubles now that the old behavior is used everywhere.

    Alternatively, a nice solution would be to provide an option to force cue to quote everything. This option could be turned on with either:

    • a cli --flag
    • an env var
    • a directive in the cue file
  • cmd/cue: reference error in value imported from a package lost during export

    cmd/cue: reference error in value imported from a package lost during export

    Originally opened by @uhthomas in https://github.com/cuelang/cue/issues/854

    What version of CUE are you using (cue version)?

    $ cue version
    cue version v0.3.0-beta.7 linux/amd64
    

    Does this issue reproduce with the latest release?

    Yes.

    What did you do?

    ! exec cue export
    cmp stderr stderr.golden
    
    -- a.cue --
    package a
    
    import "mod.com/b"
    
    theb: b.name
    -- b/b.cue --
    package b
    
    import "mod.com/c"
    
    b: c.c & {
    	other: "name"
    }
    
    name: b.other
    -- c/c.cue --
    package c
    -- cue.mod/module.cue --
    module: "mod.com"
    -- stderr.golden --
    b: undefined field c:
        ./b/b.cue:5:6
    

    With beta.3 this test passes; with beta.4 (or indeed any commit including bedb047a988217bab040c29eeb8a51988ce23b76) fails with:

    > ! exec cue export
    [stdout]
    {
        "theb": "name"
    }
    FAIL: /tmp/testscript235319619/repro.txt/script.txt:1: unexpected command success
    

    What did you expect to see?

    A passing test.

    What did you see instead?

    Per above; a failing test, because cue export succeeds where it should not.

    Edit: updated description to the contents of https://github.com/cuelang/cue/issues/854#issuecomment-808683933 for ease of reference.

  • How to set up per-environment configs

    How to set up per-environment configs

    Originally opened by @vikstrous in https://github.com/cuelang/cue/issues/190

    I'm trying to set up per-environment configs with cue, but I'm running into a bug.

    ... in paths doesn't work with symlinks.

    Repro:

    tree
    .
    ├── cue.mod
    │   ├── module.cue
    │   ├── pkg
    │   └── usr
    ├── environments
    │   ├── development
    │   │   ├── development.cue
    │   │   └── services -> ../../services/
    │   └── production
    │       ├── production.cue
    │       └── services -> ../../services/
    └── services
        └── frontend
            └── frontend.cue
    
    10 directories, 4 files
    
    cat environments/development/development.cue
    package service
    
    Environment:: "development"
    
    cat environments/production/production.cue
    package service
    
    Environment:: "production"
    
    cat services/frontend/frontend.cue
    package service
    
    main: "hello \(Environment)"
    
    cue eval ./environments/development/services/frontend/
    Environment :: "development"
    main:          "hello development"
    

    Expected:

    cue eval ./environments/development/services/...
    Environment :: "development"
    main:          "hello development"
    

    Actual:

    cue eval ./environments/development/services/...
    cue: "./environments/development/services/..." matched no packages
    

    If there's any info about how to customize configs for different environments or any best practices, please let me know. I've read all of the docs and I didn't see anything mentioning this issue.

  • doc: update README to explain how CUE differs from jsonnet?

    doc: update README to explain how CUE differs from jsonnet?

    Originally opened by @ngrilly in https://github.com/cuelang/cue/issues/33

    How is CUE different from jsonnet, both coming from Google, and the latter being largely promoted especially in the context of Kubernetes?

  • ci: update Go versions

    ci: update Go versions

    Update Release go version to at least 1.16 so that darwin arm64 target binaries can be released

    Issue for PR #1223 that sparked more conversation

    @myitcv commented:

    There are a few things we probably want to address here:    
    - expanding the build matrix to include Go 1.17
    - building CUE release artefacts with the latest version of Go
    - expanding the release matrix to include new Go ports
    - testing all the above (somewhat related to goreleaser test goreleaser/goreleaser#2355))
    

    @myitcv to @verdverm:

    we used to build with the latest version of Go. Looks like when I updated our build matrix from 
    1.16.0-rc1 to 1.16 I didn't flip to define 1.16 (at the time) as the latest stable version of Go. We 
    can fix that in whatever changes come from this discussion.
    

    @verdverm:

    another update in 1.17 I was thinking might be helpful for API users is the dependency pruning. 
    That would require updating the Go directive in go.mod. Thoughts?
    
    Another thought, is there preference for including (or not) the patch version in the workflows? (i.e. 1.16 vs 1.16.5)
    Any implications on reproducibility, like a new patch version released between final commit testing and tagging for a release?
    
  • Memory leak in core/adt

    Memory leak in core/adt

    Originally opened by @samalba in https://github.com/cuelang/cue/issues/661

    What version of CUE are you using (cue version)?

    $ cue version
    0.3.0-beta.2
    

    Does this issue reproduce with the latest release?

    Yes. I also reproduced it as well with master (c58e0ffc4c74d1b3cffe6467b7f144b9dde631b7) - same result than beta.2.

    What did you do?

    Cannot give a repro as it's happening with blocklayer's runtime, using the Cue Go API. In few seconds, the binary is consuming several gigs of RAM (stays stable at around 34MB with 0.3.0-alpha6).

    As @myitcv suggested, I enabled pprof and gathered this attached heap profile.

    heap.out.gz

    Here are the top consumers:

    (pprof) top
    Showing nodes accounting for 1023.36MB, 87.95%!o(MISSING)f 1163.57MB total
    Dropped 82 nodes (cum <= 5.82MB)
    Showing top 10 nodes out of 84
          flat  flat%!s(MISSING)um%!c(MISSING)um   cum%!
    (MISSING)
      322.54MB 27.72%   322.54MB 27.72%!c(MISSING)uelang.org/go/internal/core/adt.(*Vertex).GetArc
      158.51MB 13.62%   158.51MB 13.62%!c(MISSING)uelang.org/go/internal/core/adt.(*Vertex).addConjunct
      136.02MB 11.69%   136.02MB 11.69%!c(MISSING)uelang.org/go/internal/core/adt.(*nodeContext).createDisjunct
      113.01MB  9.71%   666.57MB 57.29%!c(MISSING)uelang.org/go/internal/core/adt.(*nodeContext).addStruct
       91.51MB  7.86%    91.51MB  7.86%!c(MISSING)uelang.org/go/internal/core/adt.updateCyclic
       75.50MB  6.49%    75.50MB  6.49%!c(MISSING)uelang.org/go/internal/core/adt.(*Vertex).AddStruct
       44.76MB  3.85%    50.27MB  4.32%!c(MISSING)uelang.org/go/pkg/encoding/json.Marshal
          39MB  3.35%    78.51MB  6.75%!c(MISSING)uelang.org/go/internal/core/adt.(*StructInfo).MatchAndInsert
          24MB  2.06%       24MB  2.06%!c(MISSING)uelang.org/go/internal/core/adt.clone
       18.50MB  1.59%    18.50MB  1.59%!c(MISSING)uelang.org/go/internal/core/adt.CloseInfo.SpawnRef (inline)
    
  • Panic during cue eval

    Panic during cue eval

    Originally opened by @verdverm in https://github.com/cuelang/cue/issues/598

    What version of CUE are you using (cue version)?

    master @ 6c49cf0

    the previous commit(s) do not have this panic

    panic: runtime error: invalid memory address or nil pointer dereference [recovered]
            panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x6d7017]
    
    goroutine 1 [running]:
    cuelang.org/go/cmd/cue/cmd.recoverError(0xc000723ec0)
            /home/tony/cue/cue/cmd/cue/cmd/root.go:221 +0x95
    panic(0xbcfac0, 0x11a5f00)
            /usr/local/go/src/runtime/panic.go:969 +0x1b9
    cuelang.org/go/internal/core/adt.(*Vertex).Default(0x0, 0xd9e0e0)
            /home/tony/cue/cue/internal/core/adt/default.go:46 +0x37
    cuelang.org/go/internal/core/adt.(*OpContext).node(0xc0002cd6c0, 0xd99420, 0xc0003d0cd0, 0x40bc01, 0xc000020000)
            /home/tony/cue/cue/internal/core/adt/context.go:676 +0x1cc
    cuelang.org/go/internal/core/adt.(*SelectorExpr).resolve(0xc00044f0e0, 0xc0002cd6c0, 0xc000390c30)
            /home/tony/cue/cue/internal/core/adt/expr.go:588 +0x54
    cuelang.org/go/internal/core/adt.(*OpContext).Resolve(0xc0002cd6c0, 0xc0001df9f0, 0xd93660, 0xc00044f0e0, 0xc00044f0e0, 0x1)
            /home/tony/cue/cue/internal/core/adt/context.go:331 +0xdb
    cuelang.org/go/internal/core/eval.(*nodeContext).evalExpr(0xc0000cf980, 0xc0001df9f0, 0xd8bc40, 0xc00044f100, 0x0)
            /home/tony/cue/cue/internal/core/eval/eval.go:1144 +0x49e
    cuelang.org/go/internal/core/eval.(*nodeContext).addExprConjunct(0xc0000cf980, 0xc0001df9f0, 0xd8bc40, 0xc00044f100, 0x7ea800000000)
            /home/tony/cue/cue/internal/core/eval/eval.go:1114 +0xaa
    cuelang.org/go/internal/core/eval.(*Evaluator).evalVertex(0xc000345e60, 0xc0002cd6c0, 0xc000340360, 0x4, 0x0, 0x0, 0x0)
            /home/tony/cue/cue/internal/core/eval/eval.go:408 +0x2d8
    cuelang.org/go/internal/core/eval.(*Evaluator).UnifyAccept(0xc000345e60, 0xc0002cd6c0, 0xc000340360, 0x719804, 0x0, 0x0)
            /home/tony/cue/cue/internal/core/eval/eval.go:283 +0xa7
    cuelang.org/go/internal/core/eval.(*Evaluator).Unify(0xc000345e60, 0xc0002cd6c0, 0xc000340360, 0xc0001d4a04)
            /home/tony/cue/cue/internal/core/eval/eval.go:257 +0x50
    cuelang.org/go/internal/core/eval.(*nodeContext).completeArcs(0xc0000cf380, 0xc000130004)
            /home/tony/cue/cue/internal/core/eval/eval.go:620 +0xc8
    cuelang.org/go/internal/core/eval.(*nodeContext).postDisjunct(0xc0000cf380, 0xbdb004)
            /home/tony/cue/cue/internal/core/eval/eval.go:599 +0x470
    cuelang.org/go/internal/core/eval.(*nodeContext).updateResult(0xc0000cf380, 0xc0005b6904, 0x3)
            /home/tony/cue/cue/internal/core/eval/disjunct.go:132 +0x4c
    cuelang.org/go/internal/core/eval.(*nodeContext).tryDisjuncts(0xc0000cf380, 0xc000510704, 0xd8bc40)
            /home/tony/cue/cue/internal/core/eval/disjunct.go:203 +0x1a7
    cuelang.org/go/internal/core/eval.(*Evaluator).evalVertex(0xc000345e60, 0xc0002cd6c0, 0xc000132240, 0xc000785704, 0x0, 0x0, 0x0)
            /home/tony/cue/cue/internal/core/eval/eval.go:438 +0x3b5
    ...
    

    fmt.Printf("nil node: %!v(MISSING)\n", v)

    ...
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.Bottom{Src:(*ast.SelectorExpr)( 0xc000343260), Err:errors.list{(*adt.ValueError)( 0xc000674d20), (*adt.ValueError)( 0xc000674d90)}, Code: 4, HasRecursive:false, ChildError:false, Value:adt.Value(nil)}
    nil node: &adt.Bottom{Src:ast.Node(nil), Err:(*errors.posError)( 0xc000094660), Code: 4, HasRecursive:false, ChildError:false, Value:adt.Value(nil)}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.Bottom{Src:(*ast.SelectorExpr)( 0xc000343260), Err:errors.list{(*adt.ValueError)( 0xc000675340), (*adt.ValueError)( 0xc0006753b0)}, Code: 4, HasRecursive:false, ChildError:false, Value:adt.Value(nil)}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.Bottom{Src:(*ast.SelectorExpr)( 0xc000343260), Err:errors.list{(*adt.ValueError)( 0xc0006758f0), (*adt.ValueError)( 0xc000675960)}, Code: 4, HasRecursive:false, ChildError:false, Value:adt.Value(nil)}
    nil node: &adt.Bottom{Src:ast.Node(nil), Err:(*errors.posError)( 0xc000094660), Code: 4, HasRecursive:false, ChildError:false, Value:adt.Value(nil)}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.Bottom{Src:(*ast.SelectorExpr)( 0xc000343260), Err:errors.list{(*adt.ValueError)( 0xc000675f10), (*adt.ValueError)( 0xc000675f80)}, Code: 4, HasRecursive:false, ChildError:false, Value:adt.Value(nil)}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.BasicType{Src:(*ast.Ident)(nil), K: 0xff}
    nil node: &adt.Bottom{Src:(*ast.SelectorExpr)( 0xc000343260), Err:errors.list{(*adt.ValueError)( 0xc0006804d0), (*adt.ValueError)( 0xc000680540)}, Code: 4, HasRecursive:false, ChildError:false, Value:adt.Value(nil)}
    nil node: &adt.StructMarker{NeedClose:false}
    
A library for performing data pipeline / ETL tasks in Go.
A library for performing data pipeline / ETL tasks in Go.

Ratchet A library for performing data pipeline / ETL tasks in Go. The Go programming language's simplicity, execution speed, and concurrency support m

Jan 19, 2022
Declarative streaming ETL for mundane tasks, written in Go
Declarative streaming ETL for mundane tasks, written in Go

Benthos is a high performance and resilient stream processor, able to connect various sources and sinks in a range of brokering patterns and perform hydration, enrichments, transformations and filters on payloads.

Dec 29, 2022
Dud is a lightweight tool for versioning data alongside source code and building data pipelines.

Dud Website | Install | Getting Started | Source Code Dud is a lightweight tool for versioning data alongside source code and building data pipelines.

Jan 1, 2023
xyr is a very lightweight, simple and powerful data ETL platform that helps you to query available data sources using SQL.

xyr [WIP] xyr is a very lightweight, simple and powerful data ETL platform that helps you to query available data sources using SQL. Supported Drivers

Dec 2, 2022
Prometheus Common Data Exporter can parse JSON, XML, yaml or other format data from various sources (such as HTTP response message, local file, TCP response message and UDP response message) into Prometheus metric data.
Prometheus Common Data Exporter can parse JSON, XML, yaml or other format data from various sources (such as HTTP response message, local file, TCP response message and UDP response message) into Prometheus metric data.

Prometheus Common Data Exporter Prometheus Common Data Exporter 用于将多种来源(如http响应报文、本地文件、TCP响应报文、UDP响应报文)的Json、xml、yaml或其它格式的数据,解析为Prometheus metric数据。

May 18, 2022
Baker is a high performance, composable and extendable data-processing pipeline for the big data era

Baker is a high performance, composable and extendable data-processing pipeline for the big data era. It shines at converting, processing, extracting or storing records (structured data), applying whatever transformation between input and output through easy-to-write filters.

Dec 14, 2022
Gonum is a set of numeric libraries for the Go programming language. It contains libraries for matrices, statistics, optimization, and more

Gonum Installation The core packages of the Gonum suite are written in pure Go with some assembly. Installation is done using go get. go get -u gonum.

Dec 29, 2022
Stream data into Google BigQuery concurrently using InsertAll() or BQ Storage.

bqwriter A Go package to write data into Google BigQuery concurrently with a high throughput. By default the InsertAll() API is used (REST API under t

Dec 16, 2022
Map, Reduce, Filter, De/Multiplex, etc. for the Go language.

proto proto gives Go operations like Map, Reduce, Filter, De/Multiplex, etc. without sacrificing idiomatic harmony or speed. It also introduces a conv

Nov 17, 2022
indodate is a plugin for golang programming language for date convertion on indonesian format

indodate is a package for golang programming language for date conversion on indonesian format

Oct 23, 2021
Simple CRUD application using CockroachDB and Go

Simple CRUD application using CockroachDB and Go

Feb 20, 2022
DEPRECATED: Data collection and processing made easy.

This project is deprecated. Please see this email for more details. Heka Data Acquisition and Processing Made Easy Heka is a tool for collecting and c

Nov 30, 2022
Kanzi is a modern, modular, expendable and efficient lossless data compressor implemented in Go.

kanzi Kanzi is a modern, modular, expendable and efficient lossless data compressor implemented in Go. modern: state-of-the-art algorithms are impleme

Dec 22, 2022
churro is a cloud-native Extract-Transform-Load (ETL) application designed to build, scale, and manage data pipeline applications.

Churro - ETL for Kubernetes churro is a cloud-native Extract-Transform-Load (ETL) application designed to build, scale, and manage data pipeline appli

Mar 10, 2022
Dev Lake is the one-stop solution that integrates, analyzes, and visualizes software development data
Dev Lake is the one-stop solution that integrates, analyzes, and visualizes software development data

Dev Lake is the one-stop solution that integrates, analyzes, and visualizes software development data throughout the software development life cycle (SDLC) for engineering teams.

Dec 30, 2022
A distributed, fault-tolerant pipeline for observability data

Table of Contents What Is Veneur? Use Case See Also Status Features Vendor And Backend Agnostic Modern Metrics Format (Or Others!) Global Aggregation

Dec 25, 2022
Data syncing in golang for ClickHouse.
Data syncing in golang for ClickHouse.

ClickHouse Data Synchromesh Data syncing in golang for ClickHouse. based on go-zero ARCH A typical data warehouse architecture design of data sync Aut

Jan 1, 2023
sq is a command line tool that provides jq-style access to structured data sources such as SQL databases, or document formats like CSV or Excel.

sq: swiss-army knife for data sq is a command line tool that provides jq-style access to structured data sources such as SQL databases, or document fo

Jan 1, 2023