Modules
Modules organize code into reusable, namespaced units.
Module Structure
Section titled “Module Structure”Each file is a module. The module name matches the file name:
src/├── main.draft├── utils.draft└── models/ ├── user.draft └── post.draftExporting
Section titled “Exporting”Use pub to make items public:
@// utils.draft
pub action greet(@name: String) write("Hello, " + @name)fin action.
pub const MAX_RETRIES = 3
pub record Config host: String port: Intfin record.Importing
Section titled “Importing”Import Specific Items
Section titled “Import Specific Items”import { greet, MAX_RETRIES } from utils
action main() @greet("World") write(string(MAX_RETRIES))fin action.Import All Items
Section titled “Import All Items”import * from utils
action main() @greet("World")fin action.Import with Alias
Section titled “Import with Alias”import { greet as sayHello } from utils
action main() @sayHello("World")fin action.Import Module
Section titled “Import Module”import utils
action main() @utils#greet("World")fin action.Module Paths
Section titled “Module Paths”Relative Paths
Section titled “Relative Paths”import { User } from ./models/userimport { Post } from ./models/postParent Directory
Section titled “Parent Directory”import { Config } from ../configStandard Library
Section titled “Standard Library”import ioimport fsimport mathimport stringsimport collectionsimport jsonimport httpimport timeimport processModule Organization
Section titled “Module Organization”Single File Module
Section titled “Single File Module”@// math_utils.draft
pub action add(@a: Int, @b: Int) -> Int return @a + @bfin action.
pub action subtract(@a: Int, @b: Int) -> Int return @a - @bfin action.
priv action internal_helper() @// Not exportedfin action.Directory Module
Section titled “Directory Module”For larger modules, use a directory with a mod.draft file:
math/├── mod.draft├── basic.draft└── advanced.draft@// math/mod.draft
pub import { add, subtract } from ./basicpub import { integrate, differentiate } from ./advancedRe-Exporting
Section titled “Re-Exporting”@// api.draft
pub import { User, Post } from ./modelspub import { create, find, update } from ./actionsConditional Imports
Section titled “Conditional Imports”import { log } from std::debug when DEBUGInline Module
Section titled “Inline Module”Define a module inline:
module utils action greet() write("Hello") fin action.fin module.
@utils#greet()Module Visibility
Section titled “Module Visibility”| Visibility | Syntax | Access |
|---|---|---|
| Public | pub |
Any module |
| Private | (default) | Same module |
| Super | super |
Parent module |
| Crate | crate |
Same crate |
Package Management
Section titled “Package Management”draft.toml
Section titled “draft.toml”[package]name = "my-app"version = "0.1.0"edition = "2024"
[dependencies]http = "1.2.0"json = { version = "1.0", features = ["serde"] }Installing Dependencies
Section titled “Installing Dependencies”draft deps installStandard Library Modules
Section titled “Standard Library Modules”| Module | Import |
|---|---|
| io | import io |
| fs | import fs |
| math | import math |
| strings | import strings |
| collections | import collections |
| json | import json |
| http | import http |
| time | import time |
| process | import process |
Next Steps
Section titled “Next Steps”Learn about Errors for error handling.
