diff --git a/swift/Sources/FlatBuffers/Constants.swift b/swift/Sources/FlatBuffers/Constants.swift
new file mode 100644
index 0000000..2b55250
--- /dev/null
+++ b/swift/Sources/FlatBuffers/Constants.swift
@@ -0,0 +1,96 @@
+#if os(Linux)
+import CoreFoundation
+#else
+import Foundation
+#endif
+
+/// A boolean to see if the system is littleEndian
+let isLitteEndian = CFByteOrderGetCurrent() == Int(CFByteOrderLittleEndian.rawValue)
+/// Constant for the file id length
+let FileIdLength = 4
+/// Type aliases
+public typealias Byte = UInt8
+public typealias UOffset = UInt32
+public typealias SOffset = Int32
+public typealias VOffset = UInt16
+/// Maximum size for a buffer
+public let FlatBufferMaxSize = UInt32.max << ((MemoryLayout<SOffset>.size * 8 - 1) - 1)
+
+/// Protocol that confirms all the numbers
+///
+/// Scalar is used to confirm all the numbers that can be represented in a FlatBuffer. It's used to write/read from the buffer.
+public protocol Scalar: Equatable {
+    associatedtype NumericValue
+    var convertedEndian: NumericValue { get }
+}
+
+extension Scalar where Self: FixedWidthInteger {
+    /// Converts the value from BigEndian to LittleEndian
+    ///
+    /// Converts values to little endian on machines that work with BigEndian, however this is NOT TESTED yet.
+    public var convertedEndian: NumericValue {
+        return self as! Self.NumericValue
+    }
+}
+
+extension Double: Scalar {
+    public typealias NumericValue = UInt64
+    
+    public var convertedEndian: UInt64 {
+        return self.bitPattern.littleEndian
+    }
+}
+
+extension Float32: Scalar {
+    public typealias NumericValue = UInt32
+    
+    public var convertedEndian: UInt32 {
+        return self.bitPattern.littleEndian
+    }
+}
+
+extension Bool: Scalar {
+    public var convertedEndian: UInt8 {
+        return self == true ? 1 : 0
+    }
+    
+    public typealias NumericValue = UInt8
+}
+
+extension Int: Scalar {
+    public typealias NumericValue = Int
+}
+
+extension Int8: Scalar {
+    public typealias NumericValue = Int8
+}
+
+extension Int16: Scalar {
+    public typealias NumericValue = Int16
+}
+
+extension Int32: Scalar {
+    public typealias NumericValue = Int32
+}
+
+extension Int64: Scalar {
+    public typealias NumericValue = Int64
+}
+
+extension UInt8: Scalar {
+    public typealias NumericValue = UInt8
+}
+
+extension UInt16: Scalar {
+    public typealias NumericValue = UInt16
+}
+
+extension UInt32: Scalar {
+    public typealias NumericValue = UInt32
+}
+
+extension UInt64: Scalar {
+    public typealias NumericValue = UInt64
+}
+
+public func FlatBuffersVersion_1_12_0() {}
