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
Executables are created by compiling files directly located in the src/
directory, with the executable file using the base name of the source file. For
example, src/hello.inko
is compiled to an executable located at
build/debug/hello
(or build/release/hello
when using inko build
--release
).
These source files must define the async
type Main
which in turn must define
the async
method main
:
type async Main {
fn async main {
# ...
}
}
To build multiple executables, create multiple files in the src/
directory.
For example, if your project contains the files src/hello.inko
and
src/world.inko
then running inko build
produces two executables: hello
and
world
.
When building a library, don't define the Main
type, and use inko check
instead of inko build
to type-check your project.
Example layout
Here's an example of a typical Inko project:
.
├── inko.pkg
├── LICENSE
├── Makefile
├── README.md
├── src
│ ├── kvi
│ │ ├── config.inko
│ │ ├── logger.inko
│ │ ├── map.inko
│ │ ├── num.inko
│ │ ├── resp.inko
│ │ └── server.inko
│ └── kvi.inko
└── test
└── kvi
├── test_config.inko
├── test_logger.inko
├── test_map.inko
├── test_num.inko
├── test_resp.inko
└── test_server.inko