2026-01-24 22:40:22 +00:00
<!DOCTYPE html>
<!-- retoor <retoor@molodetz.nl> -->
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > base64 - Wren-CLI Manual</ title >
< link rel = "stylesheet" href = "../css/style.css" >
</ head >
< body >
< button class = "mobile-menu-toggle" > Menu</ button >
< div class = "container" >
< aside class = "sidebar" >
< div class = "sidebar-header" >
< h1 >< a href = "../index.html" > Wren-CLI</ a ></ h1 >
< div class = "version" > v0.4.0</ div >
</ div >
< nav class = "sidebar-nav" >
< div class = "section" >
< span class = "section-title" > Getting Started</ span >
< ul >
< li >< a href = "../getting-started/index.html" > Overview</ a ></ li >
< li >< a href = "../getting-started/installation.html" > Installation</ a ></ li >
< li >< a href = "../getting-started/first-script.html" > First Script</ a ></ li >
< li >< a href = "../getting-started/repl.html" > Using the REPL</ a ></ li >
</ ul >
</ div >
< div class = "section" >
< span class = "section-title" > Language</ span >
< ul >
< li >< a href = "../language/index.html" > Syntax Overview</ a ></ li >
< li >< a href = "../language/classes.html" > Classes</ a ></ li >
< li >< a href = "../language/methods.html" > Methods</ a ></ li >
< li >< a href = "../language/control-flow.html" > Control Flow</ a ></ li >
< li >< a href = "../language/fibers.html" > Fibers</ a ></ li >
< li >< a href = "../language/modules.html" > Modules</ a ></ li >
</ ul >
</ div >
< div class = "section" >
< span class = "section-title" > API Reference</ span >
< ul >
< li >< a href = "index.html" > Overview</ a ></ li >
2026-01-25 03:58:39 +00:00
< li >< a href = "string.html" > String</ a ></ li >
< li >< a href = "number.html" > Num</ a ></ li >
2026-01-24 22:40:22 +00:00
< li >< a href = "http.html" > http</ a ></ li >
< li >< a href = "websocket.html" > websocket</ a ></ li >
< li >< a href = "tls.html" > tls</ a ></ li >
< li >< a href = "net.html" > net</ a ></ li >
< li >< a href = "dns.html" > dns</ a ></ li >
< li >< a href = "json.html" > json</ a ></ li >
< li >< a href = "base64.html" class = "active" > base64</ a ></ li >
< li >< a href = "regex.html" > regex</ a ></ li >
< li >< a href = "jinja.html" > jinja</ a ></ li >
< li >< a href = "crypto.html" > crypto</ a ></ li >
< li >< a href = "os.html" > os</ a ></ li >
< li >< a href = "env.html" > env</ a ></ li >
< li >< a href = "signal.html" > signal</ a ></ li >
< li >< a href = "subprocess.html" > subprocess</ a ></ li >
< li >< a href = "sqlite.html" > sqlite</ a ></ li >
< li >< a href = "datetime.html" > datetime</ a ></ li >
< li >< a href = "timer.html" > timer</ a ></ li >
< li >< a href = "io.html" > io</ a ></ li >
2026-01-25 03:58:39 +00:00
< li >< a href = "pathlib.html" > pathlib</ a ></ li >
2026-01-24 22:40:22 +00:00
< li >< a href = "scheduler.html" > scheduler</ a ></ li >
< li >< a href = "math.html" > math</ a ></ li >
</ ul >
</ div >
< div class = "section" >
< span class = "section-title" > Tutorials</ span >
< ul >
< li >< a href = "../tutorials/index.html" > Tutorial List</ a ></ li >
</ ul >
</ div >
< div class = "section" >
< span class = "section-title" > How-To Guides</ span >
< ul >
< li >< a href = "../howto/index.html" > How-To List</ a ></ li >
</ ul >
</ div >
</ nav >
</ aside >
< main class = "content" >
< nav class = "breadcrumb" >
< a href = "../index.html" > Home</ a >
< span class = "separator" > /</ span >
< a href = "index.html" > API Reference</ a >
< span class = "separator" > /</ span >
< span > base64</ span >
</ nav >
< article >
< h1 > base64</ h1 >
< p > The < code > base64</ code > module provides Base64 encoding and decoding functionality, including URL-safe variants.</ p >
< pre >< code > import "base64" for Base64</ code ></ pre >
< h2 > Base64 Class</ h2 >
< div class = "class-header" >
< h3 > Base64</ h3 >
< p > Base64 encoding and decoding utilities</ p >
</ div >
< h3 > Static Methods</ h3 >
< div class = "method-signature" >
< span class = "method-name" > Base64.encode</ span > (< span class = "param" > data</ span > ) → < span class = "type" > String</ span >
</ div >
< p > Encodes data to standard Base64.</ p >
< ul class = "param-list" >
< li >< span class = "param-name" > data</ span > < span class = "param-type" > (String)</ span > - Data to encode</ li >
< li >< span class = "returns" > Returns:</ span > Base64-encoded string</ li >
</ ul >
< pre >< code > var encoded = Base64.encode("Hello, World!")
System.print(encoded) // SGVsbG8sIFdvcmxkIQ==</ code ></ pre >
< div class = "method-signature" >
< span class = "method-name" > Base64.decode</ span > (< span class = "param" > data</ span > ) → < span class = "type" > String</ span >
</ div >
< p > Decodes a Base64-encoded string.</ p >
< ul class = "param-list" >
< li >< span class = "param-name" > data</ span > < span class = "param-type" > (String)</ span > - Base64 string to decode</ li >
< li >< span class = "returns" > Returns:</ span > Decoded data as a string</ li >
</ ul >
< pre >< code > var decoded = Base64.decode("SGVsbG8sIFdvcmxkIQ==")
System.print(decoded) // Hello, World!</ code ></ pre >
< div class = "method-signature" >
< span class = "method-name" > Base64.encodeUrl</ span > (< span class = "param" > data</ span > ) → < span class = "type" > String</ span >
</ div >
< p > Encodes data to URL-safe Base64. Replaces < code > +</ code > with < code > -</ code > , < code > /</ code > with < code > _</ code > , and removes padding.</ p >
< ul class = "param-list" >
< li >< span class = "param-name" > data</ span > < span class = "param-type" > (String)</ span > - Data to encode</ li >
< li >< span class = "returns" > Returns:</ span > URL-safe Base64 string (no padding)</ li >
</ ul >
< pre >< code > var encoded = Base64.encodeUrl("Hello, World!")
System.print(encoded) // SGVsbG8sIFdvcmxkIQ</ code ></ pre >
< div class = "method-signature" >
< span class = "method-name" > Base64.decodeUrl</ span > (< span class = "param" > data</ span > ) → < span class = "type" > String</ span >
</ div >
< p > Decodes a URL-safe Base64 string. Handles strings with or without padding.</ p >
< ul class = "param-list" >
< li >< span class = "param-name" > data</ span > < span class = "param-type" > (String)</ span > - URL-safe Base64 string to decode</ li >
< li >< span class = "returns" > Returns:</ span > Decoded data as a string</ li >
</ ul >
< pre >< code > var decoded = Base64.decodeUrl("SGVsbG8sIFdvcmxkIQ")
System.print(decoded) // Hello, World!</ code ></ pre >
< h2 > Encoding Comparison</ h2 >
< table >
< tr >
< th > Method</ th >
< th > Alphabet</ th >
< th > Padding</ th >
< th > Use Case</ th >
</ tr >
< tr >
< td >< code > encode</ code ></ td >
< td > A-Z, a-z, 0-9, +, /</ td >
< td > Yes (=)</ td >
< td > General purpose, email, file storage</ td >
</ tr >
< tr >
< td >< code > encodeUrl</ code ></ td >
< td > A-Z, a-z, 0-9, -, _</ td >
< td > No</ td >
< td > URLs, filenames, JWT tokens</ td >
</ tr >
</ table >
< h2 > Examples</ h2 >
< h3 > Basic Encoding and Decoding</ h3 >
< pre >< code > import "base64" for Base64
var original = "The quick brown fox jumps over the lazy dog"
var encoded = Base64.encode(original)
System.print("Encoded: %(encoded)")
var decoded = Base64.decode(encoded)
System.print("Decoded: %(decoded)")
System.print("Match: %(original == decoded)")</ code ></ pre >
< h3 > Binary Data Encoding</ h3 >
< pre >< code > import "base64" for Base64
var binaryData = String.fromCodePoint(0) +
String.fromCodePoint(1) +
String.fromCodePoint(255)
var encoded = Base64.encode(binaryData)
System.print("Encoded binary: %(encoded)")
var decoded = Base64.decode(encoded)
System.print("Byte 0: %(decoded.bytes[0])")
System.print("Byte 1: %(decoded.bytes[1])")
System.print("Byte 2: %(decoded.bytes[2])")</ code ></ pre >
< h3 > URL-Safe Encoding for Tokens</ h3 >
< pre >< code > import "base64" for Base64
import "crypto" for Crypto, Hash
var data = "user:12345"
var token = Base64.encodeUrl(data)
System.print("Token: %(token)")
var decodedToken = Base64.decodeUrl(token)
System.print("Decoded: %(decodedToken)")</ code ></ pre >
< h3 > HTTP Basic Authentication</ h3 >
< pre >< code > import "base64" for Base64
import "http" for Http
var username = "alice"
var password = "secret123"
var credentials = Base64.encode("%(username):%(password)")
var headers = {
"Authorization": "Basic %(credentials)"
}
var response = Http.get("https://api.example.com/protected", headers)
System.print(response.body)</ code ></ pre >
< h3 > Data URI Encoding</ h3 >
< pre >< code > import "base64" for Base64
import "io" for File
var imageData = File.read("image.png")
var encoded = Base64.encode(imageData)
var dataUri = "data:image/png;base64,%(encoded)"
System.print(dataUri)</ code ></ pre >
< h3 > JWT-Style Token Parts</ h3 >
< pre >< code > import "base64" for Base64
import "json" for Json
var header = {"alg": "HS256", "typ": "JWT"}
var payload = {"sub": "1234567890", "name": "John Doe"}
var headerB64 = Base64.encodeUrl(Json.stringify(header))
var payloadB64 = Base64.encodeUrl(Json.stringify(payload))
System.print("Header: %(headerB64)")
System.print("Payload: %(payloadB64)")</ code ></ pre >
< div class = "admonition note" >
< div class = "admonition-title" > Note</ div >
< p > Base64 encoding increases data size by approximately 33%. A 3-byte input becomes 4 Base64 characters.</ p >
</ div >
< div class = "admonition tip" >
< div class = "admonition-title" > Tip</ div >
< p > Use < code > encodeUrl</ code > and < code > decodeUrl</ code > when the encoded string will be used in URLs, query parameters, or filenames where < code > +</ code > , < code > /</ code > , and < code > =</ code > characters may cause issues.</ p >
</ div >
</ article >
< footer class = "page-footer" >
< a href = "json.html" class = "prev" > json</ a >
< a href = "regex.html" class = "next" > regex</ a >
</ footer >
</ main >
</ div >
< script src = "../js/main.js" ></ script >
</ body >
</ html >