cppstl

Bindings for the C++ Standard Template Library (STL)

Pure Nim score 30/100 · tests present · docs generated

Summary

Latest Version Unknown
License MIT
CI Status Failing
Downloads 0
Last Indexed 2026-07-21 05:24

Installation

nimble install cppstl
choosenim install cppstl
git clone https://github.com/BigEpsilon/nim-cppstl

OS Compatibility

Platform Linux macOS Windows FreeBSD OpenBSD NetBSD Android iOS WASM Embedded
cppstl - - - - - - -

Source

Repository https://github.com/BigEpsilon/nim-cppstl
Homepage https://github.com/BigEpsilon/nim-cppstl
Documentation View Documentation
Registry Source nimble_official

README

Nim bindings for the C++ STL

workflow workflow

Introduction

This library is a Nim wrapper for C++ Standard Template Library (STL) class. This library is obviously only compatible with the C++ backend

I recommand using this bindings only in two cases: * When wrapping a C++ library (But make sure to offer a Nim idomatic API that does not expose the STL to the user if possible). * In some performance critical code where the cost of converting Nim types to c++ types is problematic (like embeded devices).

Installation

nimble install cppstl

Add the following lines to your .nimble:

backend = "cpp"
requires "cppstl"

Limitations

cppstl currently wraps :

  • std::string
  • std::basic_string
  • std::vector
  • std::complex
  • std::pair

  • Smart pointers are partially supported:

  • std::unique_ptr
  • std::shared_ptr

Avoid using wrapped STL objects in top-level Nim scope.

Most of the times it works on Nim 1.x but leads to both compile-time and runtime errors on 2.x. So instantiate them in subroutines only to ensure portability between 1.x and 2.x.

I.e this usecase is not recommended:

when isMainModule:
  var vec = initCppVector[int]()
  vec.pushBack(20)

Use this one instead:

when isMainModule:
  proc foo = 
    var vec = initCppVector[int]()
    vec.pushBack(20)
  foo()

Contributions

All contributions are welcome!

If there is a missing function or class, that you need, don't be shy to open an issue or a PR.

Running Tests

nimble test

or

testament p "tests/t*.nim"

Usage

The documentation is here : https://clonkk.github.io/nim-cppstl/cppstl.html

You can find more use-case in the tests folder.

License

This code is licensed under MIT license (see LICENSE.txt for details)