Write, deploy, and scale apps on IPFS

Textile is a set of open source tools that provide a decentralized database, data storage, user management, and more over the IPFS network.

Tools for developers

A set of tools and trustless infrastructure for building apps and a platform to return ownership of data to your users.

Learn more
docs.textile.io →

  • Limitless reach

    Connect anyone in the world with a high-quality experience.
  • Resilient storage

    Secure storage of your app's data across the IPFS network.
  • Faster to ship

    Ship cross-platform decentralized apps that work together over open protocols.

Code Example

Create encrypted, resilient, and cross-application data storage in seconds using Textile and IPFS.

Textile threads give you the benefit of a distributed database plus easy to manage access-control, off-device apps & integrations, and hosted or self-managed recovery services.
Available for iOS, Android, React Native, JavaScript and Desktop.
												for row in $( textile file list thread $ID -l100000 | jq  --arg ADDRESS "$ADDRESS" -r '.items[] | select(.user.address == $ADDRESS) | .files[0].file.hash' ); do
	START=$( textile file get $row --content | jq 'select(.event == "start")')

	# If we got any results back from Start events, we can skip creating it again
	if [ ! -z "$START" ]; then
		echo "Game on!"
		exit
	fi

done
											
										
											this is javascript
										
									
										this is react native

									
								
									import Foundation

@objc class Person: Entity {
var name: String!
var age:  Int!

init(name: String, age: Int) {
/* /* ... */ */
}

// Return a descriptive string for this person
func description(offset: Int = 0) -> String {
return "\(name) is \(age + offset) years old"
}
}

								
							
								import Foundation

@objc class Person: Entity {
var name: String!
var age:  Int!

init(name: String, age: Int) {
/* /* ... */ */
}

// Return a descriptive string for this person
func description(offset: Int = 0) -> String {
return "\(name) is \(age + offset) years old"
}
}

							
						
							import Foundation

@objc class Person: Entity {
var name: String!
var age:  Int!

init(name: String, age: Int) {
/* /* ... */ */
}

// Return a descriptive string for this person
func description(offset: Int = 0) -> String {
return "\(name) is \(age + offset) years old"
}
}

						
					
Available for iOS, Android, React Native, JavaScript and Desktop.

Apps for users

Our tools help developers build a new world of totally custom, decentralized, interoperable, and unstoppable apps.