<commit_before>---
title: Shrine for Refile Users
---

This guide is aimed at helping Refile users transition to Shrine, and it consists
of three parts:

1. Explanation of the key differences in design between Refile and Shrine
2. Instructions how to migrate and existing app that uses Refile to Shrine
3. Extensive reference of Refile's interface with Shrine equivalents

## Overview

Shrine borrows many great concepts from Refile: Refile's "backends" are here
named "storages", it uses the same IO abstraction for uploading and
representing uploaded files, similar attachment logic, and direct uploads are
supported as well.

### Uploader

While in Refile you work with storages directly, Shrine uses *uploaders* which<commit_msg>Fix typo in refile.md<commit_after>---
title: Shrine for Refile Users
---

This guide is aimed at helping Refile users transition to Shrine, and it consists
of three parts:

1. Explanation of the key differences in design between Refile and Shrine
2. Instructions how to migrate an existing app that uses Refile to Shrine
3. Extensive reference of Refile's interface with Shrine equivalents

## Overview

Shrine borrows many great concepts from Refile: Refile's "backends" are here
named "storages", it uses the same IO abstraction for uploading and
representing uploaded files, similar attachment logic, and direct uploads are
supported as well.

### Uploader

While in Refile you work with storages directly, Shrine uses *uploaders* which
{'fraction_non_alphanumeric': 0.04684317718940937, 'fraction_numerical': 0.004073319755600814, 'mean_word_length': 4.826086956521739, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3569695', 'n_tokens_mistral': 412, 'n_tokens_neox': 375, 'n_words': 214}