8 ms·
Cue – A language for defining, generating, and validating data
- fieryscribe 7y agoThis might cause confusion with cuesheets, which already exist and have the same extension: https://en.m.wikipedia.org/wiki/Cue_sheet_(computing) https://en.m.wikipedia.org/wiki/Cue_sheet_(computing)
- ylesaout 7y agoOr worst, it could be seen as a first attempt of takeover. What will be the next targeted extension?
- lonelappde 7y agoNo one owns file extensions. Magic numbers and shebang lines declare a file's language.
- sdinsn 7y agoWhat a strange comment. Extensions aren't the property of anyone.
- bipolar_lisper 7y agoA new configuration language. Yes. That's exactly what we need.
- mikl 7y agoWe do indeed. XML is awful, YAML is a clusterfuck, JSON is often insufficient, and so is INI. TOML looks promising, but might not make it out of its niche. If Cue is basically a better YAML with built-in schemas, that sounds pretty good.
- dbcurtis 7y agoI was hoping to like TOML, but my first experiments using a Python package for parsing it were disappointing. I found the syntax cranky, and the Python package I was using did a terrible job at providing diagnostics — very poor exception propagation. And that seemed to be the most mature TOML parser that I could find for Python, so I decided TOML isn’t likely in my future.
- ptest1 7y agoTOML is extremely verbose for lists. It’s ridiculous. Sure it had less features than YAML but it also looks considerably worse in all the common use cases. Looks like INI
- dbcurtis 7y agoYeah, I was fighting the list problem. And not able to mix numeric and string data in a list just made the whole thing unwieldy and frustrated me. I’ve used JSON for configs, which is not great, but at least readable. The biggest problem is lack of comments, but I added a quick hack to ignore any dictionary key starting with an octothorpe. Not ideal, but is actually handy because it makes it easy to comment out keys temporarily as well as add arbitrary commentary. Also, the Python standard library JSON parser is very flexible and yields precise exceptions. I was able to turn those parsing exceptions into meaningful error messages with precise line and column numbers. Which came as a bit of a shock to some of my users, because a different tool written before my time but used by the same people had exactly one error message for mispelled YAML: segfault.
- ptest1 7y agoSchemas, interesting. I wonder where we’ve seen that before..
- leetrout 7y agoWe could have a URI that gives you a schema and some tools to generate a skeleton for that schema for you. Then you could put a header in your request for what you want to do and send that payload. Like a simple configuration access and management (SCAM) protocol. Yes, yes I think we’re on to something here.
- sdinsn 7y agoNote that this is more unique since it acts as a schema and a data language. And it has common programming constructs.
- cwp 7y agoI realize this was meant to be sarcastic. However, I whole-heartedly and unironically agree. For writing small bits of configuration, just about any language will be fine. For large amounts of configuration, as is required for... oh, I dunno, let's say deploying software in the cloud, all the commonly used languages are a disaster. Data serialization languages (like JSON, INI, XML, etc) lack the power to describe large configurations. There's no way to define an abstraction and then use it in multiple places. There's no way to constrain what is considered correct. You end up with tens of thousands of lines of very, very repetitive structures that are very fragile and hard to change. General purpose languages are also bad for writing configurations. Yes, they're very powerful. That's not a feature when it comes to configuration. If you have a program that emits a configuration, the only thing you can do with it is run it, then inspect the resulting configuration. You can't inspect or transform the program at the level of the configuration semantics. You can't ensure that the configuration will have specific properties. You can't even ensure that the program will, in fact, emit a configuration. So yeah, we need new configuration languages that lie in between data serialization languages and general purpose computing languages. We're starting to see them. HCL is awful, but it was an attempt at solving this problem and a move in the right direction. Jsonnet is maybe better better? I dunno, I've never tried it. Dhal is interesting, though difficult for non-Haskellers to approach. CUE is also interesting. Bravo!
- ptest1 7y agoI wholeheartedly and in ironically disagree! We have all we need. If you want a full featured language, use that. Beyond that, we have JSON, YAML, INI and more. If you want something more complicated you can create your own DSL for your app. If you want schemas and validation, use XML!
- uryga 7y agoeach of those options have major downsides: - 'dumb data' (json, yaml, ...) is machine-, but not human-friendly. it's often tedious to write/read, and you can't abstract common parts out - DSLs are something you have to write, debug and maintain yourself. is the bug in your config or is it in your DSL's implementation? who knows! - full featured languages require a full blown interpreter and aren't tooling-friendly. as an example: with a Python package, it's not really possible to statically determine the dependencies , because its setup.py can declare anything it pleases depending on, say, the time of day. also you can't really run untrusted configs because they might launch some missiles --- there's a decent middle ground – write a program that generates a 'dumb data' config. you write a small amount of code (friendly for humans) and run it to get a static, easy-to-process config (friendly for machines). however in practice (in most languages) the program won't be pretty – probably about as easy to read/write as an implementation of a macro that directly manipulates ASTs (i.e. not very). this can sometimes be ameliorated with some EDSL trickery, but that brings back all the problems DSLs have and so generating configs is what projects like Dhall/Cue aim to improve. i'd say they're aiming to be something like the regex of config generation - do a limited amount of common&useful things, and make them easy to express.
- flaviu2 7y agoSeems like an interesting language, but I'm very disappointed that my first attempt to view example code took 5 clicks. The most important part of any programming language website is a short example snippet: put it above the fold on the front page!
- Semiapies 7y agoI didn't even have to scroll down to see an example of code and usage.
- Varriount 7y agoWhere? I don't see any example on the page linked to. Edit: Ah, the code example only appears for desktop browsers (or at least, browser windows wider than a phone screen).
- fractalf 7y agoI gave up looking after 1min
- michaelmrose 7y agohttps://github.com/cuelang/cue/blob/master/doc/tutorial/basics/Readme.md https://github.com/cuelang/cue/blob/master/doc/tutorial/basi...
- cosmotic 7y ago
- toiletWine 7y agoIs there any reason to use this over something like .yaml?
- underwater 7y agoThe tl;dr is buried deep in the docs > CUE is an extension of JSON. This improves familiarity and makes it easy to get going quickly. > In its simplest use case, CUE can substitute for a more pleasant way to write JSON.
- nabdab 7y agoSo it’s a google branded yaml? Let’s raise a glass to our blue eyed comrades who’ll adopt this fully, only for google to decide in 2-3 years to completely and aggressively kill it again for no apparent reason.
- dvtrn 7y agoPardon for slamming my ignorance down on the table here: I know Google has a tendency of killing products but I’m not familiar with many of their engineering tooling being similarly sunset with comparable frequency. Any named examples? I’m sure there are-and likely they just elude me at present, maybe seeing their names will jog the memory probably?
- mirekrusin 7y agojsonnet? :)
- zellyn 7y agoThe jsonnet mailing list still has activity. Is the project dead?
- TheDong 7y agoYou don't hear as much about developer tools being sunset because they rarely impact as many people and that makes less interesting news. Examples include: AngularJS (replaced by a rewrite of angular effectively), GWT (donated as 'open source' with minimal continued google involvement), basically 90% of all 20% projects by googlers that weren't official google stuff (too many examples to name, practically all of them), the xmpp api for google talk (and all associated library code, including some open source xmpp extensions, libjingle), tons of chrome and android libraries that were killed/deprecated as part of new versions not using them, ARC (https://en.wikipedia.org/wiki/Google_App_Runtime_for_Chrome https://en.wikipedia.org/wiki/Google_App_Runtime_for_Chrome), the caldav API for google calendar and any associated libraries... I could go on, but the majority of the relevant examples are the 20% projects that never made it, and I'd rather not list any of those since they're largely single-person projects and it's kinda personal to comment on any of em.
- cfors 7y agoVery interesting, I can think of a lot of places where this would be useful for managing infrastructure. I highly recommend reading about some of the internals, it is making me rethink a lot of how configuration should be done. https://cuelang.org/docs/concepts/logic/ https://cuelang.org/docs/concepts/logic/
- sciyoshi 7y agoSeems really interesting after a quick read-through. Specs that allow range-based validation look useful, and the structural declarations also feel like they'll help reduce a lot of boilerplate and repetition. I wonder how this compares with Dhall and Jsonnet, both of which I've been looking into as a safer alternative to templated YAML. With Google putting its weight behind this I'm curious if it'll start finding its way into K8s.
- mixmastamyk 7y agoA safer yaml: https://hitchdev.com/strictyaml/ https://hitchdev.com/strictyaml/
- preommr 7y agoI am really curious why people are downvoting this. I've always thought that a more restrictive and simpler version of yaml would be a good alternative.
- arc33 7y agoSerious question, not trolling, how is XML not a more restrictive version of YAML and why does XML get bad rep?
- mixmastamyk 7y agoGuessing there were a couple of cue devs that didn’t appreciate a competitor mentioned.
- mixmastamyk 7y agoFolks upset at the sibling comment weren't here at the time. The reaction was swiftly negative, and there are few charitable reasons to be found for that.
- breck 7y agoDisclosure: I work on Tree Notation. If the authors would like to discuss how Tree Notation may be a better syntax for this language, please feel free to get in touch: breck7@gmail.com or yunits@hawaii.edu. Here is a demonstration of what a Tree Language for config files could look like: https://treenotation.org/designer/#standard%20config https://treenotation.org/designer/#standard%20config
- ptest1 7y agoStop commenting on every HN post, thanks
- breck 7y agoFact: I've commented on fewer than 1% of HN posts today alone. Fact: my post is very relevant to the OP and I'm offering to help them. Fact: I've been a member of this site for over 12 years, and never comment on a post unless I think it adds value to the discussion or would be helper to the parent.
- DannyBee 7y agoFact: What you wrote was essentially a private, directed comment that should have been a private email, and added literally nothing to the discussion.
- breck 7y ago> should have been a private email That's a good suggestion. I didn't think of that. But thinking about it, I guess I don't want to bother the OPs inbox. If they are interested, they can get in touch. > added literally nothing to the discussion. I disagree. When I post a new language, and someone shares a link to a related language, those are often the most valuable comments. Validating, defining, using data: sound like things Tree Notation syntax is perfect for. Cue's semantics are great, and presentation and execution, I just think potentially a syntax switch is worth exploring. I understand the strategy to be able to parse JSON as cue, and that's probably the way to go for now, but in the future Tree Notation syntax might offer compelling advantages.
- make3 7y agomy time at Google has made me hate GCL so much.
- akhilcacharya 7y agoWeird flex, but ok. Is it true that there are dozens of internal language and DSLs? Why does G have so many?
- joatmon-snoo 7y ago1. use plain .textproto as your config 2. find a use case where you want a config with ~700 lines, most of it just a repeated variant of something 3. add more fields to your config to reduce the verbosity 4. realize that your configs are now obscenely complex, and build a limited-purpose DSL 5. five teams now use your limited-purpose DSL and make more feature requests 6. cry because you now maintain a DSL 7. ??? 8. promo for cross-team impact
- saulrh 7y agoI was going to say, this looks a lot like GCL. Dynamic scope, recursive lookup in parent scopes, templates [1], everything. GCL is neat and all, but I'd almost rather write my job configs by building thin python or lisp scripts to emit json or protos. 1: https://github.com/cuelang/cue/blob/master/doc/tutorial/basics/templates.md https://github.com/cuelang/cue/blob/master/doc/tutorial/basi...
- wstrange 7y agoAFAIK, cue is written by the author (or one of them?) of GCL, and purports to fix a lot of what is wrong with it.
- madhadron 7y ago> I'd almost rather write my job configs by building thin python or lisp scripts to emit json or protos This is what Facebook does: Python emitting JSON.
- bt848 7y ago
- waynesonfire 7y agoPass!
- noname120 7y agoHere is an interesting example showing what it looks like: https://github.com/cuelang/cue/blob/e5d8d09b3ba2e4f48c84a3b5da2acbf0716379bf/doc/tutorial/kubernetes/manual/services/cloud.cue https://github.com/cuelang/cue/blob/e5d8d09b3ba2e4f48c84a3b5... I used the following command on the cloned repository to find it[1]: find . -iname '*.cue' | xargs ls -l | tr -s ' ' | cut -d ' ' -f5,9 | sort -n [1] Note that 'find' has a '-printf' option which could have been used to simplify this one-liner.
- jontro 7y agoOr just search the files directly in github? Just type T and .cue
- antpls 7y agoIs the language supposed to "validate"? In this file, there is no constraint describing non-negative number or non-empty string, or ill-formed URL, or invalid number ports. EDIT : found it in the doc : https://cuelang.org/docs/usecases/validation/ https://cuelang.org/docs/usecases/validation/
- summerlight 7y agoThe post title is misleading. This is a more of 20% project, not an officially Google supported one.
- Despegar 7y agoThere's no difference.
- summerlight 7y agoFor 20% projects, Google typically doesn't make any commitments on the project's development. If you're just being sarcastic on Google's infamous product longevity, you should've used more than 3 words.
- joatmon-snoo 7y agoThere is a large difference between battle-tested tech maintained by a properly staffed team and a proof of concept built by someone in their spare time. The title certainly made me think that it was the former, even though it's the latter.
- smt88 7y ago> maintained by a properly staffed team This seems to describe very few Google products. Almost daily, I have the following thought: "Has anyone at Google actually even used this product?" (Most often with Assistant, but definitely with other products, too)
- lonelappde 7y agoJust because you don't like doesn't mean it's not built and supported by a large team following some VP or PM vision. Boondoggles cost a lot of resources.
- smt88 7y agoPerhaps I have a different definition of "maintained" than Google does. For me, it means that it's not just online, but also has bugs regularly fixed and features added. Most Google services (off the top of my head: Voice, Talk, Reminders) seem to reach v1 and then stop dead in their tracks. They're online, but that's it. Thousands of people request fixes or features, and they go completely unheard. Google employees on HN have confirmed this, saying that the company rewards new products that drive ads, but not the work involved in improving and maintaining existing products. That explains why Google's released the following products for messaging, and none has been amazing: Talk, Hangouts, Voice, Wave, Allo, Hangouts Chat, and Messages/RCS. Most of these overlapped at some point, and if you've used any of them, you wouldn't describe them as "maintained". They're more like "abandoned without publicly announcing anything". If there's a VP or PM vision anywhere at Google that lasts for more than a year, I'd love to know what it is. It seems like a company with a thousand committees and no real creative leadership.
- esotericn 7y agoWell, it doesn't look very backwards compatible to me ;) https://en.wikipedia.org/wiki/Cue_sheet_(computing) https://en.wikipedia.org/wiki/Cue_sheet_(computing)
- jonbronson 7y agoYou'd think they'd make it easier to quickly seem examples of the language.
- samstave 7y agoIll prolly get downvoted for this: What i want to see, is a company which will provide as a service, basically devops deployment, monitoring and provisioning regardless of the cloud provider. Such that i can say “deploy this” and it will eval, track and monitor the cost of the deployment across aws, azure, gcp, etc and i can click controls to see/kil/scale wherever... Thus, i dont care about cloud provider deployment language, etc...
- segmondy 7y agocheckout https://apex.sh/up/ https://apex.sh/up/
- nikhilsimha 7y agoHow does this compare to jsonnet or hocon? Why would someone choose this over generating configuration files with a “scripting” language like python?
- atombender 7y agoCUE improves in Jsonnet in primarily two areas, I think: Making composition better (it's order-independent and therefore consistent), and adding schemas. Both Jsonnet and CUE have their origin in GCL internally at Google. Jsonnet is basically GCL, as I understand it. But CUE is a whole new thing.
- zellyn 7y agojsonnet is basically GCL, but after like five failed attempts to rewrite, replace, or fix GCL, which included creating a formal semantics of GCL pointing out all the problems. I believe there was a final successful attempt to fix it. The Cue docs talk about jsonnet explicitly.
- koston 7y agoHow is this better than yaml?
- mikl 7y agoLess footguns, built-in validation, strong types. Me gusta.
- ptest1 7y agoSo..why not use XML?
- __david__ 7y agoSo that humans eyes don't bleed when they try to read it. One of the things they bring up in the docs is lessening boilerplate. And it's hard to get more boilerplatey than XML.
- tempo33 7y agoBecause while XML has types and schemas, the actual implementation and ergonomics is absolute garbage. Those things matter to intelligent people.
- aledalgrande 7y agoTIL how to use cat with STDIN.
- m0zg 7y agoThey should just foist BCL and Borgmon upon the gullible masses. All cloud development will be set back years while people (try to) figure it all out.
- justicezyx 7y agoI do not think Google figured anything better than BCL. Disclaimer: Was owner of borgcfg 2016-2019.
- joatmon-snoo 7y agoWe still haven't. :(
- justicezyx 7y agoAs I alluded in the other comment, there needs to be a better tool for BCL, not the language. GCL, used outside borg, is a much more pleasing experience, because there is a decent tool. And the team have done good job to innovate continuously.
- deleted 7y ago[deleted]
- bt848 7y agoWe used to joke that open-sourcing Borgmon would be an industry-disabling move, but Prometheus is very popular which just proves there's a lot of people with poor taste in software. FWIW Piccolo has also leaked into the industry in the form of Pystachio.
- xnxn 7y agoGullible mass member here. What's better than Prometheus?
- 7y ago
- zahreeley 7y agoBoring
- fareesh 7y agoI feel like that validation feature could theoretically save a lot of people that occasional 1 hour of their time that was wasted because of a typo in a config file leading to a cryptic error message.
- thesuperbigfrog 7y agoObligatory: https://imgs.xkcd.com/comics/standards.png https://imgs.xkcd.com/comics/standards.png
- carapace 7y ago> A key thing that sets CUE apart from its peer languages is that it merges types and values into a single concept. Whereas in most languages types and values are strictly distinct, CUE orders them in a single hierarchy (a lattice, to be precise). That's cool!
- jonathanyc 7y agoIn TypeScript, an upper bound of “foo” and 5 is any. But I wonder what a lower bound of those two is supposed to be in Cue.
- zellyn 7y agoI can’t keep upper and lower straight, but `“foo” | 5` would allow either “foo” or 5, and `”foo” & 5` would be “bottom” (also spelled “_|_”, essentially an error)
- mohaba 7y agoWelcome to kubernetes new configuration language!
- Animats 7y agoCute. Is there something that takes in Cue and makes a GUI editor for the format?
- michaelmrose 7y agoWouldn't the optimal one be a mode for your editor of choice?
- Animats 7y agoI mean a form, with blanks and pulldowns. There's enough info in Cue to generate one. Not just a syntax checker that tells you that you got it wrong.
- michaelmrose 7y agoI don't think a gui to work with cue files is a good substitute for a gui for regular users to configure whatever you are configuring because its unlikely to be able to define valid data to the same degree as an actual app. If its for a technical individual to configure your software I don't know that such a gui would be superior to your favorite editor.
- etxm 7y agoFeels like an also crappy jsonnet
- hestefisk 7y agoIf configuration starts becoming more complex than looking up key value pairs, why not just write it in the programming language you are using? More languages / serialisation just adds another layer of complexity. Config as code is actually really neat.
- _def 7y ago- can only be done in script languages(?) - syntax errors I get what you're saying and it can be neat, but I don't think it's universally applicable
- zeckalpha 7y agoWhat if you're using multiple programming languages?
- hestefisk 7y agoThen cue might be a good idea.
- prepend 7y agoThen just pick one of them. This may be simpler than introducing another language to the project.
- zeckalpha 7y agoWhat if you are interfacing between multiple projects? It’s not about introducing another language, it’s about integrating pre-existing systems.
- pmontra 7y agoSome web projects validate inputs in JavaScript, then in a possibly different backend language, then (unusually) in the database with CHECK statements. Even when it's all JavaScript the validations are different because the frontend and backend frameworks are different. And some projects have multiple backend services written in multiple languages.
- 7y ago
- wlib 7y agoI'm feeling both really pissed and validated right now. I thought this was going to just be a normal thoughtless config language that would only be successful as a Google project. Then I looked at the theoretical basis page. I have no formal proof about this, but I've been talking about this type of a type system with my parents and high school CS teacher for a while now! My idea sounds like this: a value is simply an actual binary string. The "type" that classifies any data is described as a formal grammar, where the binary string is a formal language. If the language can parse a given binary value with the formal grammar, that value is an element of the set (type). This naturally leads to a structural type system which can be described using existing set theory and implemented using existing parsers and formal language theory. Of course, this leads to type -> type functions which describe dependent and refinement types naturally. It's great to see this idea being broadcast on the front page here, as I can see it very clearly as a superior type system. I'm really regretting not writing a formal article about it sooner!
- uryga 7y ago> Of course, this leads to type -> type functions which describe dependent and refinement types naturally. could you expand on this? i don't understand how you get this from grammars. (on a side note, i think that dependent types usually mean you can write functions from values to types, not type -> type?)
- wlib 7y agoYes, I mistyped that bit. I meant to say that because types (as a grammar) are values, they can be inputs and outputs of functions. The functions can fill in the hole that dependent/refinement types fill, by taking context into account (the grammars which describe simple types being context free). Type -> Type fill in for type constructors like this infinite list: InfiniteListOf = Type -> Type & InfiniteListOf Type That function just morphs a simple grammar into another grammar. Imagine now if we could calculate something in between: IncrementingInfiniteListFrom = number -> number & IncrementingInfiniteListFrom number+1 That's where the dependent types come in, naturally.
- emmanueloga_ 7y ago
- sudonua 7y agoTIHI
- tln 7y agoCue was discussed previously here https://news.ycombinator.com/item?id=20362951 https://news.ycombinator.com/item?id=20362951 Looks like there is a nice new web site. It seems a bit too feature laden to take off IMO.
- rudolph9 7y agoI think a better title would be "Cue: A constraint programming langue (from some people who work[ed] at Google)". When you consider the use of this language within a distributed system it's pretty freaking brilliant. https://cuelang.org/docs/concepts/logic/#the-value-lattice https://cuelang.org/docs/concepts/logic/#the-value-lattice
- bhk 7y agoOkay, so I've spent some time trying to understand this, and I think it's actually really cool, but I found the "About" and "Concepts" documents tumid and murky. Here is my understanding of the basic concepts: - It allows a schema-like set of constraints to be declared for JSON (and therefore for YAML & TOML) in a syntax that is an extension of JSON. - Cue deals with types (sets of values) where JSON deals with single values. Ordinary JSON syntax for a primitive value denotes a set containing that one value. For example, `a: 1` means that the set of possible values for `a` is {1}. Cue calls this a concrete definition. - Cue provides operators for union (`|`) and intersection (`&`) of sets, and inequalities for ranges of numbers, and so on. `1 | 2` denotes `{1, 2}`. - Built-in names provide the types `int`, `float`, `string`, etc. - Cue "struct" types look like JSON objects, associating names with sets. Each name/value pair is a constraint, and all constraints must be met. For example, `{a: int}` denotes "the set of objects that have a property `a` with the value in `int`". - Properties can be referenced by name; this allows a property defined in one place to be used a type (set) definition in multiple places. - When a name is bound more than once, the sets associated with each binding are intersected. This means that enforcing a schema reduces to simply combining the schema definition with the "concrete" bindings and throwing an error when an empty set is encountered. BTW, if I do have it all wrong and what I've described above is not an accurate description of Cue, then I think I'll have to go build what I've described. Some reasons I'm afraid I'm off-base: - What's with the lengthy discussion of lattices, and related terminology? Sure, we can construct a lattice from the set of possible types and a "subset of" operator, but that's another level of abstraction away from the necessary concepts, so I don't see what value it adds. - The `|` operator is described as constructing a sum type, when it seems to me it must actually be a (non-discriminated) union. Elsewhere the `|` operator is described as "computing the join", which to me would mean finding an element in a lattice, but for this to make sense to me I have to think of it as adding an element to the lattice (again all the lattice or poset terminology serves only to obfuscate things).
- xinau 7y agoSome of the reasons I like the tool can't be found in the language spec. CUE (the tool) provides import facilities for existing configurations like yaml, json, openapi, protobuf or even go code into cue. this helps with adoption and time spent porting existing configs. Another feature of the CUE tool is the ability to create small tools that are able to operate on cue definition files. https://github.com/cuelang/cue/blob/master/doc/tutorial/kubernetes/README.md#listing-objects https://github.com/cuelang/cue/blob/master/doc/tutorial/kube...
- billfruit 7y agoDoes it sport working on binary data, it would be a cool thing to have in some applications, to validate conditions on binary data.
- siempreb 7y agoThe syntax looks a lot like Coffeescript, which I use for defining and generating data.
- buremba 7y agoIt looks like an alternative to Jsonnet which has schema validation & strict types. IMO, Jsonnet syntax is much simpler, it already has integration with IDEs such as VSCode and Intellij and it has enough traction already. Cue seems like an e2e solution so it's not only an alternative to Jsonnet, it also removes the need of JSON Schema, OpenAPI, etc. so given that it's a 5 months old project, still has too much time to evolve and be mature. We're heavily using Jsonnet for our data modeling (https://github.com/rakam-io/recipes https://github.com/rakam-io/recipes) and pretty happy with it. We also have plans to add support for JSON Schema which is adopted by many of IDEs so that VSCode makes us feel like we're writing Java, not a Jsonnet file. Cue is Google's 6th attempt and given that Jsonnet already has traction and works well out of the box, I would invest my time into Jsonnet at this time.
- devj 7y agoWould like to know more on how its a good fit for database schemas? Does anybody here use any DSLs for database schemas? If yes, what and why?
- slifin 7y agoA lot of these systems ignore the querying side of a schema i.e. in graphql you can define a schema then query only certain parts of the schema so only parts of the schema are enforced at runtime