Stable implementations

Use Nano Markup
in your language.

Python, Go, JavaScript/TypeScript, Dart, Java, .NET, C/C++, Rust, Swift, and PowerShell provide stable, conforming Nano Markup decoders and writers. Choose the native value model that fits your application while keeping the language specification independent from your codebase.

Choose your language

Ten independent implementations

Python

Nano Markup for Python

Stable 1.0.0

A zero-runtime-dependency parser and serializer using Python-native values: str, dict, and list.

Requires
Python 3.11+
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
Install python -m pip install nanomarkup
import nanomarkup

value = nanomarkup.loads("..\n    name Ariana")
source = nanomarkup.dumps(value)

Go

Nano Markup for Go

Stable 1.0.0

A zero-dependency decoder and writer with typed String, Mapping, and Sequence values.

Requires
Go 1.24+
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
Install go get github.com/nohainc/nanomarkup.go@v1.0.0
value, err := nanomarkup.Decode(
    []byte("..\n    name Ariana"),
)
source, err := nanomarkup.Encode(value)

JavaScript & TypeScript

Nano Markup for the web

Stable 1.0.0

A zero-runtime-dependency parser and serializer with ESM, CommonJS, browser-compatible code, and TypeScript declarations.

Requires
Node.js 22+ or a modern browser
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
Install npm install nanomarkup
import { parse, stringify } from "nanomarkup";

const value = parse("..\n    name Ariana");
const source = stringify(value);

Dart

Nano Markup for Dart

Stable 1.0.0

A zero-runtime-dependency decoder and writer using native String, Map, and List values on the Dart VM, web, and Flutter.

Requires
Dart 3.12+
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
Install dart pub add nanomarkup
import 'package:nanomarkup/nanomarkup.dart';

final value = decode("..\n    name Ariana");
final source = encode(value);

Java

Nano Markup for Java

Stable 1.0.0

A zero-dependency decoder and writer using Java String, Map, and List values.

Requires
Java 17+
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
Installcom.nohainc:nanomarkup:1.0.0
var value = NanoMarkup.parse("..\n    name Ariana");
var source = NanoMarkup.stringify(value);

C# / .NET

Nano Markup for .NET

Stable 1.0.0

A zero-dependency decoder and writer using idiomatic C# string, Dictionary, and List values.

Requires
.NET 8+
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
Installdotnet add package NanoMarkup
var value = NanoMarkupCodec.Decode("..\n    name Ariana");
var source = NanoMarkupCodec.Encode(value);

C and C++

Nano Markup for C and C++

Stable 1.0.0

A zero-dependency implementation with a C11 API and an idiomatic C++17 wrapper built with CMake.

Requires
C11 / C++17+
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
Buildcmake -S . -B build && cmake --build build
auto value = nanomarkup::decode(".."); auto source = nanomarkup::encode(value);

Rust

Nano Markup for Rust

Stable 1.0.0

A zero-dependency decoder and writer with idiomatic Rust String, BTreeMap, and Vec values plus a validator CLI.

Requires
Rust stable
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
Installcargo add nanomarkup
use nanomarkup::{decode, encode};
let value = decode("..\n    name Ariana")?;
let source = encode(&value)?;

Swift

Nano Markup for Swift

Stable 1.0.0

An idiomatic, zero-dependency decoder and writer using Swift String, arrays, and ordered mapping values.

Requires
Swift 6+
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
Swift Package Managerhttps://github.com/nohainc/nanomarkup.swift
import NanoMarkup
let value = try NanoMarkup.decode("..\n    name Ariana")
let source = try NanoMarkup.encode(value)

PowerShell

Nano Markup for PowerShell

Stable 1.0.0

An idiomatic, zero-dependency module with PowerShell ConvertFrom-NanoMarkup and ConvertTo-NanoMarkup cmdlets.

Requires
PowerShell 7.2+
Profiles
Decoder and writer
Spec
Nano Markup 1.0.0
InstallImport-Module NanoMarkup
$value = '..\n    name Ariana' | ConvertFrom-NanoMarkup
$source = $value | ConvertTo-NanoMarkup

Independent and interoperable

One language, matching data trees

Python, Go, JavaScript/TypeScript, Dart, Java, .NET, C/C++, Rust, Swift, and PowerShell pass the complete 112-case shared conformance corpus for decoding and writing. All ten codebases cross-read one another's output, including LF and CRLF documents.

The implementations are practical tools, not normative definitions of Nano Markup. The 1.0.0 specification remains the authority for syntax, data-model, and error behavior.