Write, deploy, and scale apps on IPFS

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

Easy to Use

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

Textile's decentralized databases let you quickly sync any type of app data between users or across devices.
												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
											
										
											await textile.threads.add(
	"chat",
	undefined,
	"your.bundle.id.version.Chat",
	"open",
	"shared",
	["P7X3gZus5H15tWCxk4oP6EVsgAM9vwUfCyepAKw49QuRyPYs"]
)
									
										const threadKey = 'your.bundle.id.version.Chat'
const threadName = 'Chat'
const config = {
	key: threadKey,
	name: threadName,
	type: Thread.Type.OPEN,
	sharing: Thread.Sharing.SHARED,
	force: false,
	members: ["P7X3gZus5H15tWCxk4oP6EVsgAM9vwUfCyepAKw49QuRyPYs"]
}
const newTarget = await textile.threads.add(config)
									
								
									AddThreadConfig *config = [[AddThreadConfig alloc] init];
config.key = @"your.bundle.id.version.Chat";
config.name = @"Chat";
config.type = Thread_Type_Open;
config.sharing = Thread_Sharing_Shared;
config.whitelistArray = [@[@"P7X3gZus5H15tWCxk4oP6EVsgAM9vwUfCyepAKw49QuRyPYs"] mutableCopy];
NSError *error;
Thread *thread = [Textile.instance.threads add:config error:&error];
if (error) {
	// Do something with this error
} else {
	// Success!
}
								
							
								let config = AddThreadConfig()
config.key = "your.bundle.id.version.Chat"
config.name = "Chat"
config.type = Thread_Type.open
config.sharing = Thread_Sharing.shared
config.whitelistArray = ["P7X3gZus5H15tWCxk4oP6EVsgAM9vwUfCyepAKw49QuRyPYs"]
var error: NSError?
let thread = Textile.instance().threads.add(config, error: &error)
if (error != nil) {
	// Do something with this error
} else {
	// Success!
}
							
						
							AddThreadConfig config = AddThreadConfig.newBuilder()
	.setKey("your.bundle.id.version.Chat")
	.setName("Chat")
	.setType(Thread.Type.OPEN)
	.setSharing(Thread.Sharing.SHARED)
	.addWhitelist("P7X3gZus5H15tWCxk4oP6EVsgAM9vwUfCyepAKw49QuRyPYs")
	.build();
Textile.instance().threads.add(config);

						
					

Apps for users

Our tools help developers build a new world of totally custom, decentralized, and interoperable apps. Join our Slack →