Quickstart
This guide walks you through creating an account, setting up credentials, and uploading your first object. Choose the path that fits your workflow.
1. Create your account
- Go to app.fil.one and sign up with your email or SSO.
- Verify your email address.
- You're in. No credit card needed — your 30-day free trial starts automatically.
2. Create a bucket
From the dashboard, click New bucket to open your buckets, then Create bucket. Give it a name (lowercase letters, numbers, and hyphens — note that Fil One does not allow dots, unlike AWS S3) and choose your settings:
| Setting | Options | Notes |
|---|---|---|
| Region | eu-west-1 Europe (France) or us-east-1 US East (Michigan) | Defaults to eu-west-1. Cannot be changed later. |
| Encryption | Always on | All data is encrypted at rest by default. Nothing to configure. |
| Versioning | Off by default | Keeps a history of every version of an object. |
| Object Lock | Off by default | WORM protection. Requires versioning. |
| Retention | Off by default | A default retention period applied to new objects. Requires Object Lock. |
Region, versioning, Object Lock, and retention are all fixed at creation. There is no way to turn versioning or Object Lock on for an existing bucket, or to move a bucket to another region — you would have to create a new bucket and copy your data across. If you think you will want version history or WORM protection, enable it now.
The three object settings nest, so you enable them in order:
-
Versioning — turn this on first. Object Lock stays greyed out until you do.
-
Object Lock — becomes available once versioning is on. Retention stays greyed out until you enable it.
-
Retention — becomes available once Object Lock is on. Choose a mode and a duration:
- Governance (the default) — users with special permissions can delete or modify protected objects.
- Compliance — no one can delete or modify objects until the retention period expires.
The duration can be set in days or years, from 1 day up to 100 years.
See Versioning and Object Lock for the full picture before committing to either.
You will also see an optional API key section during bucket creation. Expand it to create a new key scoped to this bucket in one step. If you plan to use the CLI or SDK, set up your key at this step — otherwise skip it and go to API Keys in the left menu later. Note that a key belongs to a single region, so it must match the region you picked above.
3. Upload your first object
Choose your preferred method. The App requires no API key. For CLI and SDK access, go to API Keys in the left menu and click Create new key. You'll get two values:
- Access Key ID — identifies your account (safe to store in config)
- Secret Access Key — authenticates your requests (treat like a password)
Your secret key is shown once. Copy it and store it securely. If you lose it, you'll need to generate a new key pair.
A key also belongs to a single region, so create it in the same region as your bucket.
The examples below use eu-west-1, the default region. For a bucket in us-east-1, use https://us-east-1.s3.filonecontent.com and region us-east-1 instead.
- App
- AWS CLI
- Python (boto3)
- JavaScript (AWS SDK v3)
- Open your bucket from the dashboard.
- Click Upload object, select one or more files (or drag a whole folder in), then click Upload to start the transfer.
- Your objects appear in the file list once the upload completes.
- To download: click the download icon on the object's row, or open the object's detail page and use the Download button in the header.
Configure the CLI to point at Fil One:
aws configure set aws_access_key_id YOUR_ACCESS_KEY
aws configure set aws_secret_access_key YOUR_SECRET_KEY
aws configure set default.region eu-west-1
# Path-style is required — Fil One does not support virtual-hosted URLs
aws configure set default.s3.addressing_style path
Upload a file:
aws s3 cp my-file.txt s3://my-bucket/my-file.txt \
--endpoint-url https://eu-west-1.s3.filonecontent.com
Verify it's there:
aws s3 ls s3://my-bucket/ --endpoint-url https://eu-west-1.s3.filonecontent.com
import boto3
from botocore.config import Config
s3 = boto3.client(
"s3",
endpoint_url="https://eu-west-1.s3.filonecontent.com",
aws_access_key_id="YOUR_ACCESS_KEY",
aws_secret_access_key="YOUR_SECRET_KEY",
region_name="eu-west-1",
config=Config(s3={"addressing_style": "path"}),
)
# Upload a file
s3.upload_file("my-file.txt", "my-bucket", "my-file.txt")
# List objects to confirm
response = s3.list_objects_v2(Bucket="my-bucket")
for obj in response.get("Contents", []):
print(obj["Key"], obj["Size"])
import { S3Client, PutObjectCommand, ListObjectsV2Command } from "@aws-sdk/client-s3";
import { readFileSync } from "fs";
const client = new S3Client({
endpoint: "https://eu-west-1.s3.filonecontent.com",
region: "eu-west-1",
forcePathStyle: true,
credentials: {
accessKeyId: "YOUR_ACCESS_KEY",
secretAccessKey: "YOUR_SECRET_KEY",
},
});
// Upload a file
await client.send(new PutObjectCommand({
Bucket: "my-bucket",
Key: "my-file.txt",
Body: readFileSync("my-file.txt"),
}));
// List objects to confirm
const { Contents } = await client.send(
new ListObjectsV2Command({ Bucket: "my-bucket" })
);
Contents?.forEach((obj) => console.log(obj.Key, obj.Size));