Para poder usarlo es necesario incluir:
    with ada.strings.unbounded,ustrings;
    use ada.strings.unbounded,ustrings;
antes del encabezamiento del programa o módulo que lo requiera. Desde ese momento, pueden declararse variables de tipo ustring (o indistintamente Unbounded_String):
nombre:ustring;
Está definida la siguiente constante de tipo ustring que representa la cadena vacía:
Null_Unbounded_String:constant Unbounded_String;
Las operaciones definidas para ustrings (o indistintamente Unbounded_String) son las siguientes.
Lectura y escritura desde/en fichero/teclado/pantalla de ustrings:
    procedure Get_Line(File:in
File_Type; Item:out Unbounded_String);
    procedure Get_Line(Item:out
Unbounded_String);
    procedure Put(File:in File_Type;
Item:in Unbounded_String);
    procedure Put(Item:in
Unbounded_String);
    procedure Put_Line(File:in
File_Type; Item:in Unbounded_String);
    procedure Put_Line(Item:in
Unbounded_String);
Longitud de un ustring:
function Length(Source:in Unbounded_String) return Natural;
Intercambio del valor de dos variables de tipo ustring:
procedure Swap(Left,Right:in out Unbounded_String);
Traducción entre ustring y string:
function U(Source:String) return Unbounded_String;
function S(Source:Unbounded_String) return String;
Saber si un ustring es vacío:
function Empty(S:Unbounded_String) return Boolean;
Para añadir un ustring, un string o un carácter a un ustring:
    procedure Append(Source:in
out Unbounded_String;
                    
New_Item:in Unbounded_String);
    procedure Append(Source:in
out Unbounded_String;
                    
New_Item:in String);
    procedure Append(Source:in
out Unbounded_String;
                    
New_Item:in Character);
Concatenación de ustrings con ustrings, strings y caracteres:
    function "&"(Left,Right:in
Unbounded_String)
            
return Unbounded_String;
    function "&"(Left:in
Unbounded_String; Right:in String)
            
return Unbounded_String;
    function "&"(Left:in
String; Right:in Unbounded_String)
            
return Unbounded_String;
    function "&"(Left:in
Unbounded_String; Right:in Character)
            
return Unbounded_String;
    function "&"(Left:in
Character; Right:in Unbounded_String)
            
return Unbounded_String;
Consultar el carácter que ocupa una posición:
    function Element(Source:in
Unbounded_String; Index:in Positive)
            
return Character;
Sustituir el carácter que ocupa una posición:
    procedure Replace_Element(Source:in
out Unbounded_String;
                             
Index:in Positive;
                             
By:in Character);
Extraer una rebanada de un ustring:
    function Slice(Source:in
Unbounded_String;
                  
Low:in Positive;
                  
High:in Natural)
            
return String;
Comparaciones entre ustrings y strings:
    function "="(Left,Right:in
Unbounded_String) return Boolean;
    function "="(Left:in Unbounded_String;
Right:in String) return Boolean;
    function "="(Left:in String;
Right:in Unbounded_String) return Boolean;
    function "<"(Left,Right:in
Unbounded_String) return Boolean;
    function "<"(Left:in
Unbounded_String; Right:in String) return Boolean;
    function "<"(Left:in
String; Right:in Unbounded_String) return Boolean;
    function "<="(Left,Right:in
Unbounded_String) return Boolean;
    function "<="(Left:in
Unbounded_String; Right:in String) return Boolean;
    function "<="(Left:in
String; Right:in Unbounded_String) return Boolean;
    function ">"(Left,Right:in
Unbounded_String) return Boolean;
    function ">"(Left:in Unbounded_String;
Right:in String) return Boolean;
    function ">"(Left:in String;
Right:in Unbounded_String) return Boolean;
    function ">="(Left,Right:in
Unbounded_String) return Boolean;
    function ">="(Left:in
Unbounded_String; Right:in String) return Boolean;
    function ">="(Left:in
String; Right:in Unbounded_String) return Boolean;
Y muchas más (cuya utilidad puede consultarse en el Manual de Referencia), como...
Funciones de búsqueda:
    function Index(Source:in
Unbounded_String;
                  
Pattern:in String;
                  
Going:in Direction := Forward;
                  
Mapping:in Maps.Character_Mapping:=Maps.Identity)
            
return Natural;
    function Index(Source:in
Unbounded_String;
                  
Pattern:in String;
                  
Going:in Direction:=Forward;
                  
Mapping:in Maps.Character_Mapping_Function)
            
return Natural;
    function Index(Source:in
Unbounded_String;
                  
Set:in Maps.Character_Set;
                  
Test:in Membership:=Inside;
                  
Going:in Direction:=Forward) return Natural;
    function Index_Non_Blank(Source:in
Unbounded_String;
                           
Going:in Direction:=Forward)
            
return Natural;
    function Count(Source:in
Unbounded_String;
                  
Pattern:in String;
                  
Mapping:in Maps.Character_Mapping:=Maps.Identity)
            
return Natural;
    function Count(Source:in
Unbounded_String;
                  
Pattern:in String;
                  
Mapping:in Maps.Character_Mapping_Function)
            
return Natural;
    function Count(Source:in
Unbounded_String;
                  
Set:in Maps.Character_Set)
            
return Natural;
    procedure Find_Token(Source:in
Unbounded_String;
                        
Set:in Maps.Character_Set;
                        
Test:in Membership;
                        
First:out Positive;
                        
Last:out Natural);
Funciones de traducción:
    function Translate(Source:in
Unbounded_String;
                      
Mapping:in Maps.Character_Mapping)
            
return Unbounded_String;
    procedure Translate(Source:in
out Unbounded_String;
                       
Mapping:in Maps.Character_Mapping);
    function Translate(Source:in
Unbounded_String;
                      
Mapping:in Maps.Character_Mapping_Function)
            
return Unbounded_String;
    procedure Translate(Source:in
out Unbounded_String;
                       
Mapping:in Maps.Character_Mapping_Function);
Funciones de transformación:
    function Replace_Slice(Source:in
Unbounded_String;
                          
Low:in Positive;
                          
High:in Natural;
                          
By:in String)
            
return Unbounded_String;
    procedure Replace_Slice(Source:in
out Unbounded_String;
                           
Low:in Positive;
                           
High:in Natural;
                           
By:in String);
    function Insert(Source:in
Unbounded_String;
                   
Before:in Positive;
                   
New_Item:in String)
            
return Unbounded_String;
    procedure Insert(Source:in
out Unbounded_String;
                    
Before:in Positive;
                    
New_Item:in String);
    function Overwrite(Source:in
Unbounded_String;
                      
Position:in Positive;
                      
New_Item:in String)
            
return Unbounded_String;
    procedure Overwrite(Source:in
out Unbounded_String;
                       
Position:in Positive;
                       
New_Item:in String);
    function Delete(Source:in
Unbounded_String;
                   
From:in Positive;
                   
Through:in Natural)
            
return Unbounded_String;
    procedure Delete(Source:in
out Unbounded_String;
                    
From:in Positive;
                    
Through:in Natural);
    function Trim(Source:in
Unbounded_String;
                 
Side:in Trim_End)
            
return Unbounded_String;
    procedure Trim(Source:in
out Unbounded_String;
                  
Side:in Trim_End);
    function Trim(Source:in
Unbounded_String;
                 
Left:in Maps.Character_Set;
                 
Right:in Maps.Character_Set)
            
return Unbounded_String;
    procedure Trim(Source:in
out Unbounded_String;
                  
Left:in Maps.Character_Set;
                  
Right:in Maps.Character_Set);
    function Head(Source:in
Unbounded_String;
                 
Count:in Natural;
                 
Pad:in Character:=Space)
            
return Unbounded_String;
    procedure Head(Source:in
out Unbounded_String;
                  
Count:in Natural;
                  
Pad:in Character:=Space);
    function Tail(Source:in
Unbounded_String;
                 
Count:in Natural;
                 
Pad:in Character:=Space)
            
return Unbounded_String;
    procedure Tail(Source:in
out Unbounded_String;
                  
Count:in Natural;
                  
Pad:in Character:=Space);
    function "*"(Left:in Natural;
                
Right:in Character)
            
return Unbounded_String;
    function "*"(Left:in Natural;
                
Right : in String)
            
return Unbounded_String;
    function "*"(Left:in Natural;
                
Right:in Unbounded_String)
            
return Unbounded_String;