Project structure
Inko projects follow a simple structure: an src/ directory containing your
modules, and a test/ directory containing your unit tests. Source files use
the .inko extension, and should use lowercase names. For example, the source
code for std.string resides in src/std/string.inko.
Build files go in the build/ directory. Inko creates this directory for
you if needed. This directory should not be tracked using your version control
system of choice.
Third-party dependencies are stored in a dep/ directory. This directory is
managed using Inko's package manager, and you shouldn't put files in it
yourself.
Libraries
If you are creating a library, its main module should be placed at
src/NAME.inko where NAME is the name of the library. For example, if you're
creating a library for interacting with SQLite,
you should place the main module at src/sqlite.inko. This way users can import
it using import sqlite when adding your library as a dependency.
If you need to introduce additional modules, place them in a directory in src,
named after the library (e.g. src/sqlite/statement.inko).
Executables
For executables, the main module must be placed at src/main.inko. When running
inko build without any arguments, the compiler tries to build this file if it
exists.
If you want to compile multiple executables, create a module for each executable
with an appropriate name (e.g. src/foo.inko and src/bar.inko), then specify
their paths when running inko build like so:
inko build src/foo.inko
inko build src/bar.inko
Example layout
As a reference, this is what the standard library's structure looks like:
.
├── src
│ └── std
│ ├── array.inko
│ ├── bool.inko
│ ├── byte_array.inko
│ ├── clone.inko
│ ├── cmp.inko
│ ├── debug.inko
│ ├── drop.inko
│ ├── env.inko
│ ├── ffi.inko
│ ├── float.inko
│ ├── fmt.inko
│ ├── fs
│ │ ├── dir.inko
│ │ ├── file.inko
│ │ └── path.inko
│ ├── hash.inko
│ ├── ...
│ ├── time.inko
│ └── tuple.inko
└── test
├── helpers.inko
└── std
├── fs
│ ├── test_dir.inko
│ ├── test_file.inko
│ └── test_path.inko
├── ...
├── test_array.inko
├── test_bool.inko
├── test_byte_array.inko
├── test_test.inko
├── test_time.inko
└── test_tuple.inko