🎉 Get daily to weekly release news in the blog (last update March 24th) and bimonthly updates in the newsletter.

Rolling out eno's final ecosystem

If you want to try out the release candidate ecosystem for the final specification you are already there - have a look around, we're excited to have you on board!

If you need Python, Ruby or PHP libraries before they become available for the final specification in the next weeks or want to work with the first, completely stable ecosystem for now, visit the website for eno first.
A modern plaintext data format for file-based content. More
enoauthor: Jane Doe
email: jane@eno-lang.org

-- my_content
Multi-line embedded content (e.g. markdown) here ...
-- my_content

states:
active = #fff
hover = #b6b6b6

# cities
Den Haag: 52.069961, 4.302315
Málaga: 36.721447, -4.421291
서울특별시: 37.566984, 126.977041

# cities expanded < cities
Springfield: 38.790312, -77.186418

Overview:

  • Esthetic, intuitive and simple
  • Inclusively designed for you and your team
  • Predefined and custom type support for keys, values and comments
  • Elements and hierarchies can be copied and merged for complex usecases

Usecases:

  • Authoring blogs, up to entire websites, from the macro to the micro level
  • Generating documentation, invoices, CVs, reports, you name it
  • Large scale textfile-based databases and archives
  • Configuration files, from the simplest to the most complex

More about eno

enolib
The standard library for parsing, inspecting and validating eno documents. More
javascriptimport enolib from 'enolib';

const document = enolib.parse(`
  author: Jane Doe
  title:
`);

document.field('author').requiredStringValue();
  // returns 'Jane Doe'
  
document.field('title').requiredStringValue();
  // throws "The field 'title' must contain a value.
  //
  //   Line | Content
  //      1 | author: Jane Doe
  // >    2 | title:
  //

Overview:

  • Dynamically extensible query API for custom and third party type support
  • Cursor lookup API (by index or line/column) for easy authoring of rich IDE plugins
  • Querying equals validating - guaranteed data structure and type-safety
  • Fully localized, handwritten, team-friendly error messages
  • Rich error metadata: message, document snippet, cursor position, selection range

Usecases:

  • Static site generation, scalable up to massive amounts of content
  • Generating documentation, code, reports, invoices, CVs, you name it
  • Highly reliable application configuration data with minimal development effort
  • Content management tooling for apps, websites, editors, IDEs, ...

More about enolib

enotype
Functional type implementations for use with (or without) enolib. More
javascriptimport { latLng } from 'enotype';

latLng('36.721447, -4.421291');
  // returns { lat: 36.721447, lng: -4.421291 } 

enolib.register({ latLng });

document.section('cities').field('Málaga').requiredLatLngValue();
  // returns { lat: 36.721447, lng: -4.421291 }

enotype is a collection of minimalist functions that validate and convert type-unsafe string representations into type-safe, native types. It is the standard type library for enolib but can be utilized in a multitude of other contexts as well.

More about enotype

more
In development community projects around eno. More

enotcl - Tcl parser
Enohar - (Incomplete) Java library for parsing and emitting Eno documents